首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用AudioUnit (iOS)播放信号?

如何使用AudioUnit (iOS)播放信号?
EN

Stack Overflow用户
提问于 2016-10-26 08:59:40
回答 1查看 1.2K关注 0票数 4

我需要生成一个信号,然后用iPhone的扬声器或耳机播放。

为了做到这一点,我生成一个交织的信号。然后,我需要实例化一个AudioUnit继承的类对象,并提供下一个信息:2个通道、44100 kHz采样率、一些缓冲区大小来存储几个帧。

然后,我需要编写一个回调方法,它会占用我的信号,并将其放入iPhone的输出缓冲区。

问题是,我不知道如何编写AudioUnit继承的类。我无法理解苹果公司有关它的文档,我可以找到所有的例子,要么从文件中读取,然后以很大的滞后播放,要么使用简化的构造。

我开始觉得自己很蠢什么的。求你了救命..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-26 23:57:17

要用AudioUnit播放iPhone硬件的音频,您不需要从AudioUnit派生,因为CoreAudio是一个c框架--而是给它一个呈现回调,在这个回调中输入音频样本。下面的代码示例向您展示了如何实现。您需要用真正的错误处理替换assert,您可能希望更改或至少使用kAudioUnitProperty_StreamFormat选择器检查音频单元的示例格式。我的格式恰好是48千赫浮点交错立体声音响。

代码语言:javascript
复制
static OSStatus
renderCallback(
               void* inRefCon,
               AudioUnitRenderActionFlags* ioActionFlags,
               const AudioTimeStamp* inTimeStamp,
               UInt32 inBusNumber,
               UInt32 inNumberFrames,
               AudioBufferList* ioData)
{
    // inRefCon contains your cookie

    // write inNumberFrames to ioData->mBuffers[i].mData here

    return noErr;
}

AudioUnit
createAudioUnit() {
    AudioUnit   au;
    OSStatus err;

    AudioComponentDescription desc;
    desc.componentType = kAudioUnitType_Output;
    desc.componentSubType = kAudioUnitSubType_RemoteIO;
    desc.componentManufacturer = kAudioUnitManufacturer_Apple;
    desc.componentFlags = 0;
    desc.componentFlagsMask = 0;

    AudioComponent comp = AudioComponentFindNext(NULL, &desc);
    assert(0 != comp);

    err = AudioComponentInstanceNew(comp, &au);
    assert(0 == err);


    AURenderCallbackStruct input;
    input.inputProc = renderCallback;
    input.inputProcRefCon = 0;  // put your cookie here

    err = AudioUnitSetProperty(au, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &input, sizeof(input));
    assert(0 == err);

    err = AudioUnitInitialize(au);
    assert(0 == err);

    err = AudioOutputUnitStart(au);
    assert(0 == err);

    return au;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40257923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档