Я работаю над проектом, в котором я получаю поток аудио байтов, используя Flask socket-io. Я использую пакет python wave
для записи их в файл .wav в режиме реального времени. Теперь я не хочу, чтобы мой буфер увеличивался. Итак, я хочу регулярно удалять кадры из начала файла. Как сделать это одновременно без потери входящих данных? Вот код серверной части приложения:
@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']