1.创建
extern OSStatus
AudioConverterNewSpecific(  const AudioStreamBasicDescription * inSourceFormat,const AudioStreamBasicDescription * inDestinationFormat,UInt32                              inNumberClassDescriptions,const AudioClassDescription *       inClassDescriptions,AudioConverterRef __nullable * __nonnull outAudioConverter)

inSourceFormat  和 inDestinationFormat 是传入的源音频格式和目标音频格式

inNumberClassDescriptions 和 inClassDescriptions是传入的音频编码器描述类和它的个数

outAudioConverter是传出的AudioConverter引用

例子:
AudioStreamBasicDescription inf = {0};
inf.mSampleRate = 44100;
inf.mChannelsPerFrame = 1;  //这里只能是1,否则报错
inf.mBitsPerChannel = 16;
inf.mFormatFlags =  kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
inf.mFormatID = kAudioFormatLinearPCM;
inf.mFramesPerPacket = 1;
inf.mBytesPerFrame = inf.mBitsPerChannel * inf.mChannelsPerFrame / 8;
inf.mBytesPerPacket = inf.mFramesPerPacket*inf.mBytesPerFrame;AudioStreamBasicDescription outf = { 0 };
outf.mFormatID = kAudioFormatMPEG4AAC;
outf.mFormatFlags = 0;
outf.mFramesPerPacket = 1024;
outf.mSampleRate = 44100;
outf.mChannelsPerFrame = 2;
<pre name="code" class="html">const OSType subtype = kAudioFormatMPEG4AAC;    // kAudioEncoderComponentType的时候使用目标类型// kAudioDecoderComponentType的时候使用源类型
AudioClassDescription requestedCodecs[2] = {{kAudioEncoderComponentType,subtype,kAppleSoftwareAudioCodecManufacturer},{kAudioEncoderComponentType,subtype,kAppleHardwareAudioCodecManufacturer}
};
AudioConverterRef audioConverter;
OSStatus result = AudioConverterNewSpecific(inputFormat, outputFormat,2, requestedCodecs, &audioConverter);

2.释放

extern OSStatus
AudioConverterDispose(  AudioConverterRef   inAudioConverter)

inAudioConverter是AudioConverter的引用

例子:
if(audioConverter != NULL){
<span style="white-space:pre"> </span>AudioConverterDispose(audioConverter);
}

3.编码

extern OSStatus
AudioConverterFillComplexBuffer(    AudioConverterRef                   inAudioConverter,AudioConverterComplexInputDataProc  inInputDataProc,void * __nullable                   inInputDataProcUserData,UInt32 *                            ioOutputDataPacketSize,AudioBufferList *                   outOutputData,AudioStreamPacketDescription * __nullable outPacketDescription)

inAudioConverter是传入的AudioConverter的引用

inInputDataProc是用户自己实现的获取编码数据的Callback函数(

inInputDataProcUserData是获取编码数据的Callback函数中使用的用户数据(一般传输编码session对象)

ioOutputDataPacketSize输出数据长度(通过获取AudioConverter的kAudioConverterPropertyMaximumOutputPacketSize属性获取或自定义足够的长度)

outOutputData输出数据

outPacketDescription输出数据描述

例子:
static OSStatus FillAudioDataCallback(AudioConverterRef inAudioConverter, UInt32 *ioNumberDataPackets,AudioBufferList *bufferList, AudioStreamPacketDescription **outDataPacketDescription, void *inUserData)
void *data = malloc(length);UInt32 outputDataPackets = 1;AudioBufferList outputData;
outputData.mNumberBuffers = 1;
outputData.mBuffers[0].mNumberChannels = 2;// 输出类型声道数
outputData.mBuffers[0].mDataByteSize = (UInt32)length;
outputData.mBuffers[0].mData = data;AudioStreamPacketDescription outputPacketDescription;
OSStatus status = AudioConverterFillComplexBuffer(audioConverter, FillAudioDataCallback(__bridge void *)self, &outputDataPackets, &outputData, &outputPacketDescription);

IOS音频转换器 AudioConverterRef相关推荐

  1. android ios mp4格式转换,ios格式转换器

    iphone视频格式转换器是一款可以帮助用户轻松转换出iPhone格式视频的转换器,该ios视频转换器可以告诉的将各种主流视频格式轻松转换,如RM.RMVB.VOB.DAT.VCD.SVCD.WMV. ...

  2. android ios mp4格式转换,ios格式转换器|iphone视频格式转换器免费版 7.1 - 系统天堂...

    iphone视频格式转换器是一款可以帮助用户轻松转换出iPhone格式视频的转换器,该ios视频转换器可以告诉的将各种主流视频格式轻松转换,如RM.RMVB.VOB.DAT.VCD.SVCD.WMV. ...

  3. iOS音频编程之实时语音通信

    http://blog.csdn.net/it_yangjing/article/details/51909991 在CSDN上显示的代码格式不全,在github blog地址显示正确 iOS音频编程 ...

  4. m4r格式怎么转为mp3 音频转换器哪个好

    经常玩弄铃声制作的童鞋也许比较清楚m4r是什么格式,m4r是iphone铃声的一种音频格式,在国内的一些iPhone铃声资源站或者是苹果iTunes上都是有得下载,不过对于安卓或者非ios系统的手机来 ...

  5. m4s格式转换mp3_m4r格式怎么转为mp3 音频转换器哪个好

    经常玩弄铃声制作的童鞋也许比较清楚m4r是什么格式,m4r是iphone铃声的一种音频格式,在国内的一些iPhone铃声资源站或者是苹果iTunes上都是有得下载,不过对于安卓或者非ios系统的手机来 ...

  6. 添加背景音乐不覆盖原声怎么弄?音频转换器免费软件哪个好

    现在越来越多的人开始玩vlog拍摄音视频,但是有些"新手"小伙伴们会遇到想添加背景音乐却经常出现把原声直接覆盖了的情况,今天我就分享给你们,添加背景音乐不覆盖原声怎么弄的三个方法, ...

  7. iOS音频播放(一):概述

    (本文转自码农人生) 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改,我也因此对于iOS下的音频播放实现有了一定的研究.写这个 系列的博客目的一方面希望能够抛砖引玉 ...

  8. 一步一步教你实现iOS音频频谱动画(一)

    如果你想先看看最终效果再决定看不看文章 -> bilibili 示例代码下载 第二篇:一步一步教你实现iOS音频频谱动画(二) 基于篇幅考虑,本次教程分为两篇文章,本篇文章主要讲述音频播放和频谱 ...

  9. iOS音频播放 (二):AudioSession 转

    原文出处 :http://msching.github.io/blog/2014/07/08/audio-in-ios-2/ 前言 本篇为<iOS音频播放>系列的第二篇. 在实施前一篇中所 ...

最新文章

  1. 斯坦佛编程教程-Unix编程工具(四)
  2. 图像HSV和RGB的相互转换
  3. Windows netstat 查看端口、进程占用
  4. Modeling Filters and Whitening Filters
  5. mysql通配符_mysql通配符进行模糊查询
  6. Quibi:我轻轻地咬一口 你最爱的Netflix和TikTok
  7. [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式...
  8. VB 读写TXT文本文件函数
  9. 给.Net程序员和WEB程序员建议 (转自CSDN)
  10. php嗅探视频地址,用PHP嗅探youku视频的真实地址!
  11. github 手机号码归属地信息库、手机号归属地查询
  12. 解决Delphi 2010启动时卡死并报displayNotification堆栈溢出错误
  13. Java线程并发协作与任务定时调度
  14. cefsharp启动优化
  15. xp系统怎么弄清微软服务器名称,xp系统如何做远程服务器呢
  16. 显示出现计算机代码,win10电脑出现蓝屏并提示代码DPC_WATCHDOG_VIOLATION如何解决
  17. 第六次作业--结对编程第二次作业
  18. Python 教程:eval()和exac()详细用法以及区别
  19. 良好的分布式cahce系统中,一致性hash算法需要满足什么?
  20. 看看我的超级U盘系统

热门文章

  1. 海风教育校园家庭教育系列公益讲座正式启动
  2. telematics product and company in China
  3. JavaScript教程 -- 廖雪峰
  4. 51单片机通过两片74HC595级联,用8位LED数码管,分别显示当前日期,如:“2”、“0”、“-”、“0”、“5”、“-”、“2”、“6”,用Proteus仿真实现。
  5. android 剪切板软件,Clipboard Actions剪切板
  6. leetcode406.根据身高重建队列
  7. 运行PHP程序时提示“Notice: Undefined index”的解决办法
  8. RabbitMQ初探
  9. 刷题记录:牛客NC23049华华给月月准备礼物
  10. 毕业论文致谢这么重要的事,可以这么豪横的写,致谢女友要谨慎,很可能变成前女友!...