Open wav file python

wave — Чтение и запись WAV файлов¶

Модуль wave предоставляет удобный интерфейс для звукового формата WAV. Он не поддерживает сжатие/распаковку, но поддерживает моно/стерео.

Модуль wave определяет следующую функцию и исключение:

Если file является строкой, открывает файл по имени, иначе обрабатывает его как файлоподобный объект. mode может быть:

‘rb’ Режим только для чтения. ‘wb’ Только режим записи.

Обратите внимание, что он не позволяет читать/записывать WAV файлы.

mode из ‘rb’ возвращает объект Wave_read , а mode из ‘wb’ возвращает объект Wave_write . Если mode пропущен, а файлоподобный объект передаётся как file, file.mode используется как значение по умолчанию для mode.

Если вы передаете файлоподобный объект, wave объект не закроет его при вызове метода close() ; ответственность за закрытие файлового объекта лежит на вызывающем объекте.

Функцию open() можно использовать в операторе with . Когда блок with завершается, вызывается метод Wave_read.close() или Wave_write.close() .

Изменено в версии 3.4: Добавлена поддержка недоступных для поиска файлов.

Синоним для open() , поддерживаемый для обратной совместимости.

Устарело с версии 3.7, будет удалено в 3.9 версии..

Вызывается ошибка, когда нарушается WAV спецификации или недостатка реализации.

Объекты Wave_read¶

У объектов Wave_read, возвращенных open() , есть следующие методы:

Закрывает поток, если он был открыт wave , и делает экземпляр непригодным для использования. Вызывается автоматически при сборе объектов.

Возвращает количество аудиоканалов ( 1 для моно, 2 для стерео).

Возвращает ширину выборки в байтах.

Возвращает частоту дискретизации.

Возвращает количество звуковых фреймов.

Возвращает тип сжатия (единственный поддерживаемый тип — ‘NONE’ ).

Удобочитаемая версия getcomptype() . Обычно ‘not compressed’ параллелен ‘NONE’ .

Возвращает namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname) , эквивалентный выходным данным методов get*() .

Считывает и возвращает не более n фреймов аудио в виде объекта bytes .

Перематывает указатель файла на начало аудиопотока.

Следующие два метода определены для совместимости с модулем aifc и не делают ничего интересного.

Следующие два метода определяют термин «позиция», который совместим между ними и в остальном зависит от реализации.

Устанавливает указатель файла в указанную позицию.

Возвращает текущую позицию указателя файла.

Объекты Wave_write¶

Для доступных для поиска выходных потоков заголовок wave будет автоматически обновлен, чтобы отразить количество фактически записанных фреймов. Для потоков без поиска значение nframes должно быть точным при записи данных первого фрейма. Точное значение nframes может быть получено либо вызовом setnframes() или setparams() с количеством фреймов, которые будут записаны до вызова close() , а затем использованием writeframesraw() для записи данных фрейма, либо вызовом writeframes() со всеми данными фрейма, подлежащими записи. В последнем случае writeframes() рассчитает количество фреймов в данных и соответственно установит nframes перед записью данных фрейма.

У объектов Wave_write, возвращенных open() , есть следующие методы:

Изменено в версии 3.4: Добавлена поддержка недоступных для поиска файлов.

Проверяет, что nframes указан правильно, и закрывает файл, если он был открыт wave . Данный метод вызывается при сборе объектов. Вызовет исключение, если выходной поток не доступен для поиска и nframes не соответствует количеству фактически записанных фреймов.

Wave_write. setnchannels ( n ) ¶

Устанавливает количество каналов.

Wave_write. setsampwidth ( n ) ¶

Устанавливает ширину выборки на n байт.

Wave_write. setframerate ( n ) ¶

Устанавливает частоту фреймов на n.

Изменено в версии 3.2: Нецелые входные данные для метода округляются до ближайшего целого числа.

Устанавливает количество фреймов на n. Будет изменен позже, если количество фактически записанных фреймов отличается (попытка обновления вызовет ошибку, если выходной поток недоступен для поиска).

Wave_write. setcomptype ( type, name ) ¶

Устанавливает тип сжатия и описание. На данный момент поддерживается только тип сжатия NONE , что означает отсутствие сжатия.

Wave_write. setparams ( tuple ) ¶

tuple должен быть (nchannels, sampwidth, framerate, nframes, comptype, compname) со значениями, допустимыми для методов set*() . Устанавливает все параметры.

Возвращает текущую позицию в файле с тем же отказом от ответственности для методов Wave_read.tell() и Wave_read.setpos() .

Wave_write. writeframesraw ( data ) ¶

Записывает аудио фреймы, не исправляя nframes.

Изменено в версии 3.4: Теперь принимается любой байтоподобный объект .

Записывает аудиокадры и проверяет, что nframes правильный. Вызовет ошибку, если выходной поток не доступен для поиска, а общее количество фреймов, которые были записаны после записи data, не соответствует ранее установленному значению для nframes.

Изменено в версии 3.4: Теперь принимается любой байтоподобный объект .

Обратите внимание, что нельзя задавать какие-либо параметры после вызова writeframes() или writeframesraw() , и любая попытка сделать это вызовет wave.Error .

Источник

wave — Read and write WAV files¶

The wave module provides a convenient interface to the Waveform Audio “WAVE” (or “WAV”) file format. Only files using WAVE_FORMAT_PCM are supported. Note that this does not include files using WAVE_FORMAT_EXTENSIBLE even if the subformat is PCM.

The wave module defines the following function and exception:

wave. open ( file , mode = None ) ¶

If file is a string, open the file by that name, otherwise treat it as a file-like object. mode can be:

Note that it does not allow read/write WAV files.

A mode of ‘rb’ returns a Wave_read object, while a mode of ‘wb’ returns a Wave_write object. If mode is omitted and a file-like object is passed as file, file.mode is used as the default value for mode.

If you pass in a file-like object, the wave object will not close it when its close() method is called; it is the caller’s responsibility to close the file object.

The open() function may be used in a with statement. When the with block completes, the Wave_read.close() or Wave_write.close() method is called.

Changed in version 3.4: Added support for unseekable files.

An error raised when something is impossible because it violates the WAV specification or hits an implementation deficiency.

Wave_read Objects¶

Wave_read objects, as returned by open() , have the following methods:

Close the stream if it was opened by wave , and make the instance unusable. This is called automatically on object collection.

Returns number of audio channels ( 1 for mono, 2 for stereo).

Returns sample width in bytes.

Returns sampling frequency.

Returns number of audio frames.

Returns compression type ( ‘NONE’ is the only supported type).

Human-readable version of getcomptype() . Usually ‘not compressed’ parallels ‘NONE’ .

Returns a namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname) , equivalent to output of the get*() methods.

Reads and returns at most n frames of audio, as a bytes object.

Rewind the file pointer to the beginning of the audio stream.

The following two methods are defined for compatibility with the aifc module, and don’t do anything interesting.

The following two methods define a term “position” which is compatible between them, and is otherwise implementation dependent.

Set the file pointer to the specified position.

Return current file pointer position.

Wave_write Objects¶

Wave_write objects, as returned by open() .

For seekable output streams, the wave header will automatically be updated to reflect the number of frames actually written. For unseekable streams, the nframes value must be accurate when the first frame data is written. An accurate nframes value can be achieved either by calling setnframes() or setparams() with the number of frames that will be written before close() is called and then using writeframesraw() to write the frame data, or by calling writeframes() with all of the frame data to be written. In the latter case writeframes() will calculate the number of frames in the data and set nframes accordingly before writing the frame data.

Changed in version 3.4: Added support for unseekable files.

Wave_write objects have the following methods:

Make sure nframes is correct, and close the file if it was opened by wave . This method is called upon object collection. It will raise an exception if the output stream is not seekable and nframes does not match the number of frames actually written.

Set the number of channels.

Set the sample width to n bytes.

Changed in version 3.2: A non-integral input to this method is rounded to the nearest integer.

Set the number of frames to n. This will be changed later if the number of frames actually written is different (this update attempt will raise an error if the output stream is not seekable).

Set the compression type and description. At the moment, only compression type NONE is supported, meaning no compression.

The tuple should be (nchannels, sampwidth, framerate, nframes, comptype, compname) , with values valid for the set*() methods. Sets all parameters.

Return current position in the file, with the same disclaimer for the Wave_read.tell() and Wave_read.setpos() methods.

Write audio frames, without correcting nframes.

Changed in version 3.4: Any bytes-like object is now accepted.

Write audio frames and make sure nframes is correct. It will raise an error if the output stream is not seekable and the total number of frames that have been written after data has been written does not match the previously set value for nframes.

Changed in version 3.4: Any bytes-like object is now accepted.

Note that it is invalid to set any parameters after calling writeframes() or writeframesraw() , and any attempt to do so will raise wave.Error .

Источник

scipy.io.wavfile.read#

Return the sample rate (in samples/sec) and data from an LPCM WAV file.

Parameters : filename string or open file handle

mmap bool, optional

Whether to read data as memory-mapped (default: False). Not compatible with some bit depths; see Notes. Only to be used on real files.

data numpy array

Data read from WAV file. Data-type is determined from the file; see Notes. Data is 1-D for 1-channel WAV, or 2-D of shape (Nsamples, Nchannels) otherwise. If a file-like input without a C-like file descriptor (e.g., io.BytesIO ) is passed, this will not be writeable.

WAV files can specify arbitrary bit depth, and this function supports reading any integer PCM depth from 1 to 64 bits. Data is returned in the smallest compatible numpy int type, in left-justified format. 8-bit and lower is unsigned, while 9-bit and higher is signed.

For example, 24-bit data will be stored as int32, with the MSB of the 24-bit data stored at the MSB of the int32, and typically the least significant byte is 0x00. (However, if a file actually contains data past its specified bit depth, those bits will be read and output, too. [2])

This bit justification and sign matches WAV’s native internal format, which allows memory mapping of WAV files that use 1, 2, 4, or 8 bytes per sample (so 24-bit files cannot be memory-mapped, but 32-bit can).

IEEE float PCM in 32- or 64-bit format is supported, with or without mmap. Values exceeding [-1, +1] are not clipped.

Non-linear PCM (mu-law, A-law) is not supported.

IBM Corporation and Microsoft Corporation, “Multimedia Programming Interface and Data Specifications 1.0”, section “Data Format of the Samples”, August 1991 http://www.tactilemedia.com/info/MCI_Control_Info.html

Adobe Systems Incorporated, “Adobe Audition 3 User Guide”, section “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 

Get the filename for an example .wav file from the tests/data directory.

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

Load the .wav file contents.

>>> 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() 

Источник

Читайте также:  Php file opening as text
Оцените статью