php speex,开源语音格式speex教程
本文由社区会员cxjwin分享
这两天在折腾语音的东西,实现类似微信上对讲机的功能,做了两个Demo,一种使用lib-amr库用amr格式实现的,这个网上有现成的教程,所以还是比较好实现的。另一个是用的speex库,这个提的人很多,但是出教程的不多,恨透那个爱图腾的教程了,很多不明所以的地方,让我们这些新手很困惑呀,网上晃了3天终于可以搞出个像样的Demo了。Demo中我将一个录好的.caf格式的PCM音频 编码成speex格式 然后将speex格式的再转回PCM。当然Demo只是实现了音频的编码解码,并没有增加过多的功能。
本人测试了下,60秒的录音(8khz,单声道),转成最小格式的amr大小为39k和微信一分钟录音文件的大小差不多,speex格式最小18k但是比较模糊,可以接受的大小是30k,所以还是会比amr格式的小点,另外speex库可以对声音进行比如降噪,增益,静音判定等处理。但是考虑到Android支持amr格式的音频,wp也支持,所以最后还是选了转成amr格式的方案,可惜apple现在已经不支持amr了,所以才需要转码,下面我就和大家一起一步一步做Demo。
编译静态库:
这个着实让我费解了一天,其实linux下的C/C++程序员搞这个应该很轻松,但是我的那些都还给老师了,按照网上的教程愣是折腾了很久。
首先下载你所需要的源文件,因为speex是依赖ogg库的,所以先下载ogg库,这里我一并打包上传了,大家也可以去官网上下载。
因为编译是在命令行模式下进行的,打开终端,首先进入ogg所在的文件夹,我们先编译ogg
补充下,我用的是xcode4.4.1,大家根据自己xcode命令也需要略微调整,4.2的编译教程网上有,这里我就不重复了。
在终端键入以下内容:
1.ogg-i386的库
./configure -prefix=/Users/你的电脑用户名/Desktop/speexLibrary/libogg-1.3.0/i386 -host=i386-apple-darwin -build=x86_64-apple-darwin11.3.0 CC="/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 -std=c99 -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/"
make
make install
make clean (一定要clean,不然后面编译的都是第一次的编译的内容)
2、ogg-armv6的库
./configure -prefix=/Users/你的电脑用户名/Desktop/speexLibrary/libogg-1.3.0/armv6 -host=armv6-apple-darwin -build=x86_64-apple-darwin11.3.0 CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 -std=c99 -arch armv6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/"
make
make install
make clean
3、ogg-armv7的库
./configure -prefix=/Users/你的电脑用户名/Desktop/speexLibrary/libogg-1.3.0/armv7 -host=armv7-apple-darwin -build=x86_64-apple-darwin11.3.0 CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 -std=c99 -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/"
make
make install
make clean
接着编译speex库:
1.speex-i386的库
./configure -prefix=/Users/你的电脑用户名/Desktop/speexLibrary/speex-1.2rc1/i386 -host=i386-apple-darwin -disable-shared -enable-static -disable-oggtest -disable-fixed-point -enable-float-api -build=x86_64-apple-darwin11.3.0 -with-ogg=/Users/你的电脑用户名/Desktop/speexLibrary/libogg-1.3.0/i386 CC="/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 -std=c99 -arch i386 -isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/"
make
make install
make clean
2.speex-armv6的库
./configure -prefix=/Users/你的电脑用户名/Desktop/speexLibrary/speex-1.2rc1/armv6 -host=armv6-apple-darwin -disable-shared -enable-static -disable-oggtest -enable-fixed-point -disable-float-api -build=x86_64-apple-darwin11.3.0 -with-ogg=/Users/你的电脑用户名/Desktop/speexLibrary/libogg-1.3.0/armv6 CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 -std=c99 -arch armv6 -isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/"
make
make install
make clean
3.speex-armv7的库
./configure -prefix=/Users/你的电脑用户名/Desktop/speexLibrary/speex-1.2rc1/armv7 -host=armv7-apple-darwin -disable-shared -enable-static -disable-oggtest -enable-fixed-point -disable-float-api -build=x86_64-apple-darwin11.3.0 -with-ogg=/Users/你的电脑用户名/Desktop/speexLibrary/libogg-1.3.0/armv7 CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 -std=c99 -arch armv7 -isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/"
make
make install
make clean
最后合并静态库,进入speexLibrary文件夹,终端键入:
lipo -create i386/lib/libogg.a armv6/lib/libogg.a armv7/lib/libogg.a -output libogg.a
lipo -create i386/lib/libspeex.a armv6/lib/libspeex.a armv7/lib/libspeex.a -output libspeex.a
lipo -create i386/lib/libspeexdsp.a armv6/lib/libspeexdsp.a armv7/lib/libspeexdsp.a -output libspeexdsp.a
好了,这里应该已经编译完成了。如果合并静态库不成功,那么请检查上述步骤(我当时就是忘了make clean,导致编译的都是i386的.a文件).你可以lipo -info xxx.a文件,后面会显示库内文件使用的平台信息,正常显示为i386,armv6,armv7那么就成功了。当然打包好的库我也一并上传了,方便大家下载。
打包好的speex库: _speex.zip (821 K)
下面开始我们的工程:
新建一个工程,导入我们的静态库,我是将包直接拖到工程里面的,记得设置静态库的查找路径,我当时就是忘了设置路径,结果就是各种找不到头文件。导入完以后就进入主题了。
为了方便我已经录好一个60秒的.caf文件,怎么录制的?此处省略一千字…
详细的Demo解释我就不说明了,大家看Demo,我这里讲一下步骤
1.我们需要从.caf文件中将文件头去掉得到纯的PCM数据
2.将纯的PCM数据编码成纯speex格式
3.给纯speex格式数据添加文件头
---------------分割一下-------------
4.解码speex格式数据(带文件头的)成纯PCM格式
5.添加wav格式文件头
6.将wav数据写入文件导出caf文件(导出的文件可以在模拟下该工程的tmp文件夹内找到,一个caf文件,点击可以播放出声音).
下面是我给出的Demo,请结合speex官方的用户手册对照,用户手册上有编码解码的C语言示例代码,一定要仔细研究。
我的Demo TEST_Speex_001.zip (1585 K) 希望对大家有帮助
php speex,开源语音格式speex教程相关推荐
- (原创)speex与wav格式音频文件的互相转换(二)
之前写过了如何将speex与wav格式的音频互相转换,如果没有看过的请看一下连接 http://www.cnblogs.com/dongweiq/p/4515186.html 虽然自己实现了相关的压缩 ...
- 关于SPEEX和语音的研究(转载的基础上加原创)
前言 项目需要,抛弃掉原有的音频,统一使用speex(虽然这个解决方案也比较老,speex项目已经停止,但是资料最全,能快速满足项目需求的speex最优) speex speex官网 自行了解spee ...
- (原创)speex与wav格式音频文件的互相转换
我们的司信项目又有了新的需求,就是要做会议室.然而需求却很纠结,要继续按照原来发语音消息那样的形式来实现这个会议的功能,还要实现语音播放的计时,暂停,语音的拼接,还要绘制频谱图等等. 如果是wav,m ...
- 小米开源语音模型 Kaldi-ONNX 转换工具,助力移动端部署!
作者 | 小米开源团队 责编 | 胡巍巍 近日,小米对外开源了Kaldi模型到ONNX模型的转换工具Kaldi-ONNX,有望进一步促进Kaldi生态与深度学习生态间的互通. 同时,配合移动端深度学习 ...
- kaldi语音识别实战网盘_小米开源语音模型 KaldiONNX 转换工具,助力移动端部署!...
作者 | 小米开源团队 责编 | 胡巍巍 近日,小米对外开源了Kaldi模型到ONNX模型的转换工具Kaldi-ONNX,有望进一步促进Kaldi生态与深度学习生态间的互通. 同时,配合移动端深度学习 ...
- 基于ROS2和科大讯飞的文字转语音TTS入门教程
基于ROS2和科大讯飞的语音转文字入门教程 基于ROS2和科大讯飞的文字转语音TTS入门教程 1.环境搭建 2.创建工程 3.编译和执行 基于ROS2和科大讯飞的文字转语音TTS入门教程 本文将展示, ...
- 磁盘格式怎么转换?Tuxera NTFS对磁盘进行不同格式转换教程
使用电脑的时候你注意过系统中的磁盘是哪种格式吗?一般目前常用的磁盘格式分为FAT32和NTFS两种.磁盘格式怎么转换呢?这里小编就来和大家分享Tuxera NTFS对磁盘进行不同格式转换教程,一起来看 ...
- 网页服务器转化app,无需第三方软件,网页在线转换视频格式使用教程
原标题:无需第三方软件,网页在线转换视频格式使用教程 之前我们和大家介绍过一款的网页小工具,其实这个网站还有更多好用的在线工具,而今天我们介绍的就是另外一款:在线视频格式转换,– 将视频文件转换为MP ...
- Premiere Pro 2022带来离线语音转文本教程
Premiere Pro 2022大版本更新,在去年的的10月份更新也带来了不少实用功能.今日小编就为大家带来 Premiere Pro 2022 离线语音转文本教程.感兴趣的小伙伴们欢迎收藏! Ad ...
- Premiere Pro 2022离线语音转文本教程
Premiere Pro 2022大版本更新,在去年的的10月份更新也带来了不少实用功能.今日小编就为大家带来 Premiere Pro 2022 离线语音转文本教程.感兴趣的小伙伴们欢迎收藏!pre ...
最新文章
- 字节旗下火山引擎违规分发SkyWalking,更改所有包名、删除Apache基金会Header...
- 记一次工作中的小BUG
- matlab怎么实现循环,matlab怎么实现直到型循环
- CentOS 搭建Postfix+Dovecot简单邮件系统
- 【JAVA 第五章 】课后习题 删除奇数元素下标 然后再删除值为奇数的下标
- extjs FormPanel更改为普通表单提交,提交到iframe显示
- Redis在.net中的应用学习
- 品牌类软文经典案例分享,深刻了解软文营销的“魅力”
- Nginx自签名证书的配置
- Median(查找中位数)
- 保龄球记分程序c语言,保龄球的计分规则和比赛规则
- 高级语言是如何运行的——语言的运行方式
- 计算机机房前端,(前端机房试题.doc
- 小米技术分享:解密小米抢购系统千万高并发架构的演进和实践
- 昨日种种已得奖,那深度学习三巨头今天在忙什么?
- 小程序开发API之监听加速计wx.startAccelerometer
- 初学Bootstrap,制作响应式布局
- 基于.NET实现的飞机订票系统
- 小米 10 Pro DXOMARK 自拍评分出炉:83分
- tab栏自动切换功能 鼠标移动上去取消自动切换 离开启动自动切换