The Beatles, A Hard Days's Nightのイントロをフーリエ解析する。
今回は、アルバム版A Hard Days's Nightの、イントロの左チャンネルのみを解析する。
この左チャンネルには、PaulのベースとGeorgeの12弦ギターが入っています。
ここの記事の、「周波数成分を表示」を参考にさせていただきました。
https://jorublog.site/python-voice-analysis/
モノラルWAVファイルのフーリエ解析がそのままできました。
フーリエ解析した結果の、matplotlibグラフはこちらです。
縦軸が音量、横軸が周波数の対数表示。
主な音符には緑の線を入れています。Dの音には赤の線を入れています。
ベースの音はD3で、特に大きい音量になっています。
問題は、このD2の音が1/3くらいD#3に寄っていること。このズレは、チューニングミスをとは言い難く、意図的にズラしたのではないかと推測します。
もしくは、ジョージ・マーティンが編集中にテープの再生速度をずらした可能性もあります。
このズレが独特な不協和音を生み出しているのではないでしょうか。
この音の倍音であるD4もズレています。3倍音のA4、4倍音のD5、5倍音の734Hzも小さな音量で入っています。
オクターブ低いD2は出力レベルが低くなっていますが、同様のズレはあります。
D7の音は不明です。
A2とF3の音もベースが出しているはずですが、チューニングのズレは観測されていません。
出版されている楽譜の音は、A2 D3 F3 G3 A3 C4 D4 G4 C5 D5 G5 E6 となっています。
D3ズレ問題の除けば、今回のフーリエ解析の結果と、ほぼ一致しています。
次回は、右チャンネルの解析をします。
import sys
import scipy.io.wavfile
import numpy as np
import matplotlib.pyplot as plt
#音声ファイル読み込み
#args = sys.argv
wav_filename = '../Documents/hdn_left.wav'
rate, data = scipy.io.wavfile.read(wav_filename)
#(振幅)の配列を作成
data = data / 32768
##### 周波数成分を表示する #####
#縦軸:dataを高速フーリエ変換する(時間領域から周波数領域に変換する)
fft_data = np.abs(np.fft.fft(data))
#横軸:周波数の取得 #np.fft.fftfreq(データ点数, サンプリング周期)
freqList = np.fft.fftfreq(data.shape[0], d=1.0/rate)
#データプロット
plt.xscale("log")
plt.plot(freqList, fft_data)
plt.xlim(50, 3200) #0~8000Hzまで表示
def put_f_red(f, name):
x1, y1 = [f, f], [100, 600]
plt.plot(x1, y1, 'r-')
plt.text(f-5, 620, name, size=10, color='red')
def put_f(f, name):
x1, y1 = [f, f], [200, 500]
plt.plot(x1, y1, 'g-')
plt.text(f-5, 520, name, size=10, color='green')
#観測された音符のライン表示
put_f_red(73, 'D2')
put_f_red(78, 'D2#')
put_f_red(147, 'D3')
put_f_red(156, 'D#3')
put_f_red(294, 'D4')
put_f_red(311, 'D#4')
put_f_red(587, 'D5')
put_f_red(1175, 'D6')
put_f_red(2349, 'D7')
put_f_red(2489, 'D#7')
put_f_red(440, 'A4')
put_f_red(734, '734Hz')
put_f(110, 'A2')
put_f(175, 'F3')
put_f(261, 'C4(mid)')
put_f(1318, 'E6')
put_f(3136, 'G7')
put_f(2794, 'F7')
put_f(349, 'F4')
put_f(392, 'G4')
put_f(523, 'C5')
put_f(2637, 'E7')
put_f(1046, 'C6')
plt.show()