【问题标题】:read `wav` file with `tf.audio.decode_wav`使用 `tf.audio.decode_wav` 读取 `wav` 文件
【发布时间】:2022-02-02 18:44:58
【问题描述】:

我正在关注 simple_audio 上的音频识别 tensorflow 教程。笔记本很好用。

下一步,我想录制自己的声音,然后通过 tensorflow 训练的模型运行它。 我首先生成了一段录音:

seconds=1
sr=16000
nchannels=1
myrecording = sd.rec(int(seconds * sr), samplerate=sr, channels=nchannels)
sd.wait()
wavfile.write(filename, sr, myrecording)

到目前为止一切顺利,我可以播放我的录音了。但是当我尝试使用tf.audio.decode_wav 加载文件时,类似于:

audio_binary = tf.io.read_file(filename)
audio, _ = tf.audio.decode_wav(audio_binary)

我收到以下错误:

InvalidArgumentError:WAV 的音频格式错误:预期为 1 (PCM),但得到了 3 [Op:DecodeWav]

非常感谢任何关于可能出错的指针。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    (本来会写这个作为评论,但我还没有足够的声誉)

    WAV 文件的默认编码称为“16 位 PCM”,这意味着录制的声音在写入 WAV 文件之前使用 16 位 int 数据表示。

    tf.audio.decode_wav()documentation 中声明:“将 16 位 PCM WAV 文件解码为浮点张量”。因此,使用任何其他编码(在您的情况下为 24 位编码)传递 WAV 文件将导致与您收到的错误类似。

    【讨论】:

      【解决方案2】:

      终于解决了。它与位表示有关。我在24-bit 中创建了一个文件,而出于某种原因tf.audio.decode_wav 只需要 16 位文件。

      我不清楚为什么,但现在将其标记为已解决。

      【讨论】:

      • 你能告诉我你是怎么解决的吗?
      【解决方案3】:

      您正在使用的scipy.wavfile.write 函数不会自动将wav 文件保存为16 位格式。因此,从reference 的示例中,您应该这样做:

      import numpy as np
      from scipy.wavfile import write
      
      # your other code here
      write(filename, sr, myrecording.astype(np.int16))
      

      【讨论】:

        猜你喜欢
        • 2011-07-09
        • 2019-06-15
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 2013-11-29
        • 2011-01-04
        相关资源
        最近更新 更多