Twilio“点击”和“静态”流(Websocket)

问题描述 投票:0回答:1

我们遇到了一个问题,即在流式对话期间通过 Websocket 连接发送的音频剪辑之间存在某种“咔嗒”声或静态声音,几乎就像轻轻敲击麦克风一样。

发送的代码非常简单

                media_message = {
                    "event": "media",
                    "streamSid": stream_sid,
                    "media": {
                        "payload": base64_encoded_audio,
                    },
                }

                await websocket.send(json.dumps(media_message))
                self.logger.info(f"Audio sent over websocket to Twilio.")

                #TODO: change mark name 
                mark_message = {
                    "event": "mark",
                    "streamSid": stream_sid,
                    "mark": {"name": "testMarkLabel"},
                }
                await websocket.send(json.dumps(mark_message))

我们正在合成一些片段(逐句)并连续发送过来。如果发送后续剪辑之间没有延迟,这种情况似乎最常见 - 我通过在尝试发送另一个音频剪辑之前计算每个音频剪辑的持续时间并检查我们是否收到“标记”事件来缓解这种情况,但即使这样似乎也没有以消除这种情况的发生。

有什么想法吗?它与音频编码或格式无关 - 当我在发送之间引入任意大的延迟时,点击声完全消失。我还尝试了音频剪辑的淡入/淡出,但没有帮助。

websocket twilio twilio-api
1个回答
0
投票

我最终截断了音频数据以消除咔哒声。不太优雅,但完成了工作。

    # first convert to wav
    wav_audio_data = convert_mp3_to_wav(mpeg_audio)
    # then to u-law
    ulaw_audio_data = audioop.lin2ulaw(wav_audio_data, SAMPLE_WIDTH)

    # Then truncate based on formula:
    # Remove the first 100 milliseconds of u-Law audio
    # 100 milliseconds = 800 samples = 800 bytes at a sample rate of 8000 Hz
    ulaw_audio_data = ulaw_audio_data[800:]
© www.soinside.com 2019 - 2024. All rights reserved.