公司产品需求做一个录音功能,要求可以添加背景音乐,支持边录边播,录音试听、暂停录音、实时绘制音波图、以mp3格式上传服务端等功能。

1、使用iOS自带API:AVAudioRecorder录音wav格式音频,存储到本地,录音暂停(pause)的时候,路径下并没有生成真正的音频文件(没有任何声音),只有调用stop结束录音,才会生成完整的wav文件。

2、解决办法:暂停(pause)就是结束(stop),然后把一段段wav拼接在一起,但是碰到另一个问题,两段wav音频用音轨拼接的方式(AVMutableComposition)合并成一个新的音频中间是没有停顿的,但是由于wav是由头文件和音频文件组成,合并生成的新wav 通过lame转成mp3(只由音频文件组成),实际上是转码失败,生成的mp3只有滋滋滋的噪音。

3、然后想到先把每一段wav转mp3,然后拼接两段mp3,mp3的拼接方式是用nsdata append,这里又出现一个问题,wav转mp3包含了头文件,合并后的mp3中间会有很明显的停顿。

4、此时想到换录音api,准备用AVAudioQueue,边录制边转码,但是没找到该api实时获取音量的方法(AVAudioRecorder提供的方法是:updateMemter),因此无法绘制录音音波图,满足不了产品需求。

5、后来了解到可以直接录制源文件,而非通过pcm(没有压缩的编码方式)编码成wav,然后转码拼接,发现没有效果,跟wav一样的问题

6、通过查资料学习到 pcm和wav的头文件都是44字节,然后尝试着截取掉头文件,然后在转码mp3,拼接,但是还是没用

7、最后还是用AVAudioRecorder,边录制边转码,录制caf(一种由苹果公司开发的存储音频的格式)同时开辟子线程转码mp3。录制的caf格式音频,在暂停的时候也会生成音频文件,因此省去了拼接的步骤,需求完成。

总结:iOS多个wav文件,合成并转码mp3,会出现拼接失败或中间有明显停顿。caf则没有问题。

iOS 录音踩坑之旅相关推荐

  1. python 同花顺thstrader_Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)...

    代码示例支持 平台: Centos 6.3 Python: 2.7.14 1.1 踩坑案例 pid, ppid是大家比较常见的术语, 代表进程号,父进程号. 但pgid是个什么鬼? 了解pgid之前, ...

  2. Vue踩坑之旅(一)—— 数组、对象的监听

    作为一个接触 vue 才一个多月的小白,马上就接手基于 vue 的大型商城项目,其间真是跌跌撞撞踩了好多坑(o(╥﹏╥)o).在此写下自己的踩坑之旅,希望给跟我一样还在自学 vue 的同学一些帮助,另 ...

  3. 微信开发踩坑之旅 之 开发准备及服务器配置

    在工作和兴趣的机缘巧合之下,我开始接触微信开发.在这里简单记述自己的微信开发踩坑之旅. 首先,由于本人标准的理工科生,记述的语言有所不足,我尽量说明准确和详细点. 本文记述主线 ·申请公众号 ·公众号 ...

  4. VR制作中必须踩的坑365之037(oculus2、UE4、UE5、VR记录一年的踩坑之旅)Maya / ZBrush / Substance Painter倒来倒去

    VR制作中必须踩的坑365之037(oculus2.UE4.UE5.VR记录一年的踩坑之旅)Full 3D GAME ASSET workflow ( Maya / ZBrush / Substanc ...

  5. 重装win10系统+Ubuntu16.04的踩坑之旅(联想拯救者r720)

    重装win10系统+Ubuntu16.04的踩坑之旅(联想拯救者r720) 碎碎念:原本双系统用得很开心的,在手贱删了Ubuntu系统的某些隐藏文件之后导致Ubuntu系统不能正常使用,在某种程度强迫 ...

  6. VR制作中必须踩的坑365之044(oculus2、UE4、UE5、VR记录一年的踩坑之旅)拳击VR小游戏红绿灯

    VR制作中必须踩的坑365之043(oculus2.UE4.UE5.VR记录一年的踩坑之旅)拳击VR制作起来,拳击动画人物 How to create box minigame in VR (UE4 ...

  7. VR制作中必须踩的坑365之045(oculus2、UE4、UE5、VR记录一年的踩坑之旅)iclone8来来来告诉你剁手坑

    VR制作中必须踩的坑365之045(oculus2.UE4.UE5.VR记录一年的踩坑之旅) iClone 8 Work in Progress - Part One: Dramatically Si ...

  8. Android google翻译踩坑之旅

    # Android google翻译踩坑之旅   最近由于工作需求,需要为游戏Android平台接入Google翻译的SDK,由于关于翻译的文章非常少,访问官方文档又需要翻墙,更可气的是找到的博客写了 ...

  9. VR制作中必须踩的坑365之042(oculus2、UE4、UE5、VR记录一年的踩坑之旅)2D图片变成3D最快方法:使用怪兽建模(Monster Mash)

    VR制作中必须踩的坑365之041(oculus2.UE4.UE5.VR记录一年的踩坑之旅) Turn 2D Images into 3D Objects with Monster Mash! (Fr ...

  10. OrangePi PC 玩Linux主线内核踩坑之旅(四)之变身MP3播放器

    主线内核Linux跑起来后,我们就可以用香橙派做一些简单的应用了.既然是简单的应用,那便是说基本上无需再添加额外的硬件即可实现相应的功能,"变身MP3播放器"便是一例.当然,耳机或 ...

最新文章

  1. 从零开始成为一名开源程序员,其实只需要九步!
  2. JavaScript判断图片是否加载完成的三种方式
  3. java服务器http post_使用Java程序通过http post访问ABAP Netweaver服务器
  4. 十七、二叉树的建立与基本操作
  5. 浅谈对称加密与非对称加密
  6. TryCatchFinallyProcessHelper
  7. c3p0-0.9.1.2.jar
  8. jQuery form表单的serialize()参数和其他参数 如何一起传给后端
  9. G盘文件系统损坏要如何恢复数据
  10. LeetCode 893 Groups of Special-Equivalent Strings 解题报告
  11. opencv读取文件路径
  12. 怎么把浏览器改成开发者模式_小米手表怎么玩?Wear OS初体验
  13. 什么是网络安全等级保护
  14. VBA-使用inputbox方法
  15. 网吧服务器磁盘性能,网吧游戏服务端显示磁盘已满怎么解决
  16. NRF24L01-状态寄存器
  17. 微信小程序(组件:路由、表单、媒体、自定义组件,插槽、组件通讯、侦听器、生命周期)
  18. 一行代码实现蒲公英市场APP检查更新
  19. 什么是HTTPS证书
  20. 5年内禁用支付宝和微信支付!多地公安出手:这些人摊上大事了

热门文章

  1. python shell怎么调字体大小_如何更改在Python Shell字体大小
  2. 离散数学及其应用 第一章习题
  3. 让DEVCpp支持C11
  4. 方舟生存进化秘籍大全
  5. 22计算机408考研—数据结构—线性表、栈、队列、数组
  6. 汤家凤高等数学2020年基础课手写笔记汇总
  7. switchhost使用与注意事项
  8. Mysql数据库常用命令总结
  9. 软件测试周刊(第68期):解决棘手问题的最上乘方法是:静观其变,顺水推舟。
  10. 如何免费下载付费音乐