Как удалить всплывающие окна из сцепленных звуковых данных в 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 кадрами предыдущего клипа, но это также не имело эффекта.

Что я делаю неправильно? Как это исправить?

Ответы на вопрос(3)

Ваш ответ на вопрос