当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy wavfile.read用法及代码示例


本文简要介绍 python 语言中 scipy.io.wavfile.read 的用法。

用法:

scipy.io.wavfile.read(filename, mmap=False)#

打开一个 WAV 文件。

从 LPCM WAV 文件返回采样率(以样本/秒为单位)和数据。

参数

filename 字符串或打开文件句柄

输入 WAV 文件。

mmap 布尔型,可选

是否读取数据为memory-mapped(默认:False)。与某些位深度不兼容;见注释。仅用于真实文件。

返回

rate int

WAV 文件的采样率。

data numpy 数组

从 WAV 文件中读取的数据。数据类型由文件确定;见注释。对于 1 通道 WAV,数据是 1-D,否则是 2-D 形状(Nsamples,Nchannels)。如果传递了没有 C-like 文件说明符(例如 io.BytesIO )的 file-like 输入,则这将不可写。

注意

常见数据类型:[1]

WAV 格式

最大限度

NumPy 数据类型

32 位浮点

-1.0

+1.0

float32

32 位整数 PCM

-2147483648

+2147483647

int32

24 位整数 PCM

-2147483648

+2147483392

int32

16 位整数 PCM

-32768

+32767

int16

8 位整数 PCM

0

255

uint8

WAV 文件可以指定任意位深度,该函数支持读取从 1 到 64 位的任意整数 PCM 深度。数据以最小的兼容 numpy int 类型返回,格式为左对齐。 8 位及以下是无符号的,而 9 位及以上是有符号的。

例如,24 位数据将存储为 int32,24 位数据的 MSB 存储在 int32 的 MSB 处,通常最低有效字节为 0x00。 (但是,如果文件实际上包含超过其指定位深度的数据,则这些位也将被读取和输出。[2])

此位对齐和符号匹配 WAV 的本机内部格式,它允许每个样本使用 1、2、4 或 8 个字节的 WAV 文件的内存映射(因此 24 位文件不能是memory-mapped,但 32 位可以)。

支持 32 位或 64 位格式的 IEEE 浮点 PCM,带或不带 mmap。超过 [-1, +1] 的值不会被剪裁。

不支持非线性 PCM(mu-law、A-law)。

参考

[1]

IBM Corporation 和 Microsoft Corporation,“多媒体编程接口和数据规范 1.0”,“样本的数据格式”部分,1991 年 8 月http://www.tactilemedia.com/info/MCI_Control_Info.html

[2]

Adobe Systems Incorporated,“Adobe Audition 3 用户指南”,“音频文件格式:24 位压缩 Int(类型 1,20 位)”部分,2007

例子

>>> from os.path import dirname, join as pjoin
>>> from scipy.io import wavfile
>>> import scipy.io

从测试/数据目录中获取示例 .wav 文件的文件名。

>>> data_dir = pjoin(dirname(scipy.io.__file__), 'tests', 'data')
>>> wav_fname = pjoin(data_dir, 'test-44100Hz-2ch-32bit-float-be.wav')

加载 .wav 文件内容。

>>> samplerate, data = wavfile.read(wav_fname)
>>> print(f"number of channels = {data.shape[1]}")
number of channels = 2
>>> length = data.shape[0] / samplerate
>>> print(f"length = {length}s")
length = 0.01s

绘制波形。

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> time = np.linspace(0., length, data.shape[0])
>>> plt.plot(time, data[:, 0], label="Left channel")
>>> plt.plot(time, data[:, 1], label="Right channel")
>>> plt.legend()
>>> plt.xlabel("Time [s]")
>>> plt.ylabel("Amplitude")
>>> plt.show()
scipy-io-wavfile-read-1.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.io.wavfile.read。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。