python - 就地改变声波:频率和幅度
问题描述
我正在尝试对适当的声音频率和幅度进行一些更改。我目前正在获取声音数据,但是每当我尝试将它乘以一个值时,例如改变幅度,我都会得到很多噪音。我想知道如何以干净的方式做到这一点。我需要遍历数据,因为频率和幅度的变化依赖于用户输入(稍后我将使用网络摄像头根据手的位置进行更改)。使用这个当前代码,我的输入文件只有一个通道。我不知道为什么,但是在“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()
解决方案
推荐阅读
- java - 如何在不由用户更改的情况下在 android 裁剪意图中指定高度/宽度?
- html - 无法使用引导程序在打印页面的同一行中显示 3 列
- java - 在流使用期间管理内存使用
- c# - Serilog 对象日志记录返回 null
- android - 如何将通道值标准化为范围 [0.0,1.0]?
- flutter - 如何在颤动中将默认日期设置为今天之后的第一个星期六
- javascript - 通过 Javascript 附加到 Datalist
- wordpress - 如何使网站的着陆页出现在 Google 上而不是“/ 的索引”?
- javascript - Cardlist 未定义 no-undef
- android - 禁用调试远程时,对象作为 React 子错误无效?