Почему сбор входящего и исходящего звука приводит к искажению звука? ⇐ Python
Почему сбор входящего и исходящего звука приводит к искажению звука?
Я пытаюсь передать аудиобайты в общий буфер и передать их через модель транскрипции. Звук поступает из веб-сокета, семплируется на частоте 8 кГц и закодирован по закону Mu-law. Мне удалось воспроизвести несколько секунд аудио для себя, если я перевожу его в отдельные отдельные аудиобуферы (ibuffer и obuffer) для входящего и исходящего звука, но если я собрать в общий буфер, звук очень медленный и задерживается. Вот выдержка из моего тестового кода:
obuffer = b"" ибуфер = б"" общий = б"" пока правда: данные = ожидание очереди.get() если данные["событие"] == "медиа": websocket_payload = данные["медиа"]["полезная нагрузка"] чанк = audioop.ulaw2lin(base64.b64decode(websocket_payload), 2) if data["media"]["track"] == ВХОДЯЩИЙ: обуфер += чанк if data["media"]["track"] == ИСХОДЯЩИЕ: ibuffer += чанк общий += чанк Я тестировал, собирая obuffer, ibuffer и shared, маринуя буферы и затем сохраняя их как .wav. файлы и воспроизводить их на своем компьютере. Отдельные буферы воспроизводятся нормально, и их даже можно объединить, просто усреднив их, что тоже работает нормально, но почему их сбор в общий буфер не может обеспечить такое же качество звука? Получаемый звук довольно далек от оригинала, и я пробовал разные частоты дискретизации до 16 кГц и т. д. Есть ли у кого-нибудь идеи, что здесь делать?
Это странно, поскольку в документации Twilio указано, что вы можете сделать это без проблем.
импортировать маринованные огурцы волна импорта с open("all_bytes.pkl", "rb") как f: loading_audio_bytes = Pickle.load(f) нканалов = 1 ширина выборки = 2 частота кадров = 8000 nframes = len(loaded_audio_bytes) // (nchannels * ширина выборки) с wave.open("wav.wav", 'wb') как wf: wf.setnchannels(нканалы) wf.setsampwidth(ширина выборки) wf.setframerate(частота кадров) wf.setnframes(nframes) wf.writeframes(loaded_audio_bytes) В этом ответе предлагается использовать только исходящую связь, но мне нужны обе дорожки!
Я пытаюсь передать аудиобайты в общий буфер и передать их через модель транскрипции. Звук поступает из веб-сокета, семплируется на частоте 8 кГц и закодирован по закону Mu-law. Мне удалось воспроизвести несколько секунд аудио для себя, если я перевожу его в отдельные отдельные аудиобуферы (ibuffer и obuffer) для входящего и исходящего звука, но если я собрать в общий буфер, звук очень медленный и задерживается. Вот выдержка из моего тестового кода:
obuffer = b"" ибуфер = б"" общий = б"" пока правда: данные = ожидание очереди.get() если данные["событие"] == "медиа": websocket_payload = данные["медиа"]["полезная нагрузка"] чанк = audioop.ulaw2lin(base64.b64decode(websocket_payload), 2) if data["media"]["track"] == ВХОДЯЩИЙ: обуфер += чанк if data["media"]["track"] == ИСХОДЯЩИЕ: ibuffer += чанк общий += чанк Я тестировал, собирая obuffer, ibuffer и shared, маринуя буферы и затем сохраняя их как .wav. файлы и воспроизводить их на своем компьютере. Отдельные буферы воспроизводятся нормально, и их даже можно объединить, просто усреднив их, что тоже работает нормально, но почему их сбор в общий буфер не может обеспечить такое же качество звука? Получаемый звук довольно далек от оригинала, и я пробовал разные частоты дискретизации до 16 кГц и т. д. Есть ли у кого-нибудь идеи, что здесь делать?
Это странно, поскольку в документации Twilio указано, что вы можете сделать это без проблем.
импортировать маринованные огурцы волна импорта с open("all_bytes.pkl", "rb") как f: loading_audio_bytes = Pickle.load(f) нканалов = 1 ширина выборки = 2 частота кадров = 8000 nframes = len(loaded_audio_bytes) // (nchannels * ширина выборки) с wave.open("wav.wav", 'wb') как wf: wf.setnchannels(нканалы) wf.setsampwidth(ширина выборки) wf.setframerate(частота кадров) wf.setnframes(nframes) wf.writeframes(loaded_audio_bytes) В этом ответе предлагается использовать только исходящую связь, но мне нужны обе дорожки!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение