Как получить аудио из потока байтов и обрезать его? - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю над приложением, в котором мне нужно сделать некоторые прогнозы для живого аудиопотока, используя модель глубокого обучения. Модель ожидает 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']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...