python音频 降噪_python - 使用pyaudio对音频播放进行降噪 - 堆栈内存溢出
我正在用Python為Raspberry Pi寫一個聲碼器,這使聲音無法識別。 我錄制音頻并使用回調(diào)功能實時播放-它可以工作。 現(xiàn)在,我需要對輸入進行去噪,以Numpy數(shù)組表示(像大多數(shù)教程和SO上的文章一樣,沒有.wav文件!)。 它對我不起作用。
我的main.py:
from copy import copy
import numpy as np
import pyaudio as pa
import time
import noisereduce as nr
p = pa.PyAudio()
FORMAT = pa.paFloat32
NP_FORMAT = np.float32
CHANNELS = 2
CHUNK = 1024
RATE = int(p.get_default_input_device_info()['defaultSampleRate'])
NOISE_SAMPLE = None
# function for manipulating input data
def callback(in_data, frame_count, time_info, flag):
data = copy(np.frombuffer(in_data)) # copy, since original is read-only
# here everything is ok for first time
# print("X")
out_data = nr.reduce_noise(audio_clip=data, noise_clip=NOISE_SAMPLE)
# print("Y")
# I get here only once
return out_data, pa.paContinue
def get_noise():
audio = pa.PyAudio()
stream = audio.open(format=FORMAT, channels=CHANNELS,
rate=RATE, input=True,
frames_per_buffer=CHUNK)
frames = []
RECORD_SECONDS = 1
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(np.frombuffer(data))
# stop Recording
stream.stop_stream()
stream.close()
audio.terminate()
return np.array(frames, dtype=NP_FORMAT).flatten()
def main():
global NOISE_SAMPLE
NOISE_SAMPLE = get_noise()
stream = p.open(format=FORMAT,
rate=RATE,
channels=CHANNELS,
input=True,
output=True,
frames_per_buffer=CHUNK,
stream_callback=callback)
stream.start_stream()
# main input loop
while True:
time.sleep(1)
stream.stop_stream()
stream.close()
p.terminate()
if __name__ == "__main__":
main()
我記錄了1秒鐘的噪聲樣本,然后進入無限的記錄播放循環(huán),在這里我想對輸入進行降噪并將其輸出。 由于某種原因,它只能運行一次:長時間(為什么?)后,我會打印一次“ X”和“ Y”,然后程序繼續(xù)運行,但是不再輸入回調(diào)函數(shù)。 有什么想法嗎? 任何建議,其他易于使用的庫,等等。
總結(jié)
以上是生活随笔為你收集整理的python音频 降噪_python - 使用pyaudio对音频播放进行降噪 - 堆栈内存溢出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单的房态图
- 下一篇: Micropython教程之TPYBoa