回答編集履歴
1
インデントについて明記
answer
CHANGED
@@ -10,5 +10,31 @@
|
|
10
10
|
flist, amp はそれぞれ256行なので
|
11
11
|
zip関数でひとつずつ順番に取り出してwriterow関数で書き込みます。
|
12
12
|
|
13
|
-
ただ、CSVの書き込みと読み込みもmain関数の一部ですので
|
13
|
+
ただ、CSVの書き込みと読み込みもmain関数の一部ですので、下のようにインデントしてください。
|
14
|
+
そうしないとmain関数内で定義されたflistとampを参照できずにエラーとなります。
|
15
|
+
|
16
|
+
```Python
|
17
|
+
def main():
|
18
|
+
wf = wave.open("test.wav", "r")
|
19
|
+
fs = wf.getframerate() # サンプリング周波数
|
20
|
+
g = wf.readframes(wf.getnframes())
|
21
|
+
g = np.frombuffer(g, dtype="int16") / 32768.0 # -1~1に正規化
|
22
|
+
wf.close()
|
23
|
+
n0 = 0 # サンプリング開始位置
|
24
|
+
N = 256 # サンプル数
|
25
|
+
G = np.fft.fft(g[n0:n0 + N]) # 高速フーリエ変換
|
26
|
+
amp = [np.sqrt(c.real ** 2 + c.imag ** 2) for c in G] # 振幅スペクトル
|
27
|
+
flist = np.fft.fftfreq(N, d=1.0 / fs) # 周波数リスト
|
28
|
+
|
29
|
+
print("周波数リスト", flist)
|
30
|
+
print("振幅スペクトル", amp)
|
31
|
+
|
14
|
-
イ
|
32
|
+
# CSVファイルを作成書き込み
|
33
|
+
with open('test2.csv', 'w') as csv_file:
|
34
|
+
fieldnames = ['Hz', 'dB']
|
35
|
+
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
|
36
|
+
writer.writeheader()
|
37
|
+
for f, a in zip(flist, amp):
|
38
|
+
writer.writerow({'Hz': f, 'dB': a})
|
39
|
+
|
40
|
+
```
|