Смешивание 2-фазных кадров вокодера вместе

Я пытаюсь создать эффект, когда я замораживаю звук с помощью фазового вокодера. Я делаю это путем сохранения спектрального кадра (величины и фазы), а также разности фаз между предыдущим и текущим кадром. Чтобы воспроизвести замороженный кадр, я просто вставляю спектральный кадр в обратную функцию фазового вокодера несколько раз, каждый раз увеличивая (и оборачивая) фазу своими значениями разности фаз.

Вот некоторый псевдокод (для краткости) того, что я делаю в данный момент, где frameA и frameB - представления амплитуды / фазы представления fft фазового вокодера.

void analyze(inputSignal) {
    // convert time domain "inputSignal" to frequency domain
    frameA = vocoder.forward(inputSignal); 

    // calculate the inter-frame phase delta
    phaseDeltaA = frameA.phase - lastPhases;
    lastPhases = frameA.phase; 
}

void playback(outputSignal) {
    frameA.phase += phaseDeltaA;
    outputSignal = vocoder.reverse(frameA);
}

Работает хорошо. Но я хочу объединить этот замороженный спектральный кадр с другими "замороженными" кадрами (накапливая их).

Я попытался сложить кадры вместе, также попытался сложить разности фаз вместе, но это просто создает неприятные шумы.

void analyze(inputSignal) {

    ...

    // naively sum the magnitudes and phases of both frames
    combinedFrame.magnitude = frameA.magnitude + frameB.magnitude;
    combinedFrame.phase = frameA.phase + frameB.phase;

    // sum the phase deltas
    combinedPhaseDelta = phaseDeltaA + phaseDeltaB;

}
void playback(outputSignal) {
    combinedFrame.phase += combinedPhaseDelta;
    outputSignal = vocoder.reverse(combinedFrame);
}

1 ответ

Добавление дельта-фаз вместе изменит частоты, тем самым разрушая любые гармонические отношения, необходимые для того, чтобы синтез звучал "хорошо".

Другим возможным решением было бы объединить не кадры, а законченные синтетические звуковые дорожки. например, убедитесь, что каждая синтезированная звуковая дорожка фазового вокодера звучит хорошо, а затем используйте микшер для компоновки результата.

Другие вопросы по тегам