前提・実現したいこと・試したこと
人の声と雑音を合成させた音声ファイルを機械学習させて、音声分離させようと考えています。
合成させた音声ファイルをcsvファイルにし、機械学習させようと思っているのですが、時間的にも効率的に音声分離させるために、データサイズを小さくするべく、バンドパスフィルタ処理をすることにしました。
下のグラフは、処理を行う前の合成波形の例ですが、まずハイパスフィルタで、カットオフ周波数を0Hzから1000Hzに100Hzずつ上げていき、経過を見たのですが、データサイズに変化は見られませんでした。
この方法では、csvファイルでのデータサイズは小さくならないのでしょうか。
下にソースコードを貼っておきます。
下のプログラムでは、合成させた音声ファイルにフィルタ処理を施し、wavファイルを書き出すところまでしています。
csvファイルの作成に関しては、wav2csvを用いています。
該当のソースコード
import sys import scipy.io.wavfile from scipy.io.wavfile import write from scipy.io.wavfile import read from scipy.fftpack import rfft,irfft,fftfreq import numpy as np import matplotlib.pyplot as plt #####音声ファイル読み込み##### args = sys.argv wav_filename = args[1] rate, data = scipy.io.wavfile.read(wav_filename) #time = np.arange(0,data.shape[0]/rate,1/rate) #時間軸作成 #dataを高速フーリエ変換 fft_data = np.fft.fft(data) freqList = np.fft.fftfreq(data.shape[0], d=1.0/rate) #周波数取得 fft_data2 = fft_data.copy() #####フィルタ処理##### fft_data2[(freqList < 1000)&(freqList > -1000)] = 0 #highpass #fft_data2[(freqList > 3300)|(freqList < -3300)] = 0 #lowpass data2 = np.fft.ifft(fft_data2) data2ri = data2.real.astype(np.int16) print(np.max(data)) print(np.min(data)) print(np.max(data2)) print(np.min(data2)) print(np.max(data2ri)) print(np.min(data2ri)) ####音声ファイル書き込み#### args = sys.argv wav_filename_out = args[2] data2ri.flags.writeable = True write(wav_filename_out,rate,data2ri)
補足情報(FW/ツールのバージョンなど
anaconda3を使用
回答2件
あなたの回答
tips
プレビュー