Потоковое аудио из потока PyAudio для воспроизведения на веб-странице в JavascriptPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Потоковое аудио из потока PyAudio для воспроизведения на веб-странице в Javascript

Сообщение Anonymous »

Я пытаюсь получить аудиопоток со своего компьютера с помощью PyAudio (в частности, форка pyaudiowpatch), передать эти аудиоданные через веб-сокет (используя библиотеку веб-сокетов) и воспроизвести их на веб-странице с помощью JavaScript. Для этого , у меня есть следующий код Python на стороне сервера:

Код: Выделить всё

import pyaudiowpatch as pyaudio

import asyncio
from websockets.server import serve

CHUNK_SIZE = 512

async def main():
with pyaudio.PyAudio() as p:
# 23 is the index of the device i'm trying to get the data from
audio_device = p.get_device_info_by_index(23)
with p.open(
format=pyaudio.paInt16,
channels=audio_device["maxInputChannels"],
rate=int(audio_device["defaultSampleRate"]),
frames_per_buffer=CHUNK_SIZE,
input=True,
input_device_index=audio_device["index"]
) as stream:
async def handler(ws):
print(f"Connection from {ws}")
while stream.is_active():
chunk = stream.read(CHUNK_SIZE)
await ws.send(chunk)
print(f"Sent chunk to {ws}")
print(f"Closing connection to {ws}")

async with serve(handler, host="localhost", port=8081):
print("Listening...")
await asyncio.Future()

asyncio.run(main())
Этот код работает нормально, и когда я подключаюсь с веб-страницы, данные передаются без проблем. Мой клиентский js выглядит следующим образом:

Код: Выделить всё

const host = "ws://localhost:8081"
const ws = new WebSocket(host, "testProtocol")
const audioContext = new AudioContext()
const source = audioContext.createBufferSource()

source.connect(audioContext.destination)

document.getElementById("playButton").onclick = () => {
source.start()
}

ws.onmessage = (event) => {
event.data.arrayBuffer().then(data => {
console.log(new Uint8Array(data)) // Shows that the data being received matches that being sent
audioContext.decodeAudioData(new Uint8Array(data).buffer, (buffer) => {
source.buffer = buffer
})
})
}
Идея состоит в том, что клиент ws получает данные в виде большого двоичного объекта, а затем превращает их в ArrayBuffer для воспроизведения с помощью API веб-аудио. Однако я получаю следующую ошибку от js: Uncaught (in Promise) DOMException: буфер, переданный в decodeAudioData, содержит неизвестный тип контента. Очевидно, это означает, что передаваемые мной аудиоданные не в формате, который API веб-аудио может это понять.
Как правильно воспроизвести звук, передаваемый в потоковом режиме на веб-страницу?

Подробнее здесь: https://stackoverflow.com/questions/780 ... javascript
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Я использую PyvidPlayer2, и это дает мне ошибку, когда я не имею Pyaudio, но я уже скачал Pyaudio
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Потоковое аудио с помощью Python
    Anonymous » » в форуме Python
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Потоковое аудио с весеннего сервера
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Потоковое клиентское приложение gRPC вызывает ошибку сегментации на нескольких клиентах потока
    Anonymous » » в форуме Linux
    0 Ответы
    70 Просмотры
    Последнее сообщение Anonymous
  • Как транслировать видео и аудио с Raspi на веб -сайт и вернуть аудио [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»