[問題] 在chrome上抓stream audio output的data

作者: ghoster7 (燃燒的七星魂)   2018-05-31 12:49:16
這是我第一次在這邊發文,假如等等下面有什麼違規的地方,說聲抱歉
我這邊要做個client端的javascript寫的程式 來負責的抓取使用者的mic的data
然後再把抓到的Data做成Pcm Data
而我寫的程式如下
let timer;
let chunks = [];
let finalChunks = [];
let count = 0;
let theData = 0;
let audioInput = null;
let microphone_stream;
let gain_node = null;
let script_processor_node;
$('#s').click(function(){
window.AudioContext = window.AudioContext ||
window.webkitAudioContext;
if (!navigator.mediaDevices.getUserMedia){
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia || navigator.mozGetUserMedia ||
navigator.msGetUserMedia;
}
if(navigator.mediaDevices.getUserMedia)
{
navigator.getUserMedia
(
{audio:true},
function(stream){
start_microphone(stream);
},
function(e){
alert('Error capturing audio.');
}
);
}
else
{
alert('getUserMedia not supported in this browser.');
}
});
function process_microphone_buffer(event) {
theData = event.inputBuffer.getChannelData(0);
}
function start_microphone(stream){
let context = new AudioContext();
let BUFF_SIZE_RENDERER = 16384;
microphone_stream = context.createMediaStreamSource(stream);
script_processor_node = context.createScriptProcessor(1024,1,1);
script_processor_node.onaudioprocess = process_microphone_buffer;
microphone_stream.connect(script_processor_node);
update();
function update()
{
console.log(theData);
timer = setTimeout(update,1000);
if(theData !== 0){
chunks.push(Array.from(theData));
count++;
}
if(count === 30)
{
clearTimeout(timer);
console.log((chunks));
stream.getTracks()[0].stop();
let i;
let j;
for( i = 0;i<chunks.length;i++)
{
for( j = 0;j<1024;j++)
{
finalChunks.push(chunks[i][j]);
}
}
console.log(finalChunks);
console.log(finalChunks.length);
}
}
}
簡單解釋
有個button '#s' 是負責開始的,使用者開始就會開始請求使用者的Mic(getUserMedia)
然後做個30秒,把抓到的data放到物件chunks
之後匯出chunks在float32array 轉 int16 做成pcm data(在這邊就沒寫了,另一塊東西)
不過問題在這
onaudioprocess這個method
負責去call抓buffer裡面的data的function
在chrome不支援........
目前試過的瀏覽器只有火狐ok
想問看看這邊的版友
有沒有比較好的方式可以讓火狐和chrome都可以執行的方案
作者: mmis1000 (秋月戀楓)   2018-06-02 13:12:00
是不是打錯字啊?怎麼可能不支援?沒這個的話,scriptNode還有存在意義嗎?而且mdn上也是寫支援的。只是要prefix而已。

Links booklink

Contact Us: admin [ a t ] ucptt.com