为什么CPU到蓝牙的音频传输都是用的PCM接口呢

一般手机cpu到蓝牙的通话实时音频传输都使用pcm,MP3之类的音频走的是urat/usb之类的其他接口。
真正原因我也不能确定,不过有几个情况可能是原因之一。
1,pcm和iis的区别在于,pcm一般是固定8k的采样率的单声道音频,最早似乎和固定电话的编码有直接关系,之后所有的话音编码几乎都是在pcm编码基础上再次编码得到的。而iis则多了一个专门的信号线,采样率也可以配置到较高的频率,如44k。
1,手机通话时候的编码一般都会被解码成8k采样率的pcm码,高了也没有用。因为本来手机通话的话音频段就是300~3400Hz而已,编码也是按8k采样的。某些手机平台并没有iis接口,相对来说基本上都会有pcm接口。

3,从蓝牙角度讲,蓝牙在制定协议的时候就特意为通话需求制定了一个协议层,专门定义了一种包结构(sco)用于通话,有很好的实时性。而通过uart传输的包一般为alc,用分组传输的方式。两种包的编解使用的软硬件都有些区别。sco包支持的基础码率也是8k的pcm.所以一般蓝牙芯片都会有一个pcm接口。

更多关于蓝牙音频的问题,可以看这里

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: var audio = new Audio(); audio.src = "data:audio/x-wav;base64," + btoa(String.fromCharCode.apply(null, new Uint8Array(16*1024))); audio.type = "audio/x-wav;codecs=audio/pcm;bit=16;rate=16000"; audio.send(); ### 回答2: 要使用JavaScript将16k 16bit单声道PCM格式的音频传输到后端,可以使用Web Audio API和XMLHttpRequest对象来实现。 首先,需要从用户设备上获取音频输入,可以利用Web Audio API的 getUserMedia() 方法。下面是一个获取音频输入设备的示例代码: ```javascript navigator.mediaDevices.getUserMedia({ audio: true }) .then(function(stream) { // 获取到音频流后的处理逻辑 }) .catch(function(error) { console.log("获取音频输入设备失败:" + error); }); ``` 获取到音频流之后,可以使用 Web Audio API 的 AudioContext 对象将音频数据处理成PCM格式。 ```javascript var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); var audioSource = audioCtx.createMediaStreamSource(stream); var bufferSize = 4096; var scriptNode = audioCtx.createScriptProcessor(bufferSize, 1, 1); audioSource.connect(scriptNode); scriptNode.connect(audioCtx.destination); // 每次处理一段音频数据 scriptNode.onaudioprocess = function(e) { var inputData = e.inputBuffer.getChannelData(0); // 将inputData传输到后端,可以通过XMLHttpRequest对象发送数据 }; ``` 在scriptNode.onaudioprocess事件回调函数中,可以将获取到的音频数据(inputData)传输到后端。 可以使用XMLHttpRequest对象将音频数据发送到后端。以下是一个简单的示例: ```javascript var xhr = new XMLHttpRequest(); xhr.open('POST', '/your/backend/api', true); xhr.setRequestHeader("Content-Type", "audio/wav"); xhr.onload = function(e) { if (this.readyState === 4 && this.status === 200) { // 上传成功后的处理逻辑 } else { console.error("音频上传失败:" + xhr.status); } }; xhr.send(inputData); ``` 需要将 "/your/backend/api" 替换为实际的后端API地址,并根据后端API的要求设置合适的Content-Type和请求头。 通过以上的代码,就可以将16k 16bit单声道PCM格式的音频传输到后端。然后后端可以对接收到的音频数据进行处理和存储等操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值