初投稿になります.
音を低周波数帯,高周波数帯,その間に分けるプログラムを作ったので需要があるかどうかはわかりませんが上げておきます.
soxでhighpass,lowpass処理はできるにはできるのですが,sox(link)の説明を読む限り設定した周波数から音の大きさを減少させていく感じになっているとになっていました.
なので,1つのwavファイルに対して一回STFTでスペクトログラムにしたあと,特定の周波数帯以外を0にしてISTFTして完全に他の周波数帯が入らないようにしました.
configの説明
codeでのconfigに対する説明になります.
* N_FFTとHOP_LENは短時間フーリエ変換,短時間逆フーリエ変換を行う際のパラメータなのでここはいじらなくても大丈夫だと思われます.
* LOWCUT_HZ:ここは実際の周波数帯を打ち込むのではありません.(すいません紛らわしくて)現状では10でだいたい300Hzぐらいです.
* HIGHCUT_HZ:ここも実際の周波数ではありません(30でだいたい1000Hzぐらいです
requirement
- librosa
- tqdm
- numpy
- matplotlib
おまけ
それぞれカットされたものがどのようなスペクトログラムになっているのかを表すコードもつけておきました.使うときには'''を外してください
fig,axes = plt.subplots(ncols=3,nrows=1,figsize=(12,9))
plt.subplot(3,1,1)
display.specshow(spec_high,hop_length=HOP_LEN,x_axis='time',y_axis='hz')
plt.subplot(3,1,2)
display.specshow(spec,hop_length=HOP_LEN,x_axis='time',y_axis='hz')
plt.subplot(3,1,3)
display.specshow(spec_low,hop_length=HOP_LEN,x_axis='time',y_axis='hz')
plt.show()
Codeの場所
ここ(link)にあります.