читать#
- scipy.io.wavfile.читать(filename, mmap=False)[источник]#
Открыть WAV файл.
Возвращает частоту дискретизации (в выборках/сек) и данные из LPCM WAV-файла.
- Параметры:
- filenameстрока или открытый файловый дескриптор
Входной WAV файл.
- mmapbool, необязательно
Считывать ли данные как отображенные в память (по умолчанию: False). Несовместимо с некоторыми глубинами бит; см. Примечания. Использовать только для реальных файлов.
Добавлено в версии 0.12.0.
- Возвращает:
- скоростьint
Частота дискретизации WAV-файла.
- данныеnumpy array
Данные, считанные из WAV-файла. Тип данных определяется из файла; см. Примечания. Данные одномерные для одноканального WAV или двумерные формы (Nsamples, Nchannels) в противном случае. Если ввод похож на файл без дескриптора файла в стиле C (например,
io.BytesIO) передано, это не будет доступно для записи.
Примечания
Общие типы данных: [1]
Формат WAV
Min
Макс
Тип данных 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-файлы могут указывать произвольную глубину бит, и эта функция поддерживает чтение любой целочисленной глубины PCM от 1 до 64 бит. Данные возвращаются в наименьшем совместимом целочисленном типе numpy, в формате с выравниванием по левому краю. 8 бит и ниже беззнаковые, а 9 бит и выше знаковые.
Например, 24-битные данные будут храниться как int32, при этом старший значащий бит 24-битных данных хранится в старшем значащем бите int32, и обычно младший значащий байт равен 0x00. (Однако, если файл действительно содержит данные за пределами указанной битовой глубины, эти биты также будут прочитаны и выведены. [2])
Это выравнивание битов и знак соответствуют собственному внутреннему формату WAV, что позволяет отображать WAV-файлы в память, использующие 1, 2, 4 или 8 байт на сэмпл (поэтому 24-битные файлы не могут быть отображены в память, но 32-битные могут).
Поддерживается IEEE float PCM в 32- или 64-битном формате, с mmap или без. Значения, выходящие за пределы [-1, +1], не обрезаются.
Не поддерживается нелинейный PCM (мю-закон, A-закон).
Ссылки
[1]IBM Corporation и Microsoft Corporation, «Multimedia Programming Interface and Data Specifications 1.0», раздел «Data Format of the Samples», август 1991 http://www.tactilemedia.com/info/MCI_Control_Info.html
[2]Adobe Systems Incorporated, “Adobe Audition 3 User Guide”, раздел “Audio file formats: 24-bit Packed Int (type 1, 20-bit)”, 2007
Примеры
>>> from os.path import dirname, join as pjoin >>> from scipy.io import wavfile >>> import scipy.io
Получить имя файла для примера .wav файла из директории tests/data.
>>> 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()