Audio 正确使用tensorflows STFT函数

Audio 正确使用tensorflows STFT函数,audio,tensorflow,Audio,Tensorflow,我试图构建一个音频样本的绘图频谱,类似于使用Audacity创建的音频样本。从Audacity的wiki页面,plot spectrum(附例)执行以下操作: 绘图频谱以“大小”样本块的形式采集音频,是否 FFT,并将所有块平均在一起 我想我会使用Tensorflow最近提供的STFT功能 我使用的是512大小的音频块,代码如下: audio_binary = tf.read_file(audio_file) waveform = tf.contrib.ffmpeg.decode_audio(

我试图构建一个音频样本的绘图频谱,类似于使用Audacity创建的音频样本。从Audacity的wiki页面,plot spectrum(附例)执行以下操作:

绘图频谱以“大小”样本块的形式采集音频,是否 FFT,并将所有块平均在一起

我想我会使用Tensorflow最近提供的STFT功能

我使用的是512大小的音频块,代码如下:

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"
)
但是,当我期望每个帧(512个样本)的FFT结果时,stft的结果只是一个空数组

我打电话的方式有什么问题


我已经验证了波形音频数据仅使用常规的
tf.fft
函数就可以正确读取。

我发现了
tf.contrib.signal.stft
接收多个信号,每个信号都有自己的信号数据。所以它的形式是(信号,信号数据)
tf.contrib.ffmpeg.decode_audio
返回该格式的单个信号的数据(信号数据,1)。所以我需要转换
波形
注意:该函数在2018-09-04年被弃用
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"
)