如何刪除通過連接聲音音調剪輯連接在一起構建的音頻中的「彈出」和「單擊」聲音?如何從PyAudio中的連接聲音數據中刪除彈出窗口
我有產生一系列音調這PyAudio代碼:
import time
import math
import pyaudio
class Beeper(object):
def __init__(self, **kwargs):
self.bitrate = kwargs.pop('bitrate', 16000)
self.channels = kwargs.pop('channels', 1)
self._p = pyaudio.PyAudio()
self.stream = self._p.open(
format = self._p.get_format_from_width(1),
channels = self.channels,
rate = self.bitrate,
output = True,
)
self._queue = []
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.stream.stop_stream()
self.stream.close()
def tone(self, frequency, length=1000, play=False, **kwargs):
number_of_frames = int(self.bitrate * length/1000.)
##TODO:fix pops?
g = get_generator()
for x in xrange(number_of_frames):
self._queue.append(chr(int(math.sin(x/((self.bitrate/float(frequency))/math.pi))*127+128)))
def play(self):
sound = ''.join(self._queue)
self.stream.write(sound)
time.sleep(0.1)
with Beeper(bitrate=88000, channels=2) as beeper:
i = 0
for f in xrange(1000, 800-1, int(round(-25/2.))):
i += 1
length = log(i+1) * 250/2./2.
beeper.tone(frequency=f, length=length)
beeper.play()
但是當音調的變化,有一個在音頻鮮明的「流行」,我不知道如何刪除它。起初,我以爲彈出是因爲我立即播放每個片段,並且每次播放時,當我生成片段時有足夠的延遲時間導致音頻變平坦。但是,當我將所有剪輯連接成單個字符串並播放時,流行歌曲仍然存在。
然後,我認爲每個剪輯的邊界處的正弦波不匹配,因此我試圖將當前音頻剪輯的前N幀與前一剪輯的最後N幀平均,但也是這樣沒有效果。
我在做什麼錯?我該如何解決?
你看波形嗎? –
在這裏猜測..也許隔離一個簡單的和單一的嘟嘟聲。聲音就像放大器一樣打開和關閉。另外88000似乎是蜂鳴聲的高比特率。這是一個唧唧聲嗎?比特率編碼的電壓幅度,其中頻率帶寬用於保真度。 – wbg