首页 > 解决方案 > 就地改变声波:频率和幅度

问题描述

我正在尝试对适当的声音频率和幅度进行一些更改。我目前正在获取声音数据,但是每当我尝试将它乘以一个值时,例如改变幅度,我都会得到很多噪音。我想知道如何以干净的方式做到这一点。我需要遍历数据,因为频率和幅度的变化依赖于用户输入(稍后我将使用网络摄像头根据手的位置进行更改)。使用这个当前代码,我的输入文件只有一个通道。我不知道为什么,但是在“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()

标签: pythonpython-3.xpyaudio

解决方案


推荐阅读