如何在TensorFlow图中读取Ogg或MP3音频文件?

时间:2016-12-12 21:11:34

标签: tensorflow audio ffmpeg

我在TensorFlow中看过像tf.image.decode_png这样的图像解码器,但是如何读取音频文件(WAV,Ogg,MP3等)?没有TFRecord可以吗?

E.g。类似于this

filename_queue = tf.train.string_input_producer(['my-audio.ogg'])
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
my_audio = tf.audio.decode_ogg(value)

3 个答案:

答案 0 :(得分:5)

是的,包tensorflow.contrib.ffmpeg中有特殊的解码器。要使用它,您需要先安装ffmpeg

示例:

audio_binary = tf.read_file('song.mp3')
waveform = tf.contrib.ffmpeg.decode_audio(audio_binary, file_format='mp3', samples_per_second=44100, channel_count=2)

答案 1 :(得分:1)

很遗憾,TensorFlow 2.x不支持@sygi的答案。一种替代解决方案是使用某些外部库(例如pydublibrosa)来实现mp3解码步骤,并通过使用tf.py_function将其集成到管道中。因此,您可以按照以下方式进行操作:

from pydub import AudioSegment
import tensorflow as tf

dataset = tf.data.Dataset.list_files('path/to/mp3s/*')

def decode_mp3(mp3_path):
    mp3_path = mp3_path.numpy().decode("utf-8")
    mp3_audio = AudioSegment.from_file(mp3_path, format="mp3")
    return mp3_audio.get_array_of_samples()

dataset = dataset.map(lambda path:
    tf.py_function(func=decode_mp3, inp=[path], Tout=tf.float32))

for features in dataset.take(3):
    data = features.numpy()
    plt.plot(data)
    plt.show()

enter image description here

答案 2 :(得分:1)

最近已将此功能添加到tensorflow_iohere)中。 您可以像这样使用它:

$get_time1ax = "select * from support_tickets WHERE start_date >= '2020-03-19' AND end_date <= '2020-04-19' ORDER BY problem_title ASC";