質問編集履歴

2

ソースコードの追加

2020/12/24 03:55

投稿

iface
iface

スコア42

test CHANGED
File without changes
test CHANGED
@@ -22,11 +22,23 @@
22
22
 
23
23
 
24
24
 
25
+ 追加:
26
+
27
+ もう一つこちらのサイトを参考にしてもう一つbandpassのプログラムを改良して作ってみました。
28
+
29
+ http://tacky0612.hatenablog.com/entry/2017/11/28/133103
30
+
31
+ こちらの場合は、wavファイルが出力されるのですが、再生時間が0秒と書いてあり再生できない状態です。
32
+
33
+ bandpassの下にソースコードを記載しておきます。
34
+
35
+
36
+
25
37
  ### 該当のソースコード
26
38
 
27
39
 
28
40
 
29
- ```ここに言語名を入力
41
+ ```bandpass
30
42
 
31
43
  import sys
32
44
 
@@ -130,10 +142,126 @@
130
142
 
131
143
  ```
132
144
 
133
-
134
-
135
145
  実行例: python ~.py ~.wav
136
146
 
147
+ ###追加のソースコード
148
+
149
+ ```bandpass2
150
+
151
+ import numpy as np
152
+
153
+ import sys
154
+
155
+ from scipy.fftpack import rfft,irfft,fftfreq
156
+
157
+ import wave
158
+
159
+ import matplotlib.pyplot as plt
160
+
161
+
162
+
163
+ # ファイルを読み出し
164
+
165
+ args = sys.argv
166
+
167
+ wav_filename = args[1]
168
+
169
+ wf = wave.open(wav_filename,"r")
170
+
171
+
172
+
173
+ rate = wf.getframerate()
174
+
175
+ nframes = wf.getnframes()
176
+
177
+ width = wf.getsampwidth()
178
+
179
+
180
+
181
+ amp = (2**8) ** width / 2 #???
182
+
183
+ data = wf.readframes(nframes) #frameの読み込み
184
+
185
+ wf.close()
186
+
187
+ data = np.frombuffer(data,'int16') # intに変換
188
+
189
+ data = data / amp # 振幅正規化(-1~1)
190
+
191
+
192
+
193
+ # make time axis
194
+
195
+ time = np.arange(0, nframes/rate, 1.0/rate)
196
+
197
+
198
+
199
+ fft_data = np.fft.fft(data)
200
+
201
+ freq = np.fft.fftfreq(nframes,1.0/rate)
202
+
203
+
204
+
205
+ #正規化
206
+
207
+ fft_data = fft_data/(nframes/2)
208
+
209
+
210
+
211
+ #配列fft_dataをコピー
212
+
213
+ fft_data2 = fft_data.copy()
214
+
215
+
216
+
217
+ # bandpass処理
218
+
219
+ fft_data2[(freq < 300)&(freq > -300)] = 0 #highpass
220
+
221
+ fft_data2[(freq > 3300)|(freq < -3300)] = 0 #lowpass
222
+
223
+
224
+
225
+ # 高速逆フーリエ変換(時間信号に戻す)
226
+
227
+ data2 = np.fft.ifft(fft_data2)
228
+
229
+ #data2 = np.array(data2,'int16')
230
+
231
+
232
+
233
+ # 振幅を元のスケールに戻す
234
+
235
+ data2 = np.real(data2*nframes)
236
+
237
+
238
+
239
+ ###############################################
240
+
241
+ #### 画像をプロットするプログラムは長いため省略 ####
242
+
243
+ ###############################################
244
+
245
+
246
+
247
+ ###ファイル書き込み###
248
+
249
+ write_wave = wave.open("1.wav","wb")
250
+
251
+ write_wave.setparams(wf.getparams())
252
+
253
+ write_wave.writeframes(data2)
254
+
255
+ write_wave.close()
256
+
257
+
258
+
259
+ ```
260
+
261
+
262
+
263
+
264
+
137
265
  ### 試したこと
138
266
 
139
267
 

1

write('out.wav',rate,data2)に変更

2020/12/24 03:55

投稿

iface
iface

スコア42

test CHANGED
File without changes
test CHANGED
@@ -126,7 +126,7 @@
126
126
 
127
127
  data.flags.writeable = True
128
128
 
129
- write('out.wav',rate,data)
129
+ write('out.wav',rate,data2)
130
130
 
131
131
  ```
132
132