Я создаю приложение для настройки гитары с ReactJS для внешнего интерфейса и Python Flask в качестве внутреннего интерфейса.
Вот что пока делает приложение:
1. Приложение React (на стороне клиента) записывает звук с помощью библиотеки реакции React -mic
2. Отправляет запись через. запрос POST на получение Flask API, который забирает его и отправляет обратно в качестве ответа.
ПРОБЛЕМА. Отправляемый файл находится в форме на снимке экрана, которая представляет собой список с одним элементом Blob, состоящим из аудиофайла в Интернете.
Когда я отправляю этот blob-файл аудиофайла webM в функции выборки, он оказывается неопределенным в приложении Flask, и я не уверен, как читать blob / webm audio на Python.
Функция POST в ReactJS:
uploadFile(file) {
var form = new FormData();
form.append('file',file)
form.append('title',"Guitar recording")
fetch('http://127.0.0.1:5000/audio_record', {
// content-type header should not be specified!
method: 'POST',
body: form
}).then(function (response){
return (response.text())
}).then(function(text){
console.log(text) // The text the endpoint returns
})
.catch(error => console.log(error)
);
}
Приложение Python Flask (где я пытаюсь прочитать файл, не работает ..):
import audioread
from flask import Flask, request #import main Flask class and request object
from flask_cors import CORS
import logging
from pydub import AudioSegment
from pydub.playback import play
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('HELLO WORLD')
app = Flask(__name__) #create the Flask app
CORS(app)
@app.route('/')
def landing():
return 'Landing page'
# Get the blob of type "audio/webm;codecs=opus"
@app.route('/audio_record', methods=['POST'])
def save_record():
logger.info("welcome to upload`")
# file = request.files['file']
#filename = secure_filename(file.title)
file = request.form['file']
print('File from the POST request is: {}'.format(file))
try:
read_audio_file(file[0])
return "****** Audio Read ******"
except:
print("In the except", file[0]) # Gets printed as undefined
title = request.form['title']
print(title) # Able to print title
return "Request received and responded"
# app.logger.debug(request.files['file'].filename)
def read_audio_file(audio_from_post):
print("Tring to read audio..")
with audioread.audio_open(audio_from_post) as f:
print(f.channels, f.samplerate, f.duration)
for buf in f:
print(buf)
if __name__ == '__main__':
app.run(debug=True, port=5000) #run app in debug mode on port 5000
Я видел здесь, что было бы разумно преобразовать Blob к объекту Audio в ReactJS, но я не уверен, как это упростит чтение файла во Flask.
Есть идеи, как мне это сделать?
Я хочу прочитать файл на Python и выполнить быстрое преобразование Фурье (numpy.fft.fft), чтобы определить частоты в аудиоклипе.
Заранее спасибо!
ОБНОВЛЕНИЕ
Я решил, что хочу попробовать записать звук с помощью другой библиотеки, MediaRecorder, чтобы иметь возможность записывать звук в WAV, а не в webm. Думаю, я закодирую файл WAV в base64, отправлю его в форме во Flask и прочитаю с помощью волновая библиотека.