【问题标题】:audio to array with torchaudio and librosa are different in python使用torchaudio和librosa排列的音频在python中是不同的
【发布时间】:2022-07-20 00:54:20
【问题描述】:

我用torchaudiolibrosa在python中加载了mp3文件

import torchaudio
import librosa

filename='example.mp3'
array_tor, sample_rate_tor = torchaudio.load(filename,format='mp3')
array_lib, sample_rate_lib = librosa.load(filename, sr=sample_rate_tor)
print( len(array_tor.numpy()[0]) , len(array_lib)) # get different value

两个数组的长度不一样,为什么不一样,怎么弄一样?

如果我将 example.mp3 转换为 wav 文件

from pydub import AudioSegment
audSeg = AudioSegment.from_mp3('example.mp3')
audSeg.export('example.wav', format="wav")

并使用torchaudiolibrosasoundfile加载wav文件

import torchaudio
import librosa
import soundfile as sf
filename='example.wav'
array_tor_w, sample_rate_tor_w = torchaudio.load(filename,format='wav')
array_lib_w, sample_rate_lib_w = librosa.load(filename, sr=sample_rate_tor_w)
array_sfl_w, sample_rate_sfl_w = sf.read(filename)
print( len(array_tor_w.numpy()[0]) , len(array_lib_w), len(array_sfl_w)) # get same value

这三个数组的长度和内容与mp3文件中的len(array_lib)相同。

torchaudio.load() 似乎在 mp3 文件中很特殊。

【问题讨论】:

  • .wav 是一种全保真(即无损)声音文件格式;我希望加载的 .wav 文件在每个播放器中都得到完全相同的处理。而.mp3 是一种压缩的有损格式,在不同播放器之间的解释可能不同。每个播放器都可以有自己的 .mp3 内部表示。由于使用了压缩设置,您甚至可以为同一首歌曲使用不同大小的 .mp3。

标签: python mp3 librosa soundfile torchaudio


【解决方案1】:

这是由于 torchaudio 使用了底层解码器库。

升级util v0.11,torchaudio使用libmad,在解码MP3时不会去掉多余的padding。

详情请见https://github.com/pytorch/audio/issues/1500

在 v0.12 中,torchaudio 将 MP3 解码器切换为 FFmpeg,应该解决填充问题。

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多