几种声音读取的库及读到的格式

概要

分别用librosa、pydub、scipy.io、soundfile中的函数读取声音文件。看一看它们的输出样式都是什么样的。

首先准备一个双通道的wav格式的声音文件,如名字为music.wav

path = 'music.wav'

应用librosa.load读取声音文件

import numpy as np
import librosa

y, sr = librosa.load(path, sr=None, mono=False)  # sr=None声音保持原采样频率, 
                                                 # mono=False声音保持原通道数
print('librosa.load 声音数据的维度,数据类型,最大值,中间值,最小值为:', y.shape, y.dtype, np.max(y), np.median(y), np.min(y))

使用AudioSegment.from_file读取声音文件

import numpy as np
from pydub import AudioSegment

audioseg = AudioSegment.from_file(path)
y = np.asarray(audioseg.get_array_of_samples())  # 将声音文件转换为数组格式
y = y if audioseg.channels == 1 else y.reshape(-1, 2)    # 若是双通道,则转换为(n,2)格式的数组
print('AudioSegment.from_file 声音数据的维度,数据类型,最大值,中间值,最小值为:', y.shape, y.dtype, np.max(y), np.median(y), np.min(y))

使用wavfile.read读取声音文件

import numpy as np
from scipy.io import wavfile

sr, y = wavfile.read(path)
print('wavfile.read 声音数据的维度,数据类型,最大值,中间值,最小值为:', y.shape, y.dtype, np.max(y), np.median(y), np.min(y))

使用sf.read读取声音文件

import numpy as np
import soundfile as sf

y, sr = sf.read(path)
print('sf.read 声音数据的维度,数据类型,最大值,中间值,最小值为:', y.shape, y.dtype, np.max(y), np.median(y), np.min(y))

上面得到的结果为:

librosa.load 声音数据的维度,数据类型,最大值,中间值,最小值为: (2, 2646000) float32 0.84085083 -3.0517578e-05 -0.7388916
AudioSegment.from_file声音数据的维度,数据类型,最大值,中间值,最小值为: (2646000, 2) int32 1805713408 -65536.0 -1586757632
wavfile.read声音数据的维度,数据类型,最大值,中间值,最小值为: (2646000, 2) float32 0.84085083 -3.0517578e-05 -0.7388916
sf.read 声音数据的维度,数据类型,最大值,中间值,最小值为: (2646000, 2) float64 0.840850830078125 -3.0517578125e-05 -0.7388916015625

结论:

经过上面的步骤,可以很清楚的了解读取到的声音文件的数据格式,对后期的数据处理有很大的帮助,不至于由于对得到的数据结构不了解而产生处理错误。

号外:

要将手上的mp3格式文件转换为wav格式的,用AudioSegment和librosa都可以完成。现在说用AudioSegment进行格式转换。

from pydub import AudioSegment

audioseg = AudioSegment.from_file('music.mp3')
audioseg.export('music.wav', format='wav')

将要转换的mp3文件改名为music.mp3,放到与这个代码相同的目录,即可以得到想要的wav文件。

 

你可能感兴趣的:(声音声波)