首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用`tf.audio.decode_wav`读取` `wav`‘文件

用`tf.audio.decode_wav`读取` `wav`‘文件
EN

Stack Overflow用户
提问于 2020-11-12 23:08:22
回答 3查看 2.6K关注 0票数 1

我遵循音频的tensorflow音频识别教程。这个笔记本工作得很好。

作为下一步,我想录制我自己的声音,然后通过在tensorflow培训的模型进行测试。我首先生成了一段录音:

代码语言:javascript
复制
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加载文件时:

代码语言:javascript
复制
audio_binary = tf.io.read_file(filename)
audio, _ = tf.audio.decode_wav(audio_binary)

我得到以下错误:

InvalidArgumentError: WAV的坏音频格式:预期1 (PCM),但got3操作:DecodeWav

任何关于可能出错的指示都会受到极大的赞赏。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-25 14:33:23

(我会把这写成评论,但我还没有足够的声誉)

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

tf.audio.decode_wav()文档中声明:“将16位PCM文件解码为浮动张量”。因此,使用任何其他编码(在您的示例中为24位编码)传递WAV文件将导致与您所收到的错误相同的错误。

票数 5
EN

Stack Overflow用户

发布于 2020-11-13 21:33:35

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

我不清楚为什么,但我认为这是目前解决的。

票数 0
EN

Stack Overflow用户

发布于 2022-02-02 10:44:58

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

代码语言:javascript
复制
import numpy as np
from scipy.wavfile import write

# your other code here
write(filename, sr, myrecording.astype(np.int16))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64813162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档