Я работаю над приложением, в котором мне нужно сделать некоторые прогнозы для живого аудиопотока, используя модель глубокого обучения. Модель ожидает 10 секунд аудио в качестве входа. Чтобы давать прогнозы в реальном времени, я хочу обновлять 10-секундный входной звук каждые 0,5 секунды. Это означает, что начальный 0,5-секундный блок входного 10-секундного звука будет отброшен, а новый 0,5-секундный звук будет добавлен к нашему входу.
Я использую flask socket-io для получения потока байтов из клиентский браузер Я хочу преобразовать этот поток байтов в некоторое python представление аудио, чтобы оно поддерживало манипуляции с кадрами аудио. Прямо сейчас я просто записываю этот поток байтов в волновой файл, который хранится на моем диске. Но он не поддерживает манипуляции с кадрами. Вот код бэкэнда:
@bp.route('/')
def index():
"""Return the client application."""
return render_template('audio/main.html')
@socketio.on('start-recording', namespace='/audio')
def start_recording(options):
"""Start recording audio from the client."""
id = uuid.uuid4().hex # server-side filename
session['wavename'] = id + '.wav'
wf = wave.open(current_app.config['FILEDIR'] + session['wavename'], 'wb')
wf.setnchannels(options.get('numChannels', 1))
wf.setsampwidth(options.get('bps', 16) // 8)
wf.setframerate(options.get('fps', 44100))
session['wavefile'] = wf
@socketio.on('write-audio', namespace='/audio')
def write_audio(data):
"""Write a chunk of audio from the client."""
session['wavefile'].writeframes(data)
print(type(data))
@socketio.on('end-recording', namespace='/audio')
def end_recording():
"""Stop recording audio from the client."""
# print("saving file")
emit('add-wavefile', url_for('static', filename='_files/' + session['wavename']))
session['wavefile'].close()
del session['wavefile']
del session['wavename']