最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python程序計算鋼琴88個鍵的音高

 更新時間:2022年04月09日 11:17:19   作者:雪山飛豬  
這篇文章介紹了使用Python程序計算鋼琴88個鍵的音高,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

我們知道了鋼琴鍵盤的音高是其實是有規(guī)律的,如下

  • 頻率翻倍,高一個八度
  • 國際基準音:440Hz,鋼琴鍵盤上對應小字一組的la

小字一組的la可以看下圖

根據(jù)這兩個規(guī)律,我們就可以計算出所有88個琴鍵的音高(單位是頻率)。

鋼琴鍵盤是標準的十二平均律,12個鍵后頻率翻倍,那么每兩個琴鍵之間的頻率倍數(shù)是固定的,也就是可以根據(jù)一個琴鍵的音高,計算出下一個琴鍵的音高。

計算鋼琴最左邊琴鍵的音高

我們知道小字一組的la頻率是440Hz,鋼琴最左邊的鍵也是la,隔了4個組,根據(jù)x * 2 * 2 * 2 * 2 = 440Hz。
那么最左邊琴鍵的音高為

x = 440 / 16 = 27.5

計算每兩個琴鍵的頻率倍數(shù)

每隔12個鍵音高翻倍,x^12=2
那么每個鍵的音高倍數(shù)為2開12次方

x = pow(2, 1/12)=1.0594630943592953

python程序實現(xiàn)

知道了最左邊琴鍵的音高,還知道了倍數(shù),那么不停地乘個87次就能知道鋼琴所有琴鍵的音高了。
我們用python實現(xiàn)一樣

定義鋼琴鍵盤

我們先定義一個相關鋼琴鍵盤的變量

# 鋼琴鍵盤chenqionghe
keyboard = {
    "大字二組": ['A2', 'A2#', 'B2'],
    "大字一組": ['C1', 'C1#', 'D1', 'D1#', 'E1', 'F1', 'F1#', 'G1', 'G1#', 'A1', 'A1#', 'B1'],
    "大字組": ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'],
    "小字組": ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'],
    "小字一組": ['c1', 'c1#', 'd1', 'd1#', 'e1', 'f1', 'f1#', 'g1', 'g1#', 'a1', 'a1#', 'b1'],
    "小字二組": ['c2', 'c2#', 'd2', 'd2#', 'e2', 'f2', 'f2#', 'g2', 'g2#', 'a2', 'a2#', 'b2'],
    "小字三組": ['c3', 'c3#', 'd3', 'd3#', 'e3', 'f3', 'f3#', 'g3', 'g3#', 'a3', 'a3#', 'b3'],
    "小字四組": ['c4', 'c4#', 'd4', 'd4#', 'e4', 'f4', 'f4#', 'g4', 'g4#', 'a4', 'a4#', 'b4'],
    "小字五組": ['c5']
}

為了友好展示,我們放入DataFrame中查看

keybord_data={k: [*v, *[""]*(12-len(v))] for k, v in keyboard.items()}
df = pd.DataFrame(keybord_data)

輸出一下

OK,這里我們就先把鋼琴鍵盤弄出來了。

計算每個琴鍵的音高

# python
data = {}

start = 440 / 16
loop = math.pow(2, 1 / 12)
i = 0
for groupName, group in keyboard.items():
    for name in group:
        if name == "A2":
            current = start
        else:
            current = current * loop
        data[name] = name + ": " + str(round(current,3))
        i = i + 1

data這個數(shù)組保存了每個琴鍵的音高

展示琴鍵音高

df.replace(data)

查看一下

這樣就計算出了所有琴鍵的音高

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 解析目標檢測之IoU

    解析目標檢測之IoU

    Intersection over Union(IoU)是一種測量在特定數(shù)據(jù)集中檢測相應物體準確度的一個標準。IoU是一個簡單的測量標準,只要是在輸出中得出一個預測范圍(bounding boxes)的任務都可以用IoU來進行測量
    2021-06-06
  • Django drf請求模塊源碼解析

    Django drf請求模塊源碼解析

    APIView中的dispatch是整個請求生命過程的核心方法,包含了請求模塊,權限驗證,異常模塊和響應模塊,我們先來介紹請求模塊,對Django drf請求模塊源碼相關知識感興趣的朋友一起看看吧
    2021-06-06
  • Python時間戳轉換為字符串與字符串轉換為時間戳

    Python時間戳轉換為字符串與字符串轉換為時間戳

    在編寫代碼時,往往涉及時間、日期、時間戳的相互轉換,下面這篇文章主要給大家介紹了關于Python時間戳轉換為字符串與字符串轉換為時間戳的相關資料,文中給出了詳細的實例代碼,需要的朋友可以參考下
    2023-02-02
  • pytorch中函數(shù)tensor.numpy()的數(shù)據(jù)類型解析

    pytorch中函數(shù)tensor.numpy()的數(shù)據(jù)類型解析

    這篇文章主要介紹了pytorch中函數(shù)tensor.numpy()的數(shù)據(jù)類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python中yield返回生成器的詳細方法

    Python中yield返回生成器的詳細方法

    這篇文章主要介紹了Python中的yield返回生成器,生成器是Python編程進階中的重要知識點,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • Pytorch.nn.conv2d 過程驗證方式(單,多通道卷積過程)

    Pytorch.nn.conv2d 過程驗證方式(單,多通道卷積過程)

    今天小編就為大家分享一篇Pytorch.nn.conv2d 過程驗證方式(單,多通道卷積過程),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python同時遍歷兩個list用法說明

    python同時遍歷兩個list用法說明

    這篇文章主要介紹了python同時遍歷兩個list用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python爬蟲實例——scrapy框架爬取拉勾網(wǎng)招聘信息

    Python爬蟲實例——scrapy框架爬取拉勾網(wǎng)招聘信息

    這篇文章主要介紹了Python爬蟲實例——scrapy框架爬取拉勾網(wǎng)招聘信息的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • Jupyter Notebook輸出矢量圖實例

    Jupyter Notebook輸出矢量圖實例

    這篇文章主要介紹了Jupyter Notebook輸出矢量圖實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 在linux下實現(xiàn) python 監(jiān)控usb設備信號

    在linux下實現(xiàn) python 監(jiān)控usb設備信號

    今天小編就為大家分享一篇在linux下實現(xiàn) python 監(jiān)控usb設備信號,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論

梨树县| 新邵县| 隆子县| 壤塘县| 义马市| 精河县| 武义县| 林甸县| 常州市| 临武县| 汤原县| 马鞍山市| 商水县| 顺义区| 西畴县| 大厂| 咸宁市| 江陵县| 报价| 安吉县| 石家庄市| 克东县| 昌乐县| 饶河县| 五河县| 北京市| 太白县| 房山区| 关岭| 金秀| 东乌珠穆沁旗| 通海县| 临高县| 肥城市| 洪雅县| 和林格尔县| 资源县| 保山市| 枞阳县| 永州市| 郁南县|