前言

本片文章是关于ios下关于使用speex进行pcm音频压缩的实例,一般应用在语音通话中。

网上搜罗了一些资料,发现不能成为一个整体,在此整理一下,做个总结。

github地址:https://github.com/finnfu/ios_speex

简单介绍一下:

speex库文件:

封装的若干类:

分为三个模块

一:音频的实时采集

这里直接使用的  作者zxy写的音频采集模块XYRecorder,使用的是audiounit,读者可以自行学习,这里不展开。

二:对采集的音频做实时压缩(如果是语音通话,还有传输的过程,传输用的是tutk的p2p)

这里是对作者Jiang Chuncheng封装的SpeexCodec,做了一些改动,可以直接使用
核心就是下面四个方法:
- (void)open:(int)quality;   //初始化方法
- (NSData *)encode:(short *)pcmBuffer length:(int)lengthOfShorts; //压缩
- (NSData*)decode:(Byte *)encodedBytes length:(int)lengthOfBytes; //解压缩
- (void)close; //用完记得关闭

三:播放pcm文件

这个模块使用的是作者Android88封装的PCMDataPlayer
此模块主要是用于验证,采集音频经过压缩,解压缩后,还可以正常播放,在语音通话中,用于播放接收到的解压缩后的pcm数据。

需要注意的点:

在SpeexCodec初始化的时候,
speex_encoder_ctl(encodeState, SPEEX_GET_FRAME_SIZE, &encodeFrameSize);
speex_decoder_ctl(decodeState, SPEEX_GET_FRAME_SIZE, &decodeFrameSize);
执行到上面两句代码的时候,发现encodeFrameSize和decodeFrameSize都是320,是指320个short,640个byte。
所以在encode时,这里需要传入的数据长度需要时640字节,由于实时录音出来的pcm数据无法凑整640。在initFormat(XYRecorder中)相关设置的条件下,设置0.002秒的回调,
这样每次出来的数据是64,10次回调凑够640字节,在执行压缩的操作。具体的代码逻辑可以在static OSStatus RecordCallback(XYRecorder中)中查看。

做speex压缩的时候当时就是在这里卡了好几天,一直压缩解压缩出来的数据有问题。关键就是这个640byte。

好了,本片文章只是对实例的一个补充说明,具体的代码请见实例代码

ios下使用speex进行音频压缩相关推荐

  1. 编译IOS下Opus音频库

    今天说一下为IOS编译Opus音频库遇到的坑. 首先要编译IOS的库,得找一个mac环境,并且下载了XCode,Linux或者Windows下未试过,暂时不知道怎么操作. 其次IOS需要的库比较特殊, ...

  2. 解决IOS下音频文件无法播放的问题

    近期项目中有个需求,需要点击按钮播放文字答案,然后开始了填坑之旅 首先使用h5的audio标签,由于后台返回音频格式为base64格式,原格式为wav,开始不确定是否可以直接播放base64格式的音频 ...

  3. 音频压缩SPEEX应用,对讲机

    音频压缩SPEEX应用,对讲机 转载于:https://www.cnblogs.com/LittleTiger/p/10979563.html

  4. Ogg 音频压缩格式 类似于MP3格式

    Ogg全称应该是OGG Vobis是一种新的音频压缩格式,类似于MP3等现有的音乐格式.但有一点不同的是,它是完全免费.开放和没有专利限制的.OGG Vobis有一个很出众的特点,就是支持多声道,随着 ...

  5. Audio Unit: iOS中最底层最强大的音频控制API

    阅读的前提: Audio Session基础(Audio Session) Core Audio基本数据结构(Core Audio) 音视频基础知识 C/C++ 简单数据结构,函数使用 以下概念是文中 ...

  6. G.7xx 音频压缩标准

    G.7xx 是一组 ITU-T 标准,用于音频压缩和解压缩.它主要用于电话方面.在电话技术中,有两个主要的算法标准,分别定义在 mu-law 算法(美国使用)和 a-law 算法(欧洲及世界其他国家使 ...

  7. speex进行音频去噪

    应用speex进行音频去噪,speex功能很强大,因为opus的出现,用speex进行编码/解码的人几乎没有了,但是用speex来进行降噪,去除回声,增益还是很多. 这里用speex进行音频去噪,主要 ...

  8. flex4 中获取Microphone,抑制回声和使用Speex编码音频的方法

    flex4 中获取Microphone,抑制回声和使用Speex编码音频的方法,该方法经过本人测试可用. 一.如果你不关心请直接把代码复制,如果想要了解细节的请继续往下看 private functi ...

  9. 国产音频压缩格式JLM——JLM音频播放

    前段时间,发布了JLM音频压缩的SDK基本介绍,能针对PCM数据分时采样.压缩和分段加密的新格式,2023年2月6日在JLM格式支持还发布了支持ARM和RISC-V结构的库! 这里把windows和l ...

  10. iOS下WebRTC音视频通话(一)

    在iOS下做IM功能时,难免都会涉及到音频通话和视频通话.QQ中的QQ电话和视频通话效果就非常好,但是如果你没有非常深厚的技术,也没有那么大的团队,很难做到QQ那么快速和稳定的通话效果. 但是利用We ...

最新文章

  1. 酷派、华为不能打印log解决办法
  2. 绝对精度与相对精度概念
  3. linux shell编程时报:bad substitution错误的解决办法
  4. 4G模块ME3760_V2的拨号过程
  5. Spring-AOP @AspectJ进阶之绑定代理对象
  6. idea 提示忽略大小写
  7. jtree+mysql_Swing: JTree显示 图标 + 文字 | 学步园
  8. python中函数的参数类型( 位置参数、关键字参数、默认值参数和可变长度参数)
  9. hdu3265一种错误的做法
  10. php调用apache,apache调用php执行系统命令
  11. ASP.NET Core学习——7
  12. exchange2003的简单安装方法
  13. 利用Proteus软件设计红绿灯(数字电路与逻辑设计)
  14. C++ UPD广播异步发包工具
  15. PS透明婚纱抠图(超详细)
  16. 主成分分析(PCA)原理详解
  17. C++图书ISBN码校验
  18. 更换app开发者账号
  19. 比利时时尚包袋品牌Kipling携手可口可乐推出联名系列
  20. 经典PID学习感悟(一)-初步认知【比例kp】

热门文章

  1. mysql预处理stmt_mysqli_stmt类:使用预处理语句处理SELECT查询结果
  2. 无人车之美——论无人车辆系统的软件架构
  3. ptc转4-20mA热电阻变送器NI1000 NTC转0-10ma输出PWM
  4. OpenCV图像处理和图像识别常用函数
  5. linux 修改文件的权限
  6. R语言 WDI包的使用
  7. QC新旧七图汇总连载10——树状图
  8. C语言----输入人数和姓名,输出最长姓名
  9. 【技术流派】双目立体视觉系统空间精度:精确定量分析
  10. 局域网DNS劫持,输入网址会跳转到其他的广告页