Я создаю приложение "гитарный тюнер" с ReactJS для внешнего интерфейса и Python Flask в качестве внутреннего.
Это то, что приложение делает до сих пор:
1. Приложение React (на стороне клиента) записывает звук с использованием библиотеки реагирования реаги-ми c
2. Отправляет запись через , получить запрос POST к Flask API, который его забирает и отправляет в ответном ответе.
ПРОБЛЕМА: Отправляемый файл находится в форме на скриншоте, которая представляет собой список с одним элементом Blob, состоящим из аудиофайла webm.
Когда я отправляю этот BLOB-файл из аудиофайла webM в функции извлечения она выглядит как неопределенная в приложении Flask, и я не уверен, как прочитать аудио blob / webm в 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 и читать его с помощью волновой библиотеки .