Как конвертировать wav в mp3 в прямом эфире с помощью python?

У меня есть код, как показано ниже, чтобы получить звук с микрофона:

import pyaudio
p = pyaudio.PyAudio()
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 1024*10
RECORD_SECONDS = 10
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    send_via_socket(data) # function to send each frame to remote system

Этот код работает нормально. Однако каждый кадр данных имеет размер 4 КБ. Это означает, что 40kb интернет-данных необходимо для отправки 1 секунды аудиоданных. Это всего лишь 6 кбайт данных. Когда я сохранил 10 кадров (1 секунду аудио) на диск и конвертировал его в mp3 с помощью модуля pdub. Как конвертировать каждый wav-кадр в mp3 перед отправкой через сокет? (Мне просто нужно уменьшить размер кадра, чтобы сохранить использование сети). Например:

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)  # data =4kb
    mp3_frame = wav_to_mp3(data) # mp3_frame should be 1kb or less
    send_via_socket(mp3_frame) # function to send each frame to remote system

Ответ 1

попробуйте python-audiotools. Я думаю, что это поможет вам передать аудиофайл, который вы хотите.

Ответ 2

Из чтения кода для pydub, кажется, что AudioSegment разрешает вывод только в файл с использованием переменной out_f. Таким образом, вы можете прочитать WAV файл и закодировать каждый фрагмент файла, а затем прочитать файл и отправить его, декодируя его на другом конце. Однако это не очень эффективно. Я предлагаю на самом деле расширить pydub для обработки потоков и внесения вклада в проект. Код экспорта довольно прост, и я уверен, что это не будет слишком сложно сделать. Автор, вероятно, был бы благодарен.

Код для AudioSegment находится здесь: https://github.com/jiaaro/pydub/blob/master/pydub/audio_segment.py