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

質問編集履歴

1

ソースコードが読み込めない形式になっていたので変更しました。ご指摘ありがとうございます。

2019/12/16 06:07

投稿

keibu223
keibu223

スコア4

title CHANGED
File without changes
body CHANGED
@@ -5,47 +5,53 @@
5
5
  numpyのfftを使って入力ファイルをフーリエ変換し、編集後のデータをifftを使ってwavファイルに戻したいのですが、雑音だらけになってしまいます。なぜ雑音だらけになるのかが分かりません。ご指摘いただけないでしょうか。
6
6
 
7
7
  ### 該当のソースコード
8
+ ```python
9
+
8
10
  import wav
9
11
  import numpy
10
12
 
11
- wf = wave.open("sword-slash.wav", "rb")
13
+ freq = 500
14
+ low = 500
12
15
 
13
- numch = wf.getnchannels() #チャンネル数
14
- samplewidth = wf.getsampwidth()
15
- samplerate = wf.getframerate() #サンプリング周波数
16
+ wf = wave.open("sword-slash.wav", "rb")
16
- numsamples = wf.getnframes() #フレーム数
17
17
 
18
+ numch = wf.getnchannels() #チャンネル数
19
+ samplewidth = wf.getsampwidth()
20
+ samplerate = wf.getframerate() #サンプリング周波数
18
- buf = wf.readframes(wf.getnframes())
21
+ numsamples = wf.getnframes() #フレーム数
19
- wf.close()
20
22
 
21
-   //配列に格納
22
- if samplewidth == 2:
23
- data = numpy.frombuffer(buf, dtype='int16')
23
+ buf = wf.readframes(wf.getnframes())
24
- after = numpy.zeros(numsamples, dtype='int16')
25
- elif samplewidth == 4:
24
+ wf.close()
26
- data = numpy.frombuffer(buf, dtype='int32')
27
- after = numpy.zeros(numsamples, dtype='int32')
28
25
 
26
+ //配列に格納
27
+ if samplewidth == 2:
28
+ data = numpy.frombuffer(buf, dtype='int16')
29
+ after = numpy.zeros(numsamples, dtype='int16')
30
+ if samplewidth == 4:
31
+ data = numpy.frombuffer(buf, dtype='int32')
32
+ after = numpy.zeros(numsamples, dtype='int32')
33
+
29
- N = numsamples
34
+ N = numsamples
30
- start = 0
35
+ start = 0
31
36
 
32
- G = numpy.fft.fft(data[start:start+N])
37
+ G = numpy.fft.fft(data[start:start+N])
33
- G = abs(G)
38
+ #G = abs(G)
34
- flist = numpy.fft.fftfreq(N, d=1/samplerate)
39
+ flist = numpy.fft.fftfreq(N, d=1/samplerate)
35
40
 
36
- G_roll = numpy.roll(flist, freq) #freq = 音の高さのパラメータ(音の高さを高くしたい)
41
+ G_roll = numpy.roll(flist, freq) #freq = 音の高さのパラメータ(音の高さを高くしたい)
37
- G_roll[flist > low] = 0 #ローパスのパラメータ(lowより大きい周波数は0にしたい)
42
+ G_roll[flist > low] = 0 #ローパスのパラメータ(lowより大きい周波数は0にしたい)
38
43
 
39
- after = numpy.fft.ifft(G)
44
+ after = numpy.fft.ifft(G)
40
45
 
41
- ww = wave.open("sample2.wav", "wb")
46
+ ww = wave.open("sample2.wav", "wb")
42
- ww.setnchannels(numch)
47
+ ww.setnchannels(numch)
43
- ww.setsampwidth(samplewidth)
48
+ ww.setsampwidth(samplewidth)
44
- ww.setframerate(samplerate)
49
+ ww.setframerate(samplerate)
45
- ww.setnframes(numsamples)
50
+ ww.setnframes(numsamples)
46
51
 
47
- ww.writeframes(after)
52
+ ww.writeframes(after)
48
53
 
54
+ ```
49
55
 
50
56
  ### 補足情報(FW/ツールのバージョンなど)
51
57
  python3.6でpycharmを使って実装しています