Я хочу знать, как вытащить образцы из .wav файла для выполнения оконного соединения двух .wav файлов.
Кто-либо может сказать, как сделать это?
Модуль wave стандартной библиотеки - это ключ: после, конечно, import wave
в верхней части вашего кода, wave.open ('the.wav', 'r')
возвращает объект "wave read", из которого вы может читать кадры с помощью метода .readframes
, который возвращает строку байтов, которые являются выборками ... в любом формате, в котором они есть в волновом файле (вы можете определить два параметра, относящиеся к разложению кадров на выборки, с помощью метод .getnchannels
для количества каналов и .getsampwidth
для количества байтов на выборку).
Лучший способ превратить строку байтов в последовательность числовых значений - использовать модуль array
и тип (соответственно) 'B'
, 'H'
, 'L'
для 1, 2, 4 байтов на образец (в 32-битной сборке Python; вы можете использовать значение itemsize
вашего массива возразите, чтобы перепроверить это). Если у вас другая ширина выборки, чем массив , который может предоставить вам
, вам необходимо разрезать байтовую строку (соответствующим образом заполнить каждый маленький фрагмент байтами, равными 0) и использовать модуль struct . вместо этого (но это неуклюже и медленнее, поэтому используйте вместо него array
, если можете).
Вы можете использовать wave
модуль. Сначала необходимо прочитать метаданные, такие как размер выборки или количество каналов. Используя метод readframes()
, вы можете читать выборки, но только как байтовую строку. Исходя из формата выборки, вы должны преобразовать их в образцы с помощью struct.unpack()
.
В качестве альтернативы, если вам нужны сэмплы в виде массива чисел с плавающей точкой, вы можете использовать модуль io.wavfile
SciPy.