python是否将音频数据转为文件?

问题描述 投票:0回答:1

我想发送我的音频数据并创建音频文件。 我不知道如何解码和写入音频数据

下面的代码是python flask代码和javascript。 index.html 包含 voice.js 和 fetch.js 来发送音频数据。

服务器.py

from flask import Flask, render_template, request, make_response

app = Flask(__name__)

@app.route("/")
def hello_world():
    return render_template('index.html')

@app.route("/<name>.js")
def getJs(name):
    return render_template(name+'.js')

@app.route("/audio", methods=['post'])
def audio():
    f = open('temp.webm','+wb')
    f.write(request.data)
    f.close()

    return make_response('', 200)

if __name__ == '__main__':
    app.run()

语音.js

const voice = [];

navigator.mediaDevices
    .getUserMedia({
        audio: true,
    })
    .then((mediaStream) => {
        const mediaRecorder = new MediaRecorder(mediaStream, {
            // mimeType: 'audio/webm; codecs="pcm"',
            // audioBitsPerSecond: 16000,
        });

        mediaRecorder.start(1000)

        mediaRecorder.addEventListener("dataavailable", (e) => {
            voice.push(e.data);
        });
    })

获取.js

setInterval(() => {
    if (voice.length > 1) {
        let blob = voice.shift()
        fetch('http://localhost:5000/audio', {
            method: 'post',
            body: blob
        })
        
        console.log(blob)
    }

}, 1000)

index.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
</head>

<body>
    <p id="result">result</p>
</body>
<script src="voice.js"></script>
<script src="fetch.js"></script>
</html>

我想创建一个新的音频文件。 (例如'voice.wav')

javascript python upload decode wav
1个回答
0
投票

您已经将音频数据保存为“.webm”文件。如果要将音频保存为“.wav”文件,请使用“pydub”库,如下所示:

  1. 首先,安装“pydub”:
pip install pydub
  1. 修改你的“server.py”文件:
from pydub import AudioSegment

@app.route("/audio", methods=['post'])
def audio():
    temp_filename = 'temp.webm'
    with open(temp_filename, '+wb') as f:
        f.write(request.data)
    
    audio = AudioSegment.from_file(temp_filename, format="webm")
    output_filename = 'voice.wav'
    audio.export(output_filename, format="wav")
    
    return make_response('', 200)
    return make_response('', 200)

希望对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.