loadAudioInfo=(audioId)=>{
let _this = this
const url = api.getAudioPath(audioId)
const request = new window.XMLHttpRequest()
request.open('GET', url, true)
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
request.setRequestHeader("APPID", "huizhan")
request.setRequestHeader("X-Account-Info", JSON.stringify( {userId: Application.userInfo.userId} ))
request.responseType = 'arraybuffer'
request.onreadystatechange = function (res) {
if (request.readyState == 4 && request.status == 200) {
_this.setState({
conferenceAudioWav: 'data:audio/wavbase64,' + Buffer.from(request.response).toString('base64'),
})
}
}
request.onerror = (err) => {
}
request.send()
}
-----------------------------2、正常使用audio标签 src赋值------------------------------
实现原理的话,主要是以下三点,
利用webrtc的getUserMedia方法获取设备音频输入,使用audioprocess得到音频流(pcm流,范围-1到1)。
转码,利用前端中的ArrayBuffer等二进制操作按采样位数处理流信息。
使用decodeAudioData转码arraybuffer到audioBuffer并播放(小文件,大文件使用audio)。