Python读取WAV文件的几种方式整理

1)scipy

from scipy.io import wavfile
import numpy as np

sample_rate, sig = wavfile.read('new.wav')
print("采样率: %d" % sample_rate)
print(sig)

if sig.dtype == np.int16:
    print("PCM16位整形")
if sig.dtype == np.float32:
    print("PCM32位浮点")

输出如下:

采样率: 16000
[-1466  -733  -733 ...  2199  1832  1466]
PCM16位整形

2)pysoundfile

import soundfile as sf

sig, sample_rate = sf.read('new.wav')

print("采样率:%d" % sample_rate)
print(sig)

输出如下:

采样率:16000
[-0.04473877 -0.02236938 -0.02236938 ...  0.06710815  0.0559082
  0.04473877]

3)wave

不推荐此库

------------------------------------------------分割线-----------------------------------------------
WAV格可以用16位整形或者32位浮点编码
scipy可以通过输出数据的 dtype 格式来判断
pysoundfile 全部自动转换成float32来输出

Q&A

针对评论区的一些问题

Q1P:发现第一二种方法读取的数据比例相同,但是绝对值不同。(第一种是不准确的,数值等比例缩放了)

A1:第一种方法读取出来的是原始音频信息。wav音频绝大部分以16位整形数据存在文件中。读取出来的就是short型,short为int16类型。

你可能感兴趣的:(python3)