本文由社区会员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教程相关推荐

  1. (原创)speex与wav格式音频文件的互相转换(二)

    之前写过了如何将speex与wav格式的音频互相转换,如果没有看过的请看一下连接 http://www.cnblogs.com/dongweiq/p/4515186.html 虽然自己实现了相关的压缩 ...

  2. 关于SPEEX和语音的研究(转载的基础上加原创)

    前言 项目需要,抛弃掉原有的音频,统一使用speex(虽然这个解决方案也比较老,speex项目已经停止,但是资料最全,能快速满足项目需求的speex最优) speex speex官网 自行了解spee ...

  3. (原创)speex与wav格式音频文件的互相转换

    我们的司信项目又有了新的需求,就是要做会议室.然而需求却很纠结,要继续按照原来发语音消息那样的形式来实现这个会议的功能,还要实现语音播放的计时,暂停,语音的拼接,还要绘制频谱图等等. 如果是wav,m ...

  4. 小米开源语音模型 Kaldi-ONNX 转换工具,助力移动端部署!

    作者 | 小米开源团队 责编 | 胡巍巍 近日,小米对外开源了Kaldi模型到ONNX模型的转换工具Kaldi-ONNX,有望进一步促进Kaldi生态与深度学习生态间的互通. 同时,配合移动端深度学习 ...

  5. kaldi语音识别实战网盘_小米开源语音模型 KaldiONNX 转换工具,助力移动端部署!...

    作者 | 小米开源团队 责编 | 胡巍巍 近日,小米对外开源了Kaldi模型到ONNX模型的转换工具Kaldi-ONNX,有望进一步促进Kaldi生态与深度学习生态间的互通. 同时,配合移动端深度学习 ...

  6. 基于ROS2和科大讯飞的文字转语音TTS入门教程

    基于ROS2和科大讯飞的语音转文字入门教程 基于ROS2和科大讯飞的文字转语音TTS入门教程 1.环境搭建 2.创建工程 3.编译和执行 基于ROS2和科大讯飞的文字转语音TTS入门教程 本文将展示, ...

  7. 磁盘格式怎么转换?Tuxera NTFS对磁盘进行不同格式转换教程

    使用电脑的时候你注意过系统中的磁盘是哪种格式吗?一般目前常用的磁盘格式分为FAT32和NTFS两种.磁盘格式怎么转换呢?这里小编就来和大家分享Tuxera NTFS对磁盘进行不同格式转换教程,一起来看 ...

  8. 网页服务器转化app,无需第三方软件,网页在线转换视频格式使用教程

    原标题:无需第三方软件,网页在线转换视频格式使用教程 之前我们和大家介绍过一款的网页小工具,其实这个网站还有更多好用的在线工具,而今天我们介绍的就是另外一款:在线视频格式转换,– 将视频文件转换为MP ...

  9. Premiere Pro 2022带来离线语音转文本教程

    Premiere Pro 2022大版本更新,在去年的的10月份更新也带来了不少实用功能.今日小编就为大家带来 Premiere Pro 2022 离线语音转文本教程.感兴趣的小伙伴们欢迎收藏! Ad ...

  10. Premiere Pro 2022离线语音转文本教程

    Premiere Pro 2022大版本更新,在去年的的10月份更新也带来了不少实用功能.今日小编就为大家带来 Premiere Pro 2022 离线语音转文本教程.感兴趣的小伙伴们欢迎收藏!pre ...

最新文章

  1. 字节旗下火山引擎违规分发SkyWalking,更改所有包名、删除Apache基金会Header...
  2. 记一次工作中的小BUG
  3. matlab怎么实现循环,matlab怎么实现直到型循环
  4. CentOS 搭建Postfix+Dovecot简单邮件系统
  5. 【JAVA 第五章 】课后习题 删除奇数元素下标 然后再删除值为奇数的下标
  6. extjs FormPanel更改为普通表单提交,提交到iframe显示
  7. Redis在.net中的应用学习
  8. 品牌类软文经典案例分享,深刻了解软文营销的“魅力”
  9. Nginx自签名证书的配置
  10. Median(查找中位数)
  11. 保龄球记分程序c语言,保龄球的计分规则和比赛规则
  12. 高级语言是如何运行的——语言的运行方式
  13. 计算机机房前端,(前端机房试题.doc
  14. 小米技术分享:解密小米抢购系统千万高并发架构的演进和实践
  15. 昨日种种已得奖,那深度学习三巨头今天在忙什么?
  16. 小程序开发API之监听加速计wx.startAccelerometer
  17. 初学Bootstrap,制作响应式布局
  18. 基于.NET实现的飞机订票系统
  19. 小米 10 Pro DXOMARK 自拍评分出炉:83分
  20. tab栏自动切换功能 鼠标移动上去取消自动切换 离开启动自动切换

热门文章

  1. 360导航源码php,51zxw 仿360网址导航源码
  2. 元气骑士里面的超级计算机,元气骑士古大陆的神器神威大全
  3. 联想android手机驱动,Lenovo联想手机驱动
  4. 注册亚马逊网站云服务器,免费午餐:亚马逊免费云主机注册使用全攻略
  5. pptswot分析图怎么做_SWOT分析工具图表模板.ppt
  6. VTK:交互与Widget——观察者/命令模式
  7. Python爆破RAR密码
  8. 彩虹易支付最新版开源版源码分享
  9. 《博弈论》— 人生何处不博弈
  10. js 金额格式化 和 转成人民币大写金额形式