一、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-hant/n/247996.html