当前位置: 首页 > Web前端 > HTML5

重磅重构开源让H5标签替代C++实时解码播放speex压缩协议的音频文件【IM的福音】

时间:2023-04-05 15:38:21 HTML5

这么牛逼的轮子你必须拥有美图真楼Speex是一套免费的开源主要针对语音,一种无专利的音频压缩格式。这个轮子适合超大项目,因为库本身就很大,当然IM项目本身就没有小项目。Speex(音标[spi:ks])是一套开源、免费、无专利的语音压缩格式。Speex项目旨在通过免费替代昂贵的专有语音编解码器来降低语音应用程序的进入门槛。此外,Speex非常适合Internet应用程序并提供大多数其他编解码器所没有的有用功能。最后,Speex是GNU项目的一部分,可以在修改后的BSD许可证下使用。编码过程使用SpeexAPI函数对音频数据进行压缩编码要经过以下步骤:定义一个SpeexBits类型变量bits和一个Speex编码器内存指针变量enc。调用speex_bits_init(&bits)函数初始化位。调用enc=speex_encoder_init(&speex_nb_mode)函数初始化enc。其中speex_nb_mode是SpeexMode类型的变量,表示窄带模式。还有宽带模式的speex_wb_mode,超宽带模式的speex_uwb_mode。调用函数intspeex_encoder_ctl(void*state,intrequest,void*ptr)设置编码器的参数,其中参数state表示编码器的内存指针;参数请求表示要定义的参数类型,如SPEEX_GET_FRAME_SIZE表示设置帧大小,SPEEX_SET_QUALITY表示编码质量等级;参数ptr表示要设置的值。初始化后,每一帧声音的处理如下:调用函数speex_bits_reset(&bits)重置位,然后调用函数speex_encode(enc_state,input_frame,&bits)进行编码,将编码后的Speex格式数据帧保存在参数中位。编码完成后,调用函数speex_bits_destroy(&bits)、speex_encoder_destroy(enc_state)销毁SpeexBits和encoder。解码过程对编码后的Speex格式音频数据帧进行解码会经过以下步骤:定义一个SpeexBits类型的变量bits和一个Speex解码器的内存指针变量dec。调用speex_bits_init(&bits)函数初始化位。调用dec=speex_decoder_init(&speex_nb_mode)函数初始化dec。调用函数speex_decoder_ctl(void*state,intrequest,void*ptr)设置解码器的参数。调用函数speex_decode(void*state,SpeexBits*bits,float*out)对参数bits中的Speex格式音频数据帧进行解码,并将解码后的音频数据帧存储在参数out中。调用函数speex_bits_destroy(&bits)、speex_decoder_destroy(void*state)销毁SpeexBits和解码器。关键是它是一个即时通信产品。对于微信这样的移动终端,可能会收到speex协议压缩后的音频文件。当然文件后缀是wav还是ogg都无所谓H5的audio标签可以播放音频格式和浏览器支持目前