新闻中心

EEPW首页 > 汽车电子 > 设计应用 > 蓝牙车载音频流播放器的设计与实现

蓝牙车载音频流播放器的设计与实现

作者: 时间:2010-06-30 来源:网络 收藏

音乐状态(包括期望状态和实际状态)包括2个稳定状态(播放状态PLAY、暂停状态PAUSE)和2个中间状态(快进状态FF和快退状态FB)。对于PLAY和PAUSE状态,由于手机的播放键和暂停键是一个乒乓按键,即暂停状态下按下会启动播放,播放状态下按下会引起暂停,所以如果实际状态和期望状态一致时便不发送AVRCP命令,而且对于用户在手机上进行操作引起的实际状态和期望状态的不一致,也不发送任何AVRCP命令,否则会造成本该暂停却播放或本该播放却暂停的错误。对于快进快退,首先在快进快退中不要判断当前音乐是暂停还是播放,其次因为部分手机在快进快退结束后会先把音乐暂停一下再播放,所以不要在快进快退刚结束时便调用播放控制状态机,需要延迟一段时间处理。
4 音频流状态处理及信息解析
流媒体信息包括编解码格式及采样率设置、音乐播放状态、当前播放时间、TagID3信息等。首先传输的数据为编码后的音乐文件,SRC端实现编码,SINK端实现解码,所以首先要按照编码格式选择相应的解码器,其次还需要在本地音频输出端设置同样的采样频率。
播放状态对应于播放模式,包括播放、暂停、快进、快退4种状态,其中播放和暂停是对播放控制状态机非常关键的状态。对无法把播放和暂停状态发送上来的手机,需要设计一种方法来判断当前音乐处于哪种状态。音乐在播放状态时,流媒体音乐数据通过蓝牙从SRC端传输到SNK端,SNK端将该蓝牙数据传输到BC5的DSP中进行解码,所以可以通过判断DSP的解码器缓存中是否有数据来判断当前音乐状态,如果没有数据则音乐处于暂停状态。
当前播放时间、TagID3信息需要AVRCP V1.3的支持,AVRCP V1.3定义了一种独特格式的TagID3信息,下面以迈克杰克逊的Billie Jean这首音乐为实例分析AVRCP中的TagID3格式,其Tag ID3数据为十六进制形式的“0 0 0 1 0 6a 0 b 42 69 6c 6c 69 65 20 4a 65 61 6e 0 0 0 2 0 6a 0 f 4d 69 63 68 61 65 6c 20 4a 61 63 6b 73 6f 6e 0 0 0 3 0 6a 0 0 0 0 0 4 0 6a 0 1 32”。TagID3包括标题名、演唱者、专辑名称、音轨(第几首)、总音轨(音乐总数)5个属性,每条属性采用“4个字节的属性ID+2个字节的字符集信息+2个字节的属性长度+属性数据”的格式,其中属性ID“0 0 0 1”表示标题名,“0 0 0 2”表示演唱者,“0 0 0 3”表示专辑名称,“0 0 0 4”表示音轨,“0 0 0 5”表示总音轨,常用字符集为avrcp_char_set_ascii=0 3,avrcp_char_set_utf_8=0 6a。按照上述格式,该音乐标题名为长度为11(0 b)的“42 69 6c 6c 69 65 20 4a 65 61 6e”,即Billie Jean,演唱者为长度为15(0 f)的“4d 69 63 68 61 65 6c 20 4a 61 63 6b 73 6f 6e”,即Michael Jachson,没有专辑名称和总音轨(长度为0),音轨为0x32,即第2首歌。
根据该格式设计属性提取器如下:
While(mTagID3_length)
{
for (k=0;k4;k++)
{ av_streaming[n].attri[k]=TagID3[m];
m++;
}
if((av_streaming[n].attri[0]!=0)‖(av_streaming[n].attri[1]!=0)‖(av_streaming[n].attri[2]!=0)‖(av_streaming[n].attri[3]>5))
{ errorflag=1;
}
if(errorflag==0)
{ for(k=0;k2;k++)
{ av_streaming[n].charset[k]=TagID3[m];
m++;
}
for (k=0;k2;k++)
{ av_streaming[n].datalength[k]=TagID3[m];
m++;
}
av_streaming[n].datalen=av_streaming[n].datalength[1]|(av_streaming[n].datalength[0]8);
for (k=0;kav_streaming[n].datalen;k++)
{ av_streaming[n].tagid3data[k]=TagID3[m];
m++;
}
av_streaming[n].tagid3data[av_streaming[n].datalen]=‘’;
n++;
}
else
{ errorflag=0;
}
}
经上述代码的解析,属性ID在av_streaming[n].attri中,属性数据在长度为av_streaming[n].datalen的数据av_streaming[n].tagid3data中。
本文设计了一款蓝牙。该播放器运行稳定可靠,兼容性好,大大方便了用户的使用,有很好的实用价值。
参考文献
[1] 苏民生.蓝牙A2DP技术与音频应用测试[J].电子设计应用,2008(11):92-94.
[2] 胡沛茹,芮亚楠.一种蓝牙音频流传输方案的设计与实现[J].现代电子技术,2006(3):31-33.
[3] BluetoothSIG. AUDIO/VIDEO REMOTE CONTROL PROFILE Revision 1.3. 2007-04-16.

本文引用地址:https://www.eepw.com.cn/article/197662.htm

上一页 1 2 下一页

评论


技术专区

关闭