Задать вопрос
@Dobroe3lo

Как передать аудиоданные потоком через сокет?

Всем доброго времени суток. Помогите, пожалуйста, в одном вопросе.

Пытаюсь на питоне реализовать передачу аудиоданных в потоке через сокет.
Как сделать, чтобы аудиофайл в сокет отправлялся порциями(по байтам)? Между порциями аудио в сокет должен отправляться разделитель "--audio".

Использую библиотеку PyAudio

Вот код целиком. При отладке сокет открывается, api запрос отправляется и по факту стрим должен начаться, но вылетает ошибка.

#######Подключаемые модули

import requests
import socket
import pyaudio
import wave


##########################

#######Открываем сокет для стрима
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('192.168.13.122', 80))

#######Передаем API запросы по HTTP POST
url = 'http://192.168.13.122/cgi-bin/transmitaudio_cgi?user=admin&pwd=admin HTTP'
headers = {'Content-Type': 'audio/basic', 'Content-Length': '99999999', 'Connection': 'Keep-Alive', 'Cache-Control': 'no-cache'}
r = requests.post(url, headers=headers)
print(requests.__file__)
print(dir(requests))

#######Транслируем звук

filename = 'voice.wav'

# Set chunk size of 1024 samples per data frame
chunk = 1024  

# Open the sound file 
wf = wave.open(filename, 'rb')

# Create an interface to PortAudio
p = pyaudio.PyAudio()

# Open a .Stream object to write the WAV file to
# 'output = True' indicates that the sound will be played rather than recorded
stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),
                channels = wf.getnchannels(),
                rate = wf.getframerate(),
                output = True)

# Read data in chunks
data = wf.readframes(chunk)

# Play the sound by writing the audio data to the stream
while data != '':
    stream.write(data)
    data = wf.readframes(chunk)

# Close and terminate the stream
stream.close()
p.terminate()

sock.close()


Ошибка
Traceback (most recent call last):
  File "C:\Users\Roman\Desktop\ПО HTTP Audio\cgiaudio.py", line 30, in <module>
    wf = wave.open(filename, 'rb')
  File "C:\Users\Roman\AppData\Local\Programs\Python\Python37\lib\wave.py", line 510, in open
    return Wave_read(f)
  File "C:\Users\Roman\AppData\Local\Programs\Python\Python37\lib\wave.py", line 164, in __init__
    self.initfp(f)
  File "C:\Users\Roman\AppData\Local\Programs\Python\Python37\lib\wave.py", line 131, in initfp
    raise Error('file does not start with RIFF id')
wave.Error: file does not start with RIFF id.
  • Вопрос задан
  • 999 просмотров
Подписаться 1 Средний 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы