美文网首页iOS开发
AudioUnit基础概念

AudioUnit基础概念

作者: 当AI已成往事55 | 来源:发表于2016-04-16 09:11 被阅读1394次

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基础概念

    1、描述音频单元 AudioComponentDescription desc; desc.componentTy...

  • AudioUnit 基础知识

    Overwrite 个人理解的名词解释: Audio Unit:音频单元,通常指一个音频单元实例,或者 Audio...

  • 音频采集

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

  • AudioUnit 框架详细解析

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

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

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

  • CoreAudio基础概念

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

  • iOS AudioUnit 总结

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

  • iOS音频-audioUnit总结

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

  • AudioUnit简介

    AudioUnit简介 AudioUnit这个名字取得还是比较形象的,它的主体就是一系列的unit,不同unit能...

  • AudioUnit

    转至 :http://www.qingpingshan.com/m/view.php?aid=386657 声音的...

网友评论

    本文标题:AudioUnit基础概念

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