Изменение звуковых волн на месте: частота и амплитуда - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь внести некоторые изменения в звуковую частоту и амплитуду на месте. В настоящее время я получаю звуковые данные, но всякий раз, когда я пытаюсь умножить их на значение, например, чтобы изменить амплитуду, я получаю много шума. Мне было интересно, как это сделать чистым способом. Мне нужно перебрать данные, потому что изменения частоты и амплитуды зависят от пользовательского ввода (позже я внесу изменения в соответствии с положением руки с помощью веб-камеры). С этим текущим кодом мой входной файл имел один канал. Я не уверен почему, но в «getNewWave», если я изменю его на np.int16, звук тоже будет шумным. Спасибо !!

import pyaudio
import wave
import sys
import numpy as np

def getNewWave(data):

    newdata = np.frombuffer(data, np.int8)
    #make some changes to amplitude and frequency
    return newdata

def main():

    CHUNK = 1024

    if len(sys.argv) < 2:
        print("Missing input wav file. File must have single channel")
        sys.exit(-1)

    wf = wave.open(sys.argv[1], 'rb')
    p = pyaudio.PyAudio()

    stream = p.open(format=pyaudio.paInt16,
                    channels=1,
                    rate=wf.getframerate(),
                    output=True, frames_per_buffer=CHUNK)

    data = wf.readframes(CHUNK)
    while data != '':
        stream.write(getNewWave(data))
        data = wf.readframes(CHUNK)

    stream.stop_stream()
    stream.close()
    p.terminate()

main()
...