我想用Python导入音乐,我正在使用soundfile
。我注意到导入ogg或wav文件会产生不同的结果,如下所示(wav文件是使用ffmpeg转换ogg文件)。使用下面的代码,我观察到ogg和wav文件之间的细微差别,这种差异是否正常?
编辑:我使用以下命令转换我的ffmpeg -i filename.mp3 newfilename.wav
X, sample_rate= sf.read(wav_file)
print(wav_file)
print(X[0:20,])
它输出:
test_inputs/Shikantaza.wav
[[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ -3.05175781e-05 -3.05175781e-05]
[ -3.05175781e-05 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]]
test_inputs/Shikantaza.ogg
[[ 1.17459308e-06 3.78499834e-07]
[ 5.19584228e-06 2.25495864e-06]
[ 1.13173719e-05 6.28675980e-06]
[ 1.07316619e-05 4.50928837e-06]
[ 2.70867986e-06 -3.40946622e-06]
[ 5.37277947e-06 5.06399772e-07]
[ 3.64179391e-06 6.27796169e-07]
[ -5.09244865e-06 -6.14764804e-06]
[ -4.38827237e-06 -3.74127058e-06]
[ -5.41250847e-06 -3.70974522e-06]
[ -2.75347884e-06 -7.08531957e-07]
[ -9.67129495e-07 6.15705801e-07]
[ -4.91217952e-06 -3.82820826e-06]
[ 4.38740926e-06 6.00675048e-06]
[ -3.00040119e-06 -4.78463562e-08]
[ -2.18559871e-05 -1.67418439e-05]
[ -1.57035538e-05 -8.82137283e-06]
[ -1.28820702e-05 -5.31934711e-06]
[ -9.44996100e-06 -8.10974825e-07]
[ -5.33486082e-06 3.71237797e-06]]
答案 0 :(得分:2)
对于第一个文件,您要在WAV中解码为16位线性PCM,然后将其转换为浮点数。对于第二个文件,您将直接解码为浮点数。 16位线性PCM的精度低于浮点数,因此会丢失信息,尽管与有损压缩损失相比,损耗通常可以忽略不计,因此可以忽略不计。
尽管WAV最常用于16位线性PCM,但也可以将浮点PCM存储在wav文件中(尽管文件大约是两倍大)。在wav中写浮点数:
ffmpeg -i in.ogg -c:a pcm_f32le out.wav
对于有损格式的解码器也可能存在差异,这会产生稍微不同的结果。此外,如果其中一个解码器不是无间隙的,它可能只产生整个帧,因此可能在开始和/或结束时有一些额外的样本。