gpt4 book ai didi

javascript - 如何将音频 blob 从 javascript 发送到 python?

转载 作者:行者123 更新时间:2023-11-28 17:28:39 25 4
gpt4 key购买 nike

我想将一个音频 blob 从 JS 发送到 python 脚本(在服务器上运行)。我的 JS ajax .. 看起来像这样。

var fileType = 'audio';
var fileName = 'output.wav';
var formData = new FormData();
formData.append(fileType + '-filename', fileName);
formData.append(fileType + '-blob', blob);
$.ajax({
type: 'POST',
url: 'http://localhost/python/audio.py',
data: {audio:formData},
success: function(response) {
alert(respose);
}
});

我的 python 脚本看起来像这样。

#!/usr/bin/python3
print("Content-Type: text/html")
print()
import ssl
import cgi
import wave
import contextlib
form = cgi.FieldStorage()
fname = form.getvalue("audio", "error")
with contextlib.closing(wave.open(fname,'r')) as f:
frames = f.getnframes()
rate = f.getframerate()
duration = frames / float(rate)
print(duration)

现在,我只是在测试,所以它应该让我知道音频文件的持续时间。 blob是通过record.js生成的

这不起作用,因为 python 无法识别该文件。有什么解决办法吗?

PS:我正在使用 Xampp Server,在本地主机上运行。

回应Wojtek Marczenko:错误是

[Mon Apr 04 18:26:09.537912 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: Traceback (most recent call last):: /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.537978 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: File "/home/shashank/project/dutchman/python/audio.py", line 10, in <module>: /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538002 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: with contextlib.closing(wave.open(fname,'r')) as f:: /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538024 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: File "/usr/lib/python3.5/wave.py", line 499, in open: /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538036 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: return Wave_read(f): /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538056 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: File "/usr/lib/python3.5/wave.py", line 163, in __init__: /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538065 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: self.initfp(f): /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538086 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: File "/usr/lib/python3.5/wave.py", line 128, in initfp: /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538097 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: self._file = Chunk(file, bigendian = 0): /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538110 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: File "/usr/lib/python3.5/chunk.py", line 61, in __init__: /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538119 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: self.chunkname = file.read(4): /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html
[Mon Apr 04 18:26:09.538132 2016] [cgi:error] [pid 5330] [client ::1:60802] AH01215: AttributeError: 'NoneType' object has no attribute 'read': /home/shashank/project/dutchman/python/audio.py, referer: http://localhost/index.html

最佳答案

看起来您没有正确地将 blob 作为表单字段发送。将 blob 附加到 FormData 的正确方法是 formData.append(fileType, blob, fileName);。此外,您应该只附加 formData 而不是将其嵌套在另一个对象中:

var formData = new FormData();
formData.append(fileType, blob, fileName);
$.ajax({
type: 'POST',
url: 'http://localhost/python/audio.py',
data: formData,
processData: false, // prevent jQuery from converting the data
contentType: false, // prevent jQuery from overriding content type
success: function(response) {
alert(response);
}
});

资料来源: https://developer.mozilla.org/en-US/docs/Web/API/FormData/append http://www.mattlunn.me.uk/blog/2012/05/sending-formdata-with-jquery-ajax/

在 python 方面,您需要根据 python 文档(无法发布更多链接)使用 CGI 模块。我相信正确的方法是这样的:

form = cgi.FieldStorage()
fname = form["audio"].filename
print "Got filename:", fname # in case of problems see if this looks ok

with contextlib.closing(wave.open(fname,'r')) as f:
...

关于javascript - 如何将音频 blob 从 javascript 发送到 python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36402718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com