美文网首页
AudioUnit 基本用法

AudioUnit 基本用法

作者: 冬的天 | 来源:发表于2018-01-08 17:32 被阅读0次

IOS音频架构之Audio Unit  :http://blog.csdn.net/u014011807/article/details/46980699

音频单元组件服务参考(Audio Unit Component Services Reference)  http://www.lxway.com/802012256.htm

1、描述音频单元

AudioComponentDescription desc;

    desc.componentType = kAudioUnitType_Output;

    desc.componentSubType = kAudioUnitSubType_RemoteIO;

    desc.componentFlags = 0;

    desc.componentFlagsMask = 0;

    desc.componentManufacturer = kAudioUnitManufacturer_Apple;

2、查找音频单元

AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc);

3、获取音频单元实例

status = AudioComponentInstanceNew(inputComponent, &audioUnit);

4、启用录制功能、启用播放功能

UInt32 flag = 1;

    status = AudioUnitSetProperty(audioUnit,

                                  kAudioOutputUnitProperty_EnableIO,

                                  kAudioUnitScope_Input,

                                  kInputBus,

                                  &flag,

                                  sizeof(flag));

 status = AudioUnitSetProperty(audioUnit,

                                  kAudioOutputUnitProperty_EnableIO,

                                  kAudioUnitScope_Output,

                                  kOutputBus,

                                  &flag,

                                  sizeof(flag));

5、音频流描述

AudioStreamBasicDescription audioFormat;

    audioFormat.mSampleRate

= 44100.00;

    audioFormat.mFormatID

= kAudioFormatLinearPCM;

    audioFormat.mFormatFlags

= kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;

    audioFormat.mFramesPerPacket

= 1;

    audioFormat.mChannelsPerFrame

= 1;

    audioFormat.mBitsPerChannel

= 16;

    audioFormat.mBytesPerPacket

= 2;

    audioFormat.mBytesPerFrame

= 2;

6、应用录制和播放的音频流描述

status = AudioUnitSetProperty(audioUnit,

                                  kAudioUnitProperty_StreamFormat,

                                  kAudioUnitScope_Output,

                                  kInputBus,

                                  &audioFormat,

                                  sizeof(audioFormat));

    status = AudioUnitSetProperty(audioUnit,

                                  kAudioUnitProperty_StreamFormat,

                                  kAudioUnitScope_Input,

                                  kOutputBus,

                                  &audioFormat,

                                  sizeof(audioFormat));

7、设置回调

    AURenderCallbackStruct callbackStruct;

    callbackStruct.inputProc = recordingCallback;

    callbackStruct.inputProcRefCon = self;

    status = AudioUnitSetProperty(audioUnit,

                                  kAudioOutputUnitProperty_SetInputCallback,

                                  kAudioUnitScope_Global,

                                  kInputBus,

                                  &callbackStruct,

                                  sizeof(callbackStruct));

    callbackStruct.inputProc = playbackCallback;

    callbackStruct.inputProcRefCon = self;

    status = AudioUnitSetProperty(audioUnit,

                                  kAudioUnitProperty_SetRenderCallback,

                                  kAudioUnitScope_Global,

                                  kOutputBus,

                                  &callbackStruct,

                                  sizeof(callbackStruct));

8、回调方法

static OSStatus recordingCallback(void *inRefCon,

                                  AudioUnitRenderActionFlags *ioActionFlags,

                                  const AudioTimeStamp *inTimeStamp,

                                  UInt32 inBusNumber,

                                  UInt32 inNumberFrames,

                                  AudioBufferList *ioData) {

    AudioBufferList *bufferList;     

    OSStatus status = AudioUnitRender([(shockmanViewController *)inRefCon audioUnit],

                             ioActionFlags,

                             inTimeStamp,

                             inBusNumber,

                             inNumberFrames,

                             bufferList);

    return noErr;

}

static OSStatus playbackCallback(void *inRefCon,

                                 AudioUnitRenderActionFlags *ioActionFlags,

                                 const AudioTimeStamp *inTimeStamp,

                                 UInt32 inBusNumber,

                                 UInt32 inNumberFrames,

                                 AudioBufferList *ioData) {

    return noErr;

}

相关文章

  • AudioUnit 基本用法

    IOS音频架构之Audio Unit :http://blog.csdn.net/u014011807/artic...

  • AudioUnit 框架详细解析

    1. AudioUnit框架详细解析(一) —— 基本概览2. AudioUnit框架详细解析(二) —— 关于A...

  • AudioUnit 基本知识图

    废话不多说,看图说话,全部理解并进行过应用,大致就掌握这一块了。图都是摘抄自官方文档。 1、iOS的音乐框...

  • 音频采集

    音频采集 音频采集的方式 AudioUnit音频单元 AudioUnit总结 最底层 AVFoundation...

  • iOS使用AudioUnit/AudioQueue实现耳返功能

    首先理清思路我这边使用AudioUnit录音,AudioQueue播放1、创建AudioUnit对象,并初始化设置...

  • 定时器

    setTimeout和clearTimeout基本用法 setInterval和clearInterval基本用法...

  • CoreAudio基础概念

    1.AudioUnit 在所有API中,AudioUnit延迟最短,使用最灵活.代价很复杂。 2.Audio Fi...

  • iOS AudioUnit 总结

    iOS AudioUnit 总结 iOS 的 AudioUnit 功能十分强大,使用图的形式连接各个节点,来实现我...

  • 2019-11-16

    E战到底DAY14 SUMIF和SUMIFS函数 一.基本用法 SUMIF基本用法 SUMIFS基本用法 SUMI...

  • iOS音频-audioUnit总结

    在看LFLiveKit代码的时候,看到音频部分使用的是audioUnit做的,所以把audioUnit学习了一下。...

网友评论

      本文标题:AudioUnit 基本用法

      本文链接:https://www.haomeiwen.com/subject/hrgbnxtx.html