问题
之前都在使用librosa加载音频数据,今天看到一段代码是用torchaudio加载的音频,发现torchaudio加载的数据和librosa返回的结果不一致。
查看资料后做出以下对比:
torchaudio.load 函数返回一个包含两个张量的元组:
- 音频数据张量,形状为 (channels, samples)
- 采样率
而 librosa.load 函数返回:
- 音频数据numpy数组,形状为 (samples,)
- 采样率
主要的区别有:
- torchaudio 返回的是多通道数据,而 librosa 返回的是单通道数据。如果原始音频是多通道的,librosa 会自动将其转换为单通道。
- torchaudio 返回的音频数据是一个张量,而 librosa 返回的是numpy数组。
python
import librosa
import torch
import torchaudio
audio_path = "../data/audio/4324107e-56bc-5ef4-b78b-d524d192b3fc/4324107e-56bc-5ef4-b78b-d524d192b3fc.mp3"
audio, sr = librosa.load(audio_path, sr=16000)
audio1, sr1 = torchaudio.load(audio_path, format='mp3')
print(audio.shape)
print(audio1.shape)
# 处理后数据一致
transform = torchaudio.transforms.Resample(sr1, 16000)
audio1 = transform(torch.mean(audio1, dim=0, keepdim=True))
print(audio.shape)
print(audio1.shape)
(11448320,) 16000
torch.Size([2, 34344959]) 48000
(11448320,)
torch.Size([1, 11448320])