一、mediastreamtrack 聲量js
mediastreamtrack 聲量js是一個非常有用的API,它可用於獲取MediaStreamTrack的音頻級別(以分貝為單位)和靜音狀態。可以在任何時候調用getLevel()方法,以獲得當前音頻級別的信息。可以通過監聽MediaStreamTrack的音頻軌道上的’ ended ‘事件來確定靜音狀態。
以下是一個簡單的示例,展示了如何使用mediastreamtrack 聲量js來獲取音頻級別和靜音狀態:
<script>
navigator.mediaDevices.getUserMedia({ audio: true }).then(function(stream) {
const track = stream.getAudioTracks()[0];
setInterval(() => {
console.log('當前音頻級別:', track.getLevel());
console.log('是否處於靜音狀態?', track.muted);
}, 1000);
}).catch(function(err) {
console.log('獲取音頻流失敗:', err);
});
</script>
上述代碼使用getUserMedia API獲取一個音頻流,並使用setInterval API每秒鐘檢查一次音頻級別以及靜音狀態。對於每次檢查,將顯示當前的音頻級別和靜音狀態。如果錯誤,將輸出一個相應的錯誤信息。
二、mediastreamtrack from buffer
MediaStreamTrack允許從Buffer生成AudioTrack或VideoTrack對象。只需使用createBufferSource()方法創建一個AudioBufferSourceNode對象即可。然後,將該節點附加到上下文(使用DestinationNode),設置buffer屬性(將其設置為從mediastreamtrack獲取的此緩衝區)並開始播放源節點。最後,使用createMediaStreamTrackSource()方法創建一個新的AudioTrack對象,並將源節點分配給它。
以下是一個簡單的示例,展示了如何使用mediastreamtrack from buffer API從一個Buffer生成一個AudioTrack對象:
<script>
let audioContext = new AudioContext();
let source;
let track;
fetch("test.mp3")
.then(response => response.arrayBuffer())
.then(buffer => {
source = audioContext.createBufferSource();
audioContext.decodeAudioData(buffer, decodedData => {
source.buffer = decodedData;
source.connect(audioContext.destination);
source.start();
track = source
.mediaStreamTrack;
let newStream = new MediaStream([track]);
// 使用新的MediaStream播放音頻
let audioElement = document.getElementById('audio-element');
audioElement.srcObject = newStream;
});
});
</script>
上述代碼使用fetch API載入一個mp3文件,並在解碼完成後,將其附加到AudioContext中的源節點,然後開始播放。之後,新的MediaStream和其音頻軌道將使用從源節點獲取的音頻軌道創建。最後,使用新的MediaStream對象播放該音頻。
三、mediastreamtrack duration
mediastreamtrack duration API可用於獲取MediaStreamTrack的持續時間。在大多數情況下,這會返回一個實際表示的時間,但是在某些情況下,例如當TrackBuffer生成媒體緩衝時,其值可能會是NaN。可以使用帶有「 ended 」事件的track來確定MediaStreamTrack的實際持續時間。
以下是一個簡單的示例,展示了如何使用mediastreamtrack duration API來獲取MediaStreamTrack的持續時間:
<script>
navigator.mediaDevices.getUserMedia({ audio: true }).then(function(stream) {
const track = stream.getAudioTracks()[0];
console.log('持續時間:', track.duration);
track.addEventListener('ended', function () {
console.log('實際持續時間:', track.duration);
});
}).catch(function(err) {
console.log('獲取音頻流失敗:', err);
});
</script>
上述代碼使用getUserMedia API獲取一個音頻流,並使用duration屬性獲取MediaStreamTrack的持續時間。但是,在「 ended 」事件觸發之前,取得的數值可能是NaN,因為該值依賴於數據流中的實際數據。當「 ended 」事件觸發時,將輸出MediaStreamTrack的實際持續時間。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247996.html
微信掃一掃
支付寶掃一掃