我正在使用getUserMedia()函数从麦克风捕获音频输入,在chrome中运行良好,但在5秒后firefox声音消失.如果我再次发送麦克风请求(没有重新加载页面)同样的事情发生.这是代码(我使用http://updates.html5rocks.com/2012/09/Live-Web-Audio-Input-Enabled作为指导):
//getting the function depending on browser
navigator.getMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
// success callback when requesting audio input stream
function gotAudioStream(stream) {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContext();
// Create an AudioNode from the stream.
var mediaStreamSource = audioContext.createMediaStreamSource( stream );
// Connect it to the destination to hear yourself (or any other node for processing!)
mediaStreamSource.connect( audioContext.destination );
}
function gotError(err) {
alert("An error occured! " + …Run Code Online (Sandbox Code Playgroud) 当我启动振荡器时,将其停止,然后重新启动; 我收到以下错误:
Uncaught InvalidStateError: Failed to execute 'start' on 'OscillatorNode': cannot call start more than once.
Run Code Online (Sandbox Code Playgroud)
显然我可以gain用来"停止"音频,但这让我感到很糟糕.什么是一种更有效的方法来停止振荡器,同时能够再次启动它?
var ctx = new AudioContext();
var osc = ctx.createOscillator();
osc.frequency.value = 8000;
osc.connect(ctx.destination);
function startOsc(bool) {
if(bool === undefined) bool = true;
if(bool === true) {
osc.start(ctx.currentTime);
} else {
osc.stop(ctx.currentTime);
}
}
$(document).ready(function() {
$("#start").click(function() {
startOsc();
});
$("#stop").click(function() {
startOsc(false);
});
});
Run Code Online (Sandbox Code Playgroud)
当前的解决方案(在提问时):http://jsfiddle.net/xbqbzgt2/2/
最终解决方案:http://jsfiddle.net/xbqbzgt2/3/
我在从mediaRecorder api获取捕获的blob到Chrome中播放时遇到问题(它可以在Firefox中运行).不确定这是否是Chrome中的错误.
它报告的错误:
undefined:1 Uncaught(在promise中)DOMException:无法解码音频数据
window.AudioContext = window.AudioContext || window.webkitAudioContext;
navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
var context = new AudioContext();
var record = document.querySelector('#record');
var stop = document.querySelector('#stop');
if (navigator.getUserMedia) {
console.log('getUserMedia supported.');
var constraints = {
audio: true
};
var chunks = [];
var onSuccess = function(stream) {
var mediaRecorder = new MediaRecorder(stream);
record.onclick = function() {
mediaRecorder.start();
console.log(mediaRecorder.state);
console.log("recorder started");
record.style.background = "red";
stop.disabled = false;
record.disabled = true;
}
stop.onclick = function() { …Run Code Online (Sandbox Code Playgroud)我在问,因为我无法在任何地方找到答案.我已经成功实现了RecorderJS,以便在JS中记录麦克风输入.但是,录制的文件是WAV,导致大文件.我正在寻找一种方法用JS直接录制到MP3,或者以某种方式将位编码为MP3而不是WAV.
怎么做到呢?是否有可以做到的Web Audio API功能或某种JS MP3编码器?
我刚问了一个关于音频的问题,人们认为这是一个关于html5-audio而不是网络音频的问题.
所以我想知道有什么区别?
我一直在玩Web Audio API,我正在尝试加载一首歌的多个部分并将它们附加到一个新的ArrayBuffer,然后使用该ArrayBuffer将所有部分作为一首歌播放.在下面的例子中,我使用相同的歌曲数据(这是一个小循环)而不是歌曲的不同部分.
问题是它仍然只播放一次而不是两次,我不知道为什么.
function init() {
/**
* Appends two ArrayBuffers into a new one.
*
* @param {ArrayBuffer} buffer1 The first buffer.
* @param {ArrayBuffer} buffer2 The second buffer.
*/
function appendBuffer(buffer1, buffer2) {
var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
tmp.set( new Uint8Array(buffer1), 0);
tmp.set( new Uint8Array(buffer2), buffer1.byteLength);
return tmp;
}
/**
* Loads a song
*
* @param {String} url The url of the song.
*/
function loadSongWebAudioAPI(url) {
var request = new XMLHttpRequest();
var …Run Code Online (Sandbox Code Playgroud) javascript concatenation html5-audio arraybuffer web-audio-api
是否可以将Web Speech API中的合成语音用作SourceNode内部Web Audio API的音频上下文?
我有一个使用Soundmanager2的网络音频播放器.现在在锁定屏幕上播放/暂停工作并且prev/next不起作用.我在iOS 7上工作,但我无法弄清楚原因.
我看到很多关于在本机应用程序中设置轨道图像和播放器控件的讨论,但不是在音频Web应用程序中.那就是说我想知道为什么它退出iOS8工作以及我可以做些什么来添加一个轨迹图像?
更新:控件在iOS 8中不起作用,仅在iOS7上有效.
是否可以使用Web Audio API更改音频的速度(以加载的MP3文件的形式)而不改变音高?
我知道AudioBufferSourceNode上的playbackRate属性,但这也改变了音高.我也知道了playback<audio>和<video>元素的playbackRate属性,但我需要使用Web Audio API.
我是Web Audio API的新手.有什么我能做的吗?
我可以使用Chrome的Speech Synthesis API(版本33.0.1750.112 beta-m)以下列方式从文本生成语音
var transcript = document.getElementById("speechTxt").value;
var msg = new SpeechSynthesisUtterance(transcript);
speechSynthesis.speak(msg);
Run Code Online (Sandbox Code Playgroud)
现在我想将这个语音保存在一个文件中(可能使用WebAudio API).这有可能通过一些函数调用吗?
我已经查看了语音合成API中的方法,没有什么可以保存这些语音数据.使用WebAudio API我能够在麦克风中捕获这种语音,但会引入许多不必要的噪音.是否无法将此语音数据保存在Chrome浏览器本身中,因为它是首先生成它的人?
web-audio-api ×10
javascript ×5
audio ×2
html5-audio ×2
arraybuffer ×1
getusermedia ×1
html5 ×1
mp3 ×1
playback ×1
speech ×1
wav ×1