蓝牙SBC编码里基本参数

在A2DP协议中,SBC(Subband Coding)是一个常见的音频编码格式,用于蓝牙音频传输。蓝牙协议规定在A2DP的传输中source和sink都必须支持SBC的编解码格式。这些参数配置的目的是根据应用需求和硬件能力来调整SBC编码的音频质量和效率。以下是这些参数的详细解释:

1. 采样频率(Sampling Frequency)

app_cfg_const.sbc_sampling_frequency = 
BT_A2DP_SBC_SAMPLING_FREQUENCY_48KHZ | 
BT_A2DP_SBC_SAMPLING_FREQUENCY_44_1KHZ | 
BT_A2DP_SBC_SAMPLING_FREQUENCY_32KHZ | 
BT_A2DP_SBC_SAMPLING_FREQUENCY_16KHZ;

SBC编码支持的采样频率决定了音频数据的频率范围。采样频率越高,音频质量通常越好,但数据量也会增大。常见的采样频率有:

  • 48kHz:这种采样率常用于CD音质的音频传输,通常用于视频和音频设备。
  • 44.1kHz:这是CD音质音频的标准采样频率。
  • 32kHz:这种采样率通常用于低比特率的音频传输,能降低带宽需求。
  • 16kHz:通常用于语音传输,特别是在低比特率和低延迟的环境中,如蓝牙耳机和电话。

在蓝牙规范中的可选为:

PositionSampling
Frequency (Hz)
Support
in SRC
Support
in SNK
Octet0; b716000OO
Octet0; b632000OO
Octet0; b544100C1M
Octet0; b448000C1M
O表示可选;M表示必选;C1表示至少支持一个

2. 通道模式(Channel Mode)

app_cfg_const.sbc_channel_mode = 
BT_A2DP_SBC_CHANNEL_MODE_MONO | 
BT_A2DP_SBC_CHANNEL_MODE_DUAL_CHANNEL | 
BT_A2DP_SBC_CHANNEL_MODE_STEREO | 
BT_A2DP_SBC_CHANNEL_MODE_JOINT_STEREO;

通道模式决定了音频流中声道的数量。SBC支持多种通道模式,具体包括:

  • MONO:单声道,只有一个声道,所有音频信号都通过一个通道输出。适用于低质量音频或节省带宽的应用。
  • DUAL_CHANNEL:双声道,每个通道传输不同的音频信号。适用于立体声音频(但每个通道的质量会降低)。
  • STEREO:立体声模式,通常用于高质量音频。每个通道传输不同的音频内容,确保更丰富的音频体验。
  • JOINT_STEREO:联合立体声,一种压缩方式,利用两个声道之间的相似性来减少数据量,同时保留立体声效果。它适合在较低比特率下使用,能提供较高的音频质量。

 在蓝牙规范中的可选为:

PositionChannel ModeSupport
in SRC
Support
in SNK
Octet0; b3MOMOMM
Octet0; b2DUAL CHANNELC1M
Octet0; b1STEREOC1M
Octet0; b0JOINT STEREOC1M
O表示可选;M表示必选;C1表示至少支持一个

3. 块长度(Block Length)

app_cfg_const.sbc_block_length = 
BT_A2DP_SBC_BLOCK_LENGTH_4 | 
BT_A2DP_SBC_BLOCK_LENGTH_8 | 
BT_A2DP_SBC_BLOCK_LENGTH_12 | 
BT_A2DP_SBC_BLOCK_LENGTH_16;

块长度(Block Length)定义了SBC编码中每个音频块的大小。块越大,音频质量通常越好,但带宽和延迟也会增加。SBC支持的块长度有:

  • 4:每个块包含4个子带。
  • 8:每个块包含8个子带。
  • 12:每个块包含12个子带。
  • 16:每个块包含16个子带。

较大的块长度会在编码过程中提供更多的音频信息,因此可以提高音频质量,特别是在高比特率和高音质要求的应用中。

在蓝牙规范中的可选为:

PositionBlock lengthSupport
in SRC
Support
in SNK
Octet0; b74MM
Octet0; b68MM
Octet0; b512MM
Octet0; b416MM
O表示可选;M表示必选;C1表示至少支持一个

4. 子带数(Subbands)

app_cfg_const.sbc_subbands = BT_A2DP_SBC_SUBBANDS_4 | BT_A2DP_SBC_SUBBANDS_8;

SBC将音频频谱分成多个子带(subbands),每个子带处理一部分频率范围。子带数量的选择影响音频的频率响应和编码效率。

  • 4子带:将音频频谱分成4个子带,适用于低比特率的应用,能够减小编码和解码的复杂度。
  • 8子带:将音频频谱分成8个子带,适用于更高的音频质量和高比特率的应用,能提供更丰富的音频细节。

更多的子带可以带来更好的频率分辨率,从而提高音频质量。

在蓝牙规范中的可选为:

PositionNumber of
Subbands
Support
in SRC
Support
in SNK
Octet0; b34OM
Octet0; b28MM
O表示可选;M表示必选;C1表示至少支持一个

5. 分配方法(Allocation Method)

app_cfg_const.sbc_allocation_method = 
BT_A2DP_SBC_ALLOCATION_METHOD_SNR | 
BT_A2DP_SBC_ALLOCATION_METHOD_LOUDNESS;

分配方法决定了如何在不同的频率子带上分配比特数,从而影响音频的质量和带宽效率。SBC支持两种主要的分配方法:

  • SNR(Signal-to-Noise Ratio,信噪比):根据每个子带的信噪比来分配比特率。信噪比较高的子带分配更多的比特,从而保留更多的音频细节。
  • LOUDNESS(响度):根据子带的响度来分配比特,通常会优先为响度较大的频段分配更多比特。

不同的分配方法影响编码器在音频信号中的细节保留,SNR方法通常用于高质量音频,而LOUDNESS方法适合于语音或其他频率范围比较窄的应用。

在蓝牙规范中的可选为:

PositionAllocation methodSupport
in SRC
Support
in SNK
Octet0; b1SNROM
Octet0; b0LoudnessMM
O表示可选;M表示必选;C1表示至少支持一个

6. 最小和最大比特池(Min and Max Bitpool)

app_cfg_const.sbc_min_bitpool = 2; 
app_cfg_const.sbc_max_bitpool = 250;

比特池(Bitpool)决定了SBC编码的压缩程度和音频质量的平衡。较小的比特池值会导致较低的音频质量,但也能节省带宽;而较大的比特池值可以提供更好的音频质量,但会增加带宽需求。

  • 最小比特池(Min Bitpool):最低的比特池值,通常用于低比特率和低音质的应用(如语音)。
  • 最大比特池(Max Bitpool):最高的比特池值,适用于高音质要求的应用,如音乐流传输。

在蓝牙规范中推荐的比特池大小:

PositionMiddle QualityHigh Quality
MomoJoint StereoMomoJoint Stereo
Sampling frequency(kHz)44.14844.14844.14844.148
Bitpool value1918353331295351
Resulting frame length(bytes)464483797066119115
Resulting bit rate(kb/s)127132229237193198328345
*Other settings: Block length = 16, Allocation method = Loudness, Subbands = 8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值