2016-03-23 5 views
0

У меня возник вопрос о написании WAV-файла. Вот некоторые данные:Написание WAV-файлов и создание копии для wav-файла

записывает файл WAV по имени файла с двумя каналами, два байта ширины образца, частоты кадров, как определяется framerate, с len(sound) образцов, тип сжатия «NONE», и сжатие имя " not compressed '

Вот мой код:

import wave 
import struct 

def loadstereowav(filename): 
    w = wave.open(filename, 'r') 
    nchannels, sampwidth, framerate, nframes, comptype, compname = w.getparams() 
    assert nchannels == 2 and sampwidth == 2 and comptype == 'NONE' 
    frames = w.readframes(nframes * nchannels) 
    sound = struct.unpack_from((str(nframes)+'h') * nchannels, frames) 
    w.close() 
    return framerate, sound 


def savestereowav(filename, framerate, sound): 
    w1 = wave.open(filename, "w") 
    for i in range(0, len(sound)): 
     w1.write(struct.pack('>h', framerate)) 

Вот некоторые тест:

>>> rate, sound = loadstereowav('love.wav') 
>>> savestereowav('love_copy.wav', rate, sound) 

Мне нужно написать функцию savestereowav(filename, framerate, sound), чтобы загрузить и сохранить файл, необходимо создать копию.

Например, загрузите «love.wav» и сделать копию с «love_copy.wav»

Но я не представление о том, как иметь дело с файлом WAV.

Помогите мне с этим вопросом?

ответ

0

Если вам нужно скопировать файл без изменений (то же nchannels, так же sampwidth, и т.д.), вы можете скопировать файл без анализа/понять его содержание: shutils.copyfile() должен сделать трюк

С другой стороны, (. ех скорость изменения выборки, количество каналов и т.д.), если вам нужно преобразовать данные, вам понадобятся две вещи:

  1. понять формат файла wav. Найдите «формат файла wav» в сети (ex https://en.wikipedia.org/wiki/WAV). Модуль wave предоставляет только метод readframes(), но вам придется вручную управлять данными.

  2. В зависимости от того, какое преобразование вы хотите, вам понадобится какой-то метод обработки сигналов (например, https://en.wikipedia.org/wiki/Sampling_%28signal_processing%29). Это может быть широкий вопрос.

Поскольку вы включили параметр framerate в функции savestereowav, я предположил, что вы хотите ресэмплировать. Но в вашем тестовом примере вы используете тот же rate.

 Смежные вопросы

  • Нет связанных вопросов^_^