回答編集履歴

1

インデントについて明記

2019/01/22 08:33

投稿

firedfly
firedfly

スコア1131

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
+ ```