我目前正在使用getUserMedia(),仅适用于Firefox和Chrome,但它已被弃用,仅适用于https(在Chrome中).有没有其他/更好的方法来获得适用于所有平台的javascript中的语音输入?
例如,像web.whatsapp.com app这样的网站如何录制音频?getUserMedia()提示第一次用户允许录音,而Whatsapp应用程序不需要用户的许可.
在getUserMedia()我目前正在使用这个样子的:
navigator.getUserMedia(
{
"audio": {
"mandatory": {
"googEchoCancellation": "false",
"googAutoGainControl": "false",
"googNoiseSuppression": "false",
"googHighpassFilter": "false"
},
"optional": []
},
}, gotStream, function(e) {
console.log(e);
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个从中提取mp3文件的函数
<input type="file" id="sound" accept="audio/*"/>
Run Code Online (Sandbox Code Playgroud)
并存储在Chrome中的localStorage中.(我知道localStorage的大小有限,但我将使用的音频文件将低于2mb.)一旦存储了这个音频文件,它将被播放:
var audio = new Audio('audioFile');
audio.play();
Run Code Online (Sandbox Code Playgroud)
我还是网络开发的新手,所以任何指针都会很棒!
注意:这不是HTML5记录音频到文件的副本.我试图从我的硬盘驱动器中取出一个预先存在的mp3文件并将其存储到localStorage中,以便可以播放它.
背景
我正在编写一个服务来以块的形式提供静态音频文件,以支持带宽较低的用户的流畅体验。一旦文件完全流式传输(块序列是线性的,用户将无法“跳转”范围),我想将文件保存到本地缓存中(使用 localforage,但这不是这个问题的一部分)到稍后从那里加载缓存文件并节省带宽。
问题
根据我目前的知识/代码/工具状态,只能执行以下操作之一:
A) 使用HTMLAudioElement流式传输音频
const audio = new Audio()
audio.src = url
audio.preload = 'auto'
audio.load()
Run Code Online (Sandbox Code Playgroud)
HTML5 音频在内部处理部分响应,本身工作正常,但一旦完全加载,我就无法访问底层缓冲区来保存文件。因此,如果不单独下载(在另一个请求中),我将无法在本地缓存文件。
B) 下载/获取整个文件,然后播放
fetch(url, options) // set content header to array buffer
.then((response) => {
var blob = new Blob([response.value], { type: 'audio/mp3' })
var url = window.URL.createObjectURL(blob)
const audio = new Audio()
audio.src = url
audio.play()
})
Run Code Online (Sandbox Code Playgroud)
这使我可以访问数据,以便我可以缓存它以供离线重用。但是我放弃了流媒体选项,这使得几乎不可能在没有长时间等待的情况下播放更大的文件。
C) 使用自定义加载器并使用 WebAudio API 播放每个块
由于 A 和 B 不够用,我编写了一个自定义 loader,它加载块(工作正常),并使用当前块(作为 ArrayBuffer)作为数据分派事件。它还在结束时调度另一个事件,该事件返回所有块,因此我可以从中创建一个 blob:
const chunkSize …Run Code Online (Sandbox Code Playgroud) 在我正在开发的应用程序上,我想要一种可靠的方式来录制音频并将其上传到S3。我真的看不到任何好的解决方案。希望我能提供一些帮助。我最初是在考虑使用getUserMedia()Javascript API,但在Safari上不起作用。
我有以下脚本,可以在终端中运行时运行:
所做的就是将麦克风语音转换为文本。
import speech_recognition as sr
# obtain audio from microphone
r = sr.Recognizer()
with sr.Microphone() as source:
print("Say something!")
audio = r.listen(source)
try:
# for testing purposes, we're just using the default API key
# to use another API key, use `r.recognize_google(audio, key="GOOGLE_SPEECH_RECOGNITION_API_KEY")`
# instead of `r.recognize_google(audio)`
print("Google Speech Recognition thinks you said " + r.recognize_google(audio))
except sr.UnknownValueError:
print("Google Speech Recognition could not understand audio")
except sr.RequestError as e:
print("Could not request results from Google Speech Recognition service; {0}".format(e)) …Run Code Online (Sandbox Code Playgroud) javascript ×3
audio ×2
django ×1
getusermedia ×1
html5 ×1
html5-audio ×1
python ×1
python-2.7 ×1
speech ×1
streaming ×1