使用Python 3.7和Tensorflow 2.0,我很难从UrbanSounds数据集中读取wav文件。这个问题和答案是有帮助的,因为它们解释了输入必须是字符串张量,但是要通过文件中编码的初始元数据并获得真实数据似乎很难。我必须先对字符串进行预处理,然后才能将其作为float32张量加载吗?我已经不得不通过将数据从24位wav降采样到16位wav来预处理数据,因此数据输入管道变得比我预期的要麻烦得多。所需的下采样特别令人沮丧。到目前为止,我正在尝试以下操作:
import tensorflow as tf # this is TensorFlow 2.0
path_to_wav_file = '/mnt/d/Code/UrbanSounds/audio/fold1/101415-3-0-2.wav'
# Turn the wav file into a string tensor
input_data = tf.io.read_file(path_to_wav_file)
# Convert the string tensor to a float32 tensor
audio, sampling_rate = tf.audio.decode_wav(input_data)
Run Code Online (Sandbox Code Playgroud)
这是我在最后一步得到的错误:
2019-10-08 20:56:09.124254: W tensorflow/core/framework/op_kernel.cc:1546] OP_REQUIRES failed at decode_wav_op.cc:55 : Invalid argument: Header mismatch: Expected fmt but found junk
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/anaconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/ops/gen_audio_ops.py", line 216, in decode_wav
_six.raise_from(_core._status_to_exception(e.code, message), None)
File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError: Header mismatch: Expected fmt but found junk [Op:DecodeWav]
Run Code Online (Sandbox Code Playgroud)
这是该字符串张量的开始。我不是wav文件的专家,但我认为“ fmt”之后的部分是实际音频数据开始的地方。在此之前,我认为这是关于文件的所有元数据。
data.numpy()[:70]
b'RIFFhb\x05\x00WAVEjunk\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00fmt \x10\x00\x00\x00\x01\x00\x01\x00D\xac\x00\x00\x88X\x01\x00\x02\x00'
Run Code Online (Sandbox Code Playgroud)
您的代码似乎无法用于双通道音频文件。该代码适用于单声道 wav 文件。在您的情况下,您可以尝试使用 scipy。
from scipy.io import wavfile as wav
sampling_rate, data = wav.read('101415-3-0-2.wav')
Run Code Online (Sandbox Code Playgroud)
看来您的错误与TensorFlow有关,而后者将fmt部分作为开始。
TensorFlow的处理代码可以在这里找到:https : //github.com/tensorflow/tensorflow/blob/c9cd1784bf287543d89593ca1432170cdbf694de/tensorflow/core/lib/wav/wav_io.cc#L225
还有一个未解决的问题,正在等待TensorFlow团队的回应,其中大致涵盖了您提供的相同错误。 https://github.com/tensorflow/tensorflow/issues/32382
其他库只是跳过了垃圾部分,因此可以与它们一起使用。
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |