b479. 音名
標籤 : 聲音處理
通過比率 : 9人/10人 ( 90% ) [非即時]
評分方式:
Tolerant

最近更新 : 2015-08-27 17:00

內容



以數學的角度解釋一下「十二平均律」。音樂家將中音La定為440Hz,高音La就是頻率乘以二880Hz(琴弦長度變成一半),低音La就是頻率除以二220Hz(琴弦長度變成兩倍)。

低音La與中音La之間,等分為12個半音。中音La與高音La之間也是如法炮製,不贅述。順帶一提,音樂家規定兩個半音等於一個全音。

12個半音,12+1個音階,音樂家從中取出其中7個經常使用的音階,依序取名為ABCDEFG,也就是我們所唱的LaSiDoReMiFaSol。

至於剩餘的音階,則使用升降記號去表達:♯升半音,♭降半音。

至於中音、高音、低音的差別,則在右下角添上數字。中音定為3,從C開始,到B結束。最後形成上圖所示。



最後是最難理解的部分。音樂家規定,無論是哪一種音階,只要是變成高音,就是頻率乘以二(琴弦長度變成一半);只要是變成低音,就是頻率除以二(琴弦長度變成兩倍)。

為了滿足這個規定,前面所謂的等分,其實不是頻率的間距相同,而是頻率取log之後的間距相同,間距是(log2)/12。由此可以得到音階頻率的數學公式:440 ⋅ 2n/12,n是各種整數。



現在給你一個音名,請你產生一秒鐘的聲音。

輸入說明

一個音名:三個字元或者兩個字元。第一個字元是ABCDEFG其中一個。第二個字元是#b其中一個,第二個字元可有可無。第三個字元是1234567其中一個。

輸出說明

一段聲音:兩個整數 R N (R = N = 8000),是取樣頻率與訊號數量。下一行有 N 個整數,是訊號數值 (-32768 ~ +32767)。

 

範例輸入 #1
C4#
範例輸出 #1
8000 8000
0 7077 13820 19911 25062 29029 31627 32731 (後面省略)
測資資訊:
記憶體限制: 64 MB
提示 :

1. 這是我自己寫的小工具,各位可以將本題的輸出數據存檔後拖曳至此,將本題的輸出數據轉換成聲音。

2. 當你使用的音響、耳機比較差,則無法播放太低、太高的頻率,無法聽到聲音。

標籤:
聲音處理
出處:
[管理者: DJWS (...) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」