我是一个新手在Tensorflow,我最近开始学习它。我在一个音频数据上练习Tensorflow,遇到了这个错误。我试着在colab笔记本上播放音频。有人能帮我渡过难关吗?
pip install tensorflow-io
import tensorflow as tf
import tensorflow_io as tfio
audio = tfio.audio.AudioIOTensor('/content/dataset/TrainAudioFiles/0.mp3')
print(audio)
audio_slice = audio[100:]
audio_tensor = tf.squeeze(audio_slice, axis=[])
print(audio_tensor)
from IPython.display import Audio
Audio(audio_tensor.numpy(), rate=audio.rate.numpy())
我在最后一个单元格中得到这个错误:
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-9-051c3ef0a0d0> in <module>()
1 from IPython.display import Audio
2
----> 3 Audio(audio_tensor.numpy(), rate=audio.rate.numpy())
/usr/lib/python3.7/wave.py in _write_header(self, initlength)
483 self._nchannels * self._framerate * self._sampwidth,
484 self._nchannels * self._sampwidth,
--> 485 self._sampwidth * 8, b'data'))
486 if self._form_length_pos is not None:
487 self._data_length_pos = self._file.tell()
error: ushort format requires 0 <= number <= (0x7fff * 2 + 1)
问题可能是因为您的音频数据有多个通道。在本例中,Audio类需要一个形状的输入(通道数,采样数)。但也许你的数据有形状(样本数,通道数)。一个更好的解释可以在这里找到:https://ipython.readthedocs.io/en/stable/api/generated/IPython.display.html?highlight=display
为了解决这个问题,我们可以对numpy数组进行转置,如下所示:Audio(audio_tensor.numpy().T, rate=audio.rate.numpy())