AudioUnit 用法
来源:互联网 发布:淘宝店铺宝贝描述尺寸 编辑:程序博客网 时间:2024/06/03 21:52
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) { // This is a mono tone generator so we only need the first buffer UInt16 *buffer = (SAMPLE *)ioData->mBuffers[0].mData; // Generate the samples for (UInt32 frame = 0; frame < inNumberFrames; frame++) { if(THIS->isPlaying) { // 通过修改buffer数组的值,输出自己的音频数据 buffer[frame] = audioProtocol.getEncode()[THIS->qIndex++]; if(THIS->qIndex >= THIS->qSize) { //[THIS stopToPlay]; [THIS performSelectorOnMainThread:@selector(stopToPlay) withObject:nil waitUntilDone:NO]; break; } } } return noErr;}
0 0
- AudioUnit 用法
- AudioUnit 用法
- AudioUnit 基本用法总结
- framework not found AudioUnit
- AudioUnit Input Samples
- AudioUnit 相关注释
- AudioUnit的学习
- ios AudioUnit 播放 pcm 数据
- ios AudioUnit 录制播放 pcm
- ios AudioUnit bluetooth 录音 播放 实现
- audioUnit实现步骤(无代码)
- audiounit在6s下录音不正常的问题
- 编译speex / speexdsp for iOS audiounit边录边播,audioqueue边录边播
- ios开发AudioUnit的录制与播放功能,双工模式下的回音抑制以及降噪
- 用法
- ,, 用法
- 用法
- 用法
- 纪录流媒体学习的过程
- 一个http请求的方法
- HDU 1051 Wooden Sticks (不好想)
- ADF TABLE 和 ADF read only Table的转换
- 【SSH】hibernate中Oracle数据库配置文件详解
- AudioUnit 用法
- linux命令stty学习
- 半角数字验证 Encoding
- 自定义控件嵌套在ScrollView里面不显示
- MySQL查询表内重复记录
- 免安装版tomcat启动异常问题
- 思科cisco解决方案:思科ACI解决方案和Nexus_9000交换机
- 链表排序相关
- C++Primer的一个题,关于s.eofbit