一种支持多种播放格式物联网音频播放器的制作方法
1.本发明涉及物联网音频播放设备领域,尤其涉及一种支持多种播放格式物联网音频播放器。
背景技术:
2.根据市场调研和客户需求,目前物联网领域使用的音频播放器一般支持mp3格式、wav格式和amr格式等音频格式,这些音频数据以文件方式或流媒体方式被读取及播放。但有些客户还需要额外实现tts格式,single tone格式和dtmf格式的音频播放,这些音频数据的读取及音频的编解码和mp3等音频不同,需要单独的音频处理程序。在物联网领域使用时,各段音频数据的时间长度很短,一般包含一个音或几个音,将多种格式的音频数据进行混合后播放,常会因音频解码器的参数不同,在音频解码器的切换时出现卡顿、音频丢失,甚至无法播放等问题。
技术实现要素:
3.有鉴于现有技术的上述缺陷,本发明的目的是提供一种支持多种播放格式物联网音频播放器,除了支持传统文件型或流媒体型的音频数据外,还能支持tts格式,single tone格式和dtmf格式等非文件型或流媒体型的音频数据,并解决多格式音频混合播放的卡顿、音频丢失、无法播放等问题。
4.为实现上述目的,本发明提供了一种支持多种播放格式物联网音频播放器,基于嵌入式程序,包括播放队列管理器、音频格式检查器、通用音频解码器、专用音频解码器、pcm格式转换器和pcm数据缓存管理器;
5.所述播放队列管理器用于管理一个播放队列,对输入的音频节点执行先入先出管理,所述音频节点为采用某一音频格式封装的音频数据;
6.所述音频格式检查器用于识别各音频节点的音频格式并进行转发,将各音频节点发送到对应的音频解码器进行解码,输出pcm数据;
7.所述通用音频解码器至少包括mp3解码器、mav解码器、amr解码器中的一种;
8.所述专用音频解码器至少包括tts解码器、single_tone解码器、dtmf解码器中的一种,所述专用音频解码器输出的pcm数据,具有相同的参数:单通道和采样频率;
9.所述pcm格式转换器和所述通用音频解码器连接,用于将通用音频解码器输出的音频数据转换成与所述专用音频解码器的输出参数一致的pcm数据;
10.所述pcm数据缓存管理器用于管理一个pcm数据缓存,对存储于所述pcm数据缓存的音频数据,执行先进先出管理,实现音频数据的拼接和播放。
11.进一步的,所述mp3解码器输入的音频节点的数据类型包括文件型mp3音频格式和流媒体型mp3音频格式;所述amr解码器输入的音频节点的数据类型包括文件型amr音频格式和流媒体型amr音频格式。
12.进一步的,所述播放队列的控制参数,包括节点计数、音频格式、文本格式、回调参
数和节点内容。
13.进一步的,所述播放队列为动态内存申请的双链表队列。
14.进一步的,所述tts解码器输入的音频节点的数据类型为tts音频格式;所述tts音频格式的参数包括编码类型、文本内容和文本长度。
15.进一步的,所述single_tone解码器输入的音频节点的数据类型为single_tone音频格式,所述single_tone音频格式的参数为频率和持续时间。
16.进一步的,所述dtmf解码器输入的音频节点的数据类型为dtmf音频格式,所述dtmf音频格式的参数包括dtmf字符信息、持续时间和两个dtmf音之间的播放时间间隔。
17.进一步的,所述dtmf字符信息包括'0'-'9','a'-'d','*','#'。
18.进一步的,所述音频节点的播放时长小于等于2秒。
19.进一步的,进入pcm缓存的pcm数据的采样频率均为16000hz。
20.本发明实现了如下技术效果:
21.本发明的音频播放器,支持文件方式或流媒体方式的音频数据(mp3格式、wav格式和amr格式等音频格式的音频数据)的读取及播放,可支持对tts格式,single tone格式和dtmf格式等格式音频数据的播放,本音频播放器通过pcm数据缓存输出统一格式的pcm数据,从而实现物联网应用下的多格式混合音频的无卡顿播放。
附图说明
22.图1是本发明的音频播放器的功能框图;
23.图2是本发明的音频播放器的调用框图。
具体实施方式
24.为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
25.现结合附图和具体实施方式对本发明进一步说明。
26.pcm音频格式
27.pcm(pulse codemodulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。
28.描述pcm数据的6个参数包括:
29.1.sample rate:采样频率。8khz(电话)、44.1khz(cd)、48khz(dvd)。
30.2.sample size:量化位数。通常该值为16-bit。
31.3.number of channels:通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其他不太常用的类型。
32.4.sign:表示样本数据是否有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128~127,无符号是0~255。
33.5.byte ordering:字节序。字节序是little-endian还是big-endian。通常均为
little-endian。
34.6.integer or floating point:整形或浮点型。大多数格式的pcm样本数据使用整形表示,而在一些对精度要求高的应用方面,使用浮点类型表示pcm样本数据。
35.本发明提供一种多种播放格式物联网音频播放器,该音频播放器是基于软件解码的方式,支持文件方式或流媒体方式的音频数据(mp3格式、wav格式和amr格式等音频格式的音频数据)的读取及播放,还支持tts格式,single tone格式和dtmf格式等格式的音频数据的读取及播放。这些音频数据将统一转换成pcm数据发送给硬件的音频播放设备进行播放。
36.实施例1
37.如图1所示,本发明给出了一种支持多种播放格式物联网音频播放器,基于嵌入式程序,包括播放队列管理器10、音频格式检查器20、通用音频解码器30、专用音频解码器40和pcm格式转换器50和pcm数据缓存管理器60等功能模块。说明如下:
38.本音频播放器的输入为一系列的音频节点,所述音频节点为采用某一音频格式封装的一段音频数据。
39.播放队列管理器10用于管理一个播放队列101,对输入的音频节点执行先入先出管理。
40.音频格式检查器20用于根据音频格式对各音频节点进行转发,将各音频节点发送到对应的音频解码器进行解码,输出pcm数据。
41.通用音频解码器30包括mp3解码器、mav解码器、amr解码器等,这些音频格式包含了特定的采样频率,这些解码器会依照各音频节点的音频编码信息解码出对应的单通道或多通道的具有不同采样频率的pcm数据。
42.专用音频解码器40包含tts解码器、single_tone解码器和dtmf解码器等解码器,这些音频格式的编码信息不含有采样频率数据,需要在解码时自行设定。因此,可以将这些解码器的输出设定为统一的pcm格式。
43.优选的,根据物联网的应用需要,每个音频节点的播放时长一般设定为小于等于2秒。由于每个音频节点的pcm数据是完整地缓存于pcm数据缓存中的,通过控制音频节点的最大播放时长,可有效控制pcm数据缓存的大小。
44.根据应用环境需求,该pcm音频数据的参数做如下设定:通道个数为单声道,采样频率统一为16000hz。
45.pcm格式转换器50和通用音频解码器30连接,用于将通用音频解码器30解出的具有不同采样频率的多声道的pcm数据,转换成单声道的固定采样频率的pcm数据。通过该方式可以解决需要拼接播放的mp3文件很短,且mp3文件的采样频率和通道数不一致,导致播放起来不连续的问题。
46.pcm数据缓存管理器60用于管理一个pcm数据缓存601,通过pcm数据缓存601,对各音频解码器输出的pcm数据执行先进先出管理,实现音频数据的拼接和播放。由于进入pcm数据缓存601的音频数据均已解码,且其位置及长度均已对准,从而实现物联网应用下的多格式混合音频的无卡顿播放。
47.为进一步说明各功能模块,给出了音频播放器的各功能模块的部分源码,对音频播放器的各功能模块做进一步说明。
48.1、类型定义
49.(1)音频格式
[0050][0051][0052]
在本实施例中,以枚举方式定义本音频播放器支持的所有音频格式。
[0053]
(2)定义文本格式
[0054][0055]
在本实施例中,定义文本格式支持ucs2和gbk两种文字符号编码表,通过文字符号编码表可根据编码到对应的文本信息。
[0056]
(3)定义节点信息
[0057][0058]
在本实施例中,定义节点信息包括数据长度和数据指针。
[0059]
(4)定义播放信息
[0060][0061]
在play_info_t中,包含了节点计数node_cnt(即序号)、音频格式info_type、文本格式text_type、回调值cb,节点信息node[node_cnt_max]。
[0062]
(5)定义音频解码器的类型:
[0063][0064]
(6)定义音频解码器的关键参数:
[0065][0066]
其中,sampling_rate表示采样频率;channels表示音频的通道数。
[0067]
(7)定义解码器
[0068][0069]
其中,codec表示codec指针;outdata表述输出的pcm数据;outlen表示输出的pcm数据的长度;indata表示输入的原始数据;inlen表示输入的原始数据的长度。
[0070]
2、函数定义:
[0071]
(1)播放音频列表:int audio_play_info(play_info_t*p_play_info);
[0072]
(2)mp3、mav、amr解码器调用:
[0073]
在本实施例中,mp3、mav、amr音频数据可进一步采用文件格式或流媒体格式,并通过如下函数进行调用。
[0074]
播放音频文件(mp3、wav、amr):
[0075]
int audio_play_file(char*filename);
[0076]
其中filename为文件名。
[0077]
播放音频流(mp3、amr):
[0078]
int audio_play_stream(audio_stream_type stream_type,const uint8*stream_data,uint32 len);
[0079]
其中,stream_type表示流媒体类型,stream_data表示流数据,len表示流字节数。
[0080]
(3)在本实施例中,tts音频解码器的函数定义为:
[0081]
int audio_play_text(play_text_e codetype,uint8*text,uint32 len,audioplaycallback cb);
[0082]
其中,codetype为编码类型,text为文本内容(codetype编码)len为文本长度;cb为回调函数,当cb不为null,播放结束通知调用者;当cb为null,播放结束不通知调用者。本实施例给出函数接口和调用参数,具体的tts功能实现可调用现有的tts功能模块,在此不做展开。
[0083]
(4)在本实施例中,给出了mp3解码器输出的音频数据到统一pcm格式数据的数据转换。该数据转换通过mp3_transform函数实现,将不同采样频率(如8000hz,16000hz,32000hz,44100hz等)转化成相同的采样频率16000hz、单通道的pcm数据。表示为:
[0084]
int mp3_transform(uint16 num_channels,uint32 sample_rate,int16*indata,int inlen,int16*outdata,int*outlen);
[0085]
其中,num_channels为mp3解码出来的通道数;sample_rate为mp3解码出来的当前帧的采样频率;indata为mp3解码出来pcm数据的首地址;inlen为mp3解码出来pcm数据长度;outdata为mp3转换成16000单通道pcm数据的首地址;outlen为mp3转换成16000单通道pcm数据长度。
[0086]
amr解码器输出的音频数据可以通过类似的函数转换成采样频率为16000hz、单通道的pcm数据。
[0087]
(5)在本实施例中,single_tone音频解码器的函数定义为:
[0088]
int audio_single_tone_play(uint32 freq,uint32 duration_ms);
[0089]
其中,freq为频率值,单位为hz,duration_ms表示持续时间,单位为ms。
[0090]
(6)在本实施例中,dtmf解码器的函数定义为:
[0091]
int audio_dtmf_play(const char*p_dtmf_str,uint32 duration_ms,uint32interval_ms);
[0092]
其中,p_dtmf_str表示当前要播放的dtmf字符信息,支持的字符范围包括'0'-'9','a'-'d','*','#';duration_ms表示持续时间,单位为ms;interval_ms表示两个dtmf音之间的播放时间间隔(ms)。
[0093]
audio_dtmf_play()函数和audio_dtmf_play()函数,可根据相应的参数,将single_tone格式和dtmf格式的音频数据转换为pcm数据。
[0094]
优选的,本音频播放器主要用于嵌入式应用,所述播放队列为动态内存申请的双链表队列,各音频节点在播放后从播放队列中删除节点,并释放所申请的资源。
[0095]
为实现音频播放,本音频播放器还包括如下功能函数:
[0096]
播放器状态获取函数:pcm_play_sta_e audio_play_state(void);
[0097]
音量控制函数:int audio_play_volumeget(uint32*p_volume);
[0098]
如图2所示,音频播放器处理音频数据的方式如下:
[0099]
1、用户调用audioplay接口,将不同输入的音频节点链接按调用顺序存放到播放队列中;
[0100]
2、依照音频节点在播放队列的顺序,检查音频节点音频格式,调用相应的解码器(mp3解码器、wav解码器、amr解码器、tts解码器、single_tone解码器、dtmf解码器等)进行
解码;优选的,对解码后的音频数据进行数据转换处理,形成参数一致的pcm数据;
[0101]
3、将统一格式的pcm数据放到pcm数据缓存中,依先入先出的顺序发送给硬件的音频播放设备进行播放。从而实现无卡顿的连续播放。
[0102]
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
技术特征:
1.一种支持多种播放格式物联网音频播放器,其特征在于,基于嵌入式程序,包括播放队列管理器、音频格式检查器、通用音频解码器、专用音频解码器、pcm格式转换器和pcm数据缓存管理器;所述播放队列管理器用于管理一个播放队列,对输入的音频节点执行先入先出管理,所述音频节点为采用某一音频格式封装的音频数据;所述音频格式检查器用于识别各音频节点的音频格式并进行转发,将各音频节点发送到对应的音频解码器进行解码,输出pcm数据;所述通用音频解码器至少包括mp3解码器、mav解码器、amr解码器中的一种;所述专用音频解码器至少包括tts解码器、single_tone解码器、dtmf解码器中的一种,所述专用音频解码器输出的pcm数据,具有相同的参数:单通道和采样频率;所述pcm格式转换器和所述通用音频解码器连接,用于将通用音频解码器输出的音频数据转换成与所述专用音频解码器的输出参数一致的pcm数据;所述pcm数据缓存管理器用于管理一个pcm数据缓存,对存储于所述pcm数据缓存的音频数据,执行先进先出管理,实现音频数据的拼接和播放。2.如权利要求1所述的音频播放器,其特征在于,所述mp3解码器输入的音频节点的数据类型包括文件型mp3音频格式和流媒体型mp3音频格式;所述amr解码器输入的音频节点的数据类型包括文件型amr音频格式和流媒体型amr音频格式。3.如权利要求1所述的音频播放器,其特征在于,所述播放队列的控制参数,包括节点计数、音频格式、文本格式、回调参数和节点内容。4.如权利要求1所述的音频播放器,其特征在于,所述播放队列为动态内存申请的双链表队列。5.如权利要求1所述的音频播放器,其特征在于,所述tts解码器输入的音频节点的数据类型为tts音频格式;所述tts音频格式的参数包括编码类型、文本内容和文本长度。6.如权利要求1所述的音频播放器,其特征在于,所述single_tone解码器输入的音频节点的数据类型为single_tone音频格式,所述single_tone音频格式的参数为频率和持续时间。7.如权利要求1所述的音频播放器,其特征在于,所述dtmf解码器输入的音频节点的数据类型为dtmf音频格式,所述dtmf音频格式的参数包括dtmf字符信息、持续时间和两个dtmf音之间的播放时间间隔。8.如权利要求7所述的音频播放器,其特征在于,所述dtmf字符信息包括'0'-'9','a'-'d','*','#'。9.如权利要求1所述的音频播放器,其特征在于,所述音频节点的播放时长小于等于2秒。10.如权利要求1所述的音频播放器,其特征在于,进入pcm缓存的pcm数据的采样频率均为16000hz。
技术总结
本发明公开了一种支持多种播放格式物联网音频播放器,基于嵌入式程序,包括播放队列管理器、音频格式检查器、通用音频解码器、专用音频解码器、PCM格式转换器和PCM数据缓存管理器;播放队列管理器管理一个播放队列,对输入的音频节点执行先入先出管理;音频格式检查器用于识别各音频节点的音频格式并进行转发,将各音频节点发送到对应的音频解码器进行解码,输出PCM数据;PCM格式转换器和通用音频解码器连接,将各通用音频解码器输出的PCM数据转换成与专用音频解码器的输出参数一致的PCM数据;PCM数据缓存管理器管理一个PCM数据缓存,对存储于PCM数据缓存的音频数据,执行先进先出管理,实现物联网应用下的多格式混合音频的无卡顿播放。无卡顿播放。无卡顿播放。