2017-08-27 8 views
2

Audacityを使用して作成されたものと同様のオーディオサンプルのプロットスペクトルを作成しようとしています。 Audacityののwikiページからは、プロットスペクトル(添付の例では)実行します。スペクトラムは、「サイズ」サンプルのブロックでオーディオを取る FFTを行い、そして一緒に平均化し、すべてのブロックテンソルフローの適切な使用STFT関数

プロットを。

enter image description here

私は最近、Tensorflowで提供STFT機能を使用するだろうと考えました。

私はサイズ512のオーディオブロックを使用していて、次のように私のコードは次のとおりです。私は(512の各フレームのFFTの結果を期待するとき

audio_binary = tf.read_file(audio_file) 
waveform = tf.contrib.ffmpeg.decode_audio(
    audio_binary, 
    file_format="wav", 
    samples_per_second=4000, 
    channel_count=1 
) 

stft = tf.contrib.signal.stft(
    waveform, 
    512,  # frame_length 
    512,  # frame_step 
    fft_length=512, 
    window_fn=functools.partial(tf.contrib.signal.hann_window, periodic=True), # matches audacity 
    pad_end=True, 
    name="STFT" 
) 

をしかし、STFTの結果であるが、単に空の配列でありますサンプル)

私がこの電話をかける方法は何ですか?

通常の波形音声データが正しく読み取られていることを確認しました。これは通常のtf.fft機能でのみ読み取られています。

+1

私はそれを理解しました... 'tf.contrib.signal.stft'はそれぞれ独自の信号データを持つ複数の信号を取ります。したがって、フォーム(signals、signal_data)になります。 'tf.contrib.ffmpeg.decode_audio'は、形式(signal_data、1)の単一の信号のデータを返します。 だから私は '波形'を転置する必要があった – TheBottleSeller

答えて

0
audio_file = tf.placeholder(tf.string) 

audio_binary = tf.read_file(audio_file) 
waveform = tf.contrib.ffmpeg.decode_audio(
    audio_binary, 
    file_format="wav", 
    samples_per_second=sample_rate, # Get Info on .wav files (sample rate) 
    channel_count=1    # Get Info on .wav files (audio channels) 
) 

stft = tf.contrib.signal.stft(
    tf.transpose(waveform), 
    frame_length,  # frame_lenght, hmmm 
    frame_step,  # frame_step, more hmms 
    fft_length=fft_length, 
    window_fn=functools.partial(tf.contrib.signal.hann_window, 
      periodic=False), # matches audacity 
    pad_end=False, 
    name="STFT" 
) 
関連する問題