回答編集履歴
1
インデントについて明記
test
CHANGED
@@ -22,6 +22,58 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
ただ、CSVの書き込みと読み込みもmain関数の一部ですので
|
25
|
+
ただ、CSVの書き込みと読み込みもmain関数の一部ですので、下のようにインデントしてください。
|
26
26
|
|
27
|
+
そうしないとmain関数内で定義されたflistとampを参照できずにエラーとなります。
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
```Python
|
32
|
+
|
33
|
+
def main():
|
34
|
+
|
35
|
+
wf = wave.open("test.wav", "r")
|
36
|
+
|
37
|
+
fs = wf.getframerate() # サンプリング周波数
|
38
|
+
|
39
|
+
g = wf.readframes(wf.getnframes())
|
40
|
+
|
41
|
+
g = np.frombuffer(g, dtype="int16") / 32768.0 # -1~1に正規化
|
42
|
+
|
43
|
+
wf.close()
|
44
|
+
|
45
|
+
n0 = 0 # サンプリング開始位置
|
46
|
+
|
47
|
+
N = 256 # サンプル数
|
48
|
+
|
49
|
+
G = np.fft.fft(g[n0:n0 + N]) # 高速フーリエ変換
|
50
|
+
|
51
|
+
amp = [np.sqrt(c.real ** 2 + c.imag ** 2) for c in G] # 振幅スペクトル
|
52
|
+
|
53
|
+
flist = np.fft.fftfreq(N, d=1.0 / fs) # 周波数リスト
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
print("周波数リスト", flist)
|
58
|
+
|
59
|
+
print("振幅スペクトル", amp)
|
60
|
+
|
61
|
+
|
62
|
+
|
27
|
-
イ
|
63
|
+
# CSVファイルを作成書き込み
|
64
|
+
|
65
|
+
with open('test2.csv', 'w') as csv_file:
|
66
|
+
|
67
|
+
fieldnames = ['Hz', 'dB']
|
68
|
+
|
69
|
+
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
|
70
|
+
|
71
|
+
writer.writeheader()
|
72
|
+
|
73
|
+
for f, a in zip(flist, amp):
|
74
|
+
|
75
|
+
writer.writerow({'Hz': f, 'dB': a})
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
```
|