質問するログイン新規登録

回答編集履歴

1

インデントについて明記

2019/01/22 08:33

投稿

firedfly
firedfly

スコア1133

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