Scipy читает wav файл, записывает белый шум

Я полный нубер, когда дело доходит до Python и Scipy, так что терпите меня.

У меня есть фрагмент кода, который читается в wav-файле (двухсекундный гитарный аккорд, записанный на proTools и экспортированный в виде звукового файла 44100 Гц с именем Dmaj7.wav), а затем просто создает его копию с именем checkDmaj7.wav только для целей проверки.

В идеале они должны звучать одинаково. Однако файл копии звучит как чистый белый шум без намека на исходный звук. Вот код:

    from numpy import *
    import scipy
    import scipy.io.wavfile as wave
    soundspath = 'C:/Nicks_Projects/DSP/Sounds/'
    def makewav(data, outfile, samplerate): 
            scaled = array(data, dtype = int16) #to coerce the data to int16 datatype
            wave.write(outfile, samplerate, scaled)
    def getwavdata(wavfile):   
            return wave.read(wavfile)[1]
    audio = getwavdata(soundspath + 'Dmaj7.wav')
    makewav(audio, soundspath + 'checkDmaj7.wav', 44100)

Код не выдает никаких ошибок. Как я могу это решить?


person Nick    schedule 29.04.2013    source источник
comment
Почему вы сами скормили частоту дискретизации? Это возвращает первый объект прочитанного кортежа. Я не говорю, что это проблема, но я думаю, что лучше передать то, что возвращают предопределенные функции.   -  person Sukrit Kalra    schedule 29.04.2013
comment
Если вы не масштабируете тип данных, тогда это работает?   -  person Lennart Regebro    schedule 29.04.2013
comment
Это и это может помочь. Я предполагаю, что ваша проблема связана с dtype, проверьте, что такое audio.dtype, и убедитесь, что вы сопоставляете его в своем выводе.   -  person Jaime    schedule 29.04.2013
comment
Сукрит: правда. Я попробую использовать первый объект для установки частоты дискретизации модуля записи, но я уже знаю, что это 44100, потому что я проверил этот первый объект. Сомневаюсь, что проблема в этом.   -  person Nick    schedule 30.04.2013
comment
Леннарт: Я пробовал без масштабирования типа данных. На самом деле, я начал без него, увидел проблему и подумал, что добавлю это, просто чтобы посмотреть, решит ли это ее.   -  person Nick    schedule 30.04.2013
comment
Джейми: Я тоже так думал, и когда я проверил audio.dtype, он вернул int32. Итак, я сделал это:   -  person Nick    schedule 30.04.2013
comment
Джейми: Итак, audio.dtype — это int32. Мой вывод: «checkDmaj.wav». Для его создания я использую функцию scipy.io.wavfile.write, но эта функция не имеет параметра dtype. Как мне сопоставить мой вывод, чтобы включить это.   -  person Nick    schedule 30.04.2013