美文网首页
Audio Unit播放音频

Audio Unit播放音频

作者: AntKing | 来源:发表于2019-12-16 15:25 被阅读0次

Audio Unit播放音频的步骤主要三步

1 AVAudioSession设置


    AVAudioSession *session = [AVAudioSession sharedInstance];
    
    NSError *rawError = nil;
    if (![session setCategory:AVAudioSessionCategoryPlayback error:&rawError]) {
        NSLog(@"setCategory AVAudioSessionCategoryPlayback error");
        return NO;
    }

    NSTimeInterval prefferedIOBufferDuration = 0.023;
//    你还可以配置一些其他功能,如采样率为44.1 kHz默认的duration是大概23ms,相当于每次采集1024个采样点。如果你的app要求延迟很低,你可以最低设置0.005ms(相当于256个采样点)
    //设置缓冲时间,通常来说I/O缓冲时间的范围是0.005s至0.93s
    if (![session setPreferredIOBufferDuration:prefferedIOBufferDuration error:&rawError]) {
        NSLog(@"setPreferredIOBufferDuration error");
    }
    
    double prefferedSampleRate = 44100;
    //设置采样率44100,每秒采样44100次
    if (![session setPreferredSampleRate:prefferedSampleRate error:&rawError]) {
        NSLog(@"setPreferredSampleRate: %.4f, error: %@", prefferedSampleRate, rawError);
    }
    
    //激活session
    if (![session setActive:YES error:&rawError]) {
        NSLog(@"setActive error");
        return NO;
    }

2 AudioStreamBasicDescription设置

这个结构体在Audio Unit 中尤为重要,描述了音频格式的通用设置

一般设置为这个参数即可


Sample Rate:              44100
Format ID:                 lpcm
Format Flags:                 4
Bytes per Packet:             2
Frames per Packet:            1
Bytes per Frame:              2
Channels per Frame:           1
Bits per Channel:            16

3 初始化及设置Audio Unit


//1 设置audio组件描述
    AudioComponentDescription descr = {0};
    descr.componentType = kAudioUnitType_Output;
    descr.componentSubType = kAudioUnitSubType_RemoteIO;
    descr.componentManufacturer = kAudioUnitManufacturer_Apple;
    descr.componentFlags = 0;
    descr.componentFlagsMask = 0;
    //设置组件描述
    AudioUnit audioUnit = NULL;
    AudioComponent component = AudioComponentFindNext(NULL, &descr);
    //初始化音频组件
    OSStatus status = AudioComponentInstanceNew(component, &audioUnit);
    
    if (status != noErr) {
        NSLog(@"AudioComponentInstanceNew error");
        return NO;
    }
    //初始化音频描述
    AudioStreamBasicDescription streamDescr = {0};
    UInt32 size = sizeof(AudioStreamBasicDescription);
    status = AudioUnitGetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input,
                                  0, &streamDescr, &size);
    if (status != noErr) {
        NSLog(@"AudioUnitGetProperty error");
        return NO;
    }
    
    streamDescr.mSampleRate = sampleRate;
    status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input,
                                  0, &streamDescr, size);
    
    if (status != noErr) {
        NSLog(@"AudioUnitSetProperty error");
        return NO;
    }

    _bitsPerChannel = streamDescr.mBitsPerChannel;
    _channelsPerFrame = streamDescr.mChannelsPerFrame;
    
    AURenderCallbackStruct renderCallbackStruct;
    renderCallbackStruct.inputProc = renderCallback;
    renderCallbackStruct.inputProcRefCon = (__bridge void *)(self);
    
    status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &renderCallbackStruct, sizeof(AURenderCallbackStruct));
    if (status != noErr) {
        NSLog(@"AudioUnitSetProperty error");
        return NO;
    }
    
    status = AudioUnitInitialize(audioUnit);
    if (status != noErr) {
        NSLog(@"AudioUnitInitialize error");
        return NO;
    }


3.1 在回调函数中我们要喂给Audio Unit数据,这样audio拿到我们的数据之后就可以播放

相关文章

  • 如何使用Audio Unit 播放音频

    Audio Unit 实现音频播放功能 使用Audio Unit播放音频的时候,我们使用一个I/O Unit就可以...

  • 关于AudioUnit的一些基础知识

    Audio Unit 能做什么 Audio Unit 可以实现混音、均衡器、音频格式转化、实时的音频录制和播放等功...

  • Audio Unit播放音频

    Audio Unit播放音频的步骤主要三步 1 AVAudioSession设置 2 AudioStreamBas...

  • IOS Audio Unit混音之麦克风输入与PCM数据混音

    示例代码: XBVoiceTool 所需基础: Audio Unit播放PCM数据Audio Unit录音PCM编...

  • 如何使用Audio Unit 录制音频

    Audio Unit 实现音频录制功能 使用Audio Unit录制的时候,过程相对简单,我们使用一个Audio ...

  • Audio Unit详解

    一、什么是Audio Unit iOS提供了音频处理插件,支持混合、均衡、格式转换和实时输入/输出用于录制、播放、...

  • Audio Unit采集音频实战

    需求 iOS中使用Audio unit实现音频数据采集,直接采集PCM无损数据, Audio Unit不能直接采集...

  • AVFondation 之音频

    核心音频概述(音频是一个值得研究的方向) Core Audio Overview iOS Audio Unit i...

  • AudioUnit使用

    在iOS上Audio Unit是比较底层的接口,可以理解为其是对音频硬件驱动的封装。用来进行低延迟的音频采集和播放...

  • AudioUnit 基础知识

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

网友评论

      本文标题:Audio Unit播放音频

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