如何在iOS中播放自定义音色?

时间:2011-05-10 13:53:50

标签: iphone audio

我试图找到一些在iOS中播放动态创建音调的方法。能够播放音频文件并不能为我剪掉它。我需要更精细的控制。我知道有一些方法可以处理单个数据包级别的音频流,如果我有办法创建音频数据包,这对我有用。如果有人甚至有一些好的指针或地方可以获取更多信息,我会很感激。

2 个答案:

答案 0 :(得分:3)

当然Matt Gallagher使用RemoteIO音频单元编写了一个音源。

http://cocoawithlove.com/2010/10/ios-tone-generator-introduction-to.html

答案 1 :(得分:2)

您可能想要的是使用AudioQueue。它是音频堆栈中的一个API,但允许您生成所需的任何音频。我在应用程序SC68播放器中使用它来为Atari ST声音芯片模拟器生成音频流,从80年代的游戏和场景演示中播放旧音乐。

基本理念是:

  1. 生成一个后台线程,您在其中生成CFRunLoop以接收按需回调以填充音频队列缓冲区。使用AudioQueueNewOutput()
  2. 从任何线程开始/暂停音频队列。暂停使用AudioQueueStart() / AudioQueueStart()
  3. 实现回调以填充音频缓冲区。
  4. 回调看起来像这样:

    static void AudioQueueCallback(void* inUserData, 
                                   AudioQueueRef inAQ, 
                                   AudioQueueBufferRef inBuffer) 
    {
        [soundGenerator fillNextFrameBuffer:inBuffer->mAudioData 
                                       size:inBuffer->mAudioDataBytesCapacity];
        inBuffer->mAudioDataByteSize = inBuffer->mAudioDataBytesCapacity;
        AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL);
    }