HTML部分
標籤部分
audio標籤,實現錄製完畢播放音頻
button按鈕,分別實現開始錄製、開始播放、開始下載
特別說明
controls音頻進度條
disabled按鈕不激活狀態
<audio controls id="audioPlay" ></audio>
<button id="btnRecord" >開始錄製</button>
<button disabled id="btnPlay" >開始播放</button>
<button disabled id="btnDownload" >開始下載</button>
複製代碼
JavaScript部分
獲取標籤id
querySelector能夠獲取每一個標籤下的id
var audioPlay = document.querySelector('audio#audioPlay' );
var btnRecord = document.querySelector('button#btnRecord' );
var btnPlay = document.querySelector('button#btnPlay' );
var btnDownload = document.querySelector('button#btnDownload' );
複製代碼
異步獲取音頻流
stream參數爲獲取到的音頻流
window.stream實現全局流
navigator.mediaDevices.getUserMedia({audio:true })
.then(gotMediaStream);
function gotMediaStream(stream){
window.stream = stream;
}
複製代碼
實現錄製效果
btnRecord.onclick = () => {
if (btnRecord.textContent === '開始錄製' ){
startRecord();
btnRecord.textContent = '中止錄製' ;
btnPlay.disabled = true ;
btnDownload.disabled = true ;
}else {
stopRecord();
btnRecord.textContent = '開始錄製' ;
btnPlay.disabled = false ;
btnDownload.disabled = false ;
}
}
複製代碼
實現開始錄製功能
var mediaRecorder = new MediaRecorder(stream[,options]);
stream爲獲取到的音頻流
options是一個能夠帶布爾類型的字典,能夠獲取多媒體設備
ondataavailable函數用於存儲音頻流
function startRecord (){
buffer = [];
mediaRecorder = new MediaRecorder(window.stream,{audio:true });
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10) //每隔10毫秒存儲一塊數據
}
var buffer;
function handleDataAvailable(e) {
buffer.push(e.data);
}
複製代碼
實現中止錄製功能
function stopRecord () {
mediaRecorder.stop();
}
複製代碼
實現開始播放功能
btnPlay.onclick = () => {
//使用Blob對象
var blob = new Blob(buffer, { type : 'audio/ogg' });
//獲取資源
audioPlay.src = window.URL.createObjectURL(blob);
//控制標籤
audioPlay.controls = true ;
//開始播放
audioPlay.play();
}
複製代碼
實現開始下載功能
btnDownload.onclick = () => {
var blob = new Blob(buffer, { type : 'audio/ogg' });
url = window.URL.createObjectURL(blob);
var a = document.createElement('a' );
a.href = url;
a.download = 'juejin.ogg' ;
a.click();
}
複製代碼
項目效果
Agora SDK 使用體驗徵文大賽 | 掘金技術徵文,徵文活動正在進行中 bash