Как я могу воспроизвести собственный тон в iOS? - PullRequest
2 голосов
/ 10 мая 2011

Я пытаюсь найти способ воспроизводить мелодии в iOS, которые создаются динамически. Возможность воспроизведения аудиофайла мне не поможет. Мне нужно намного более тонкий контроль. Я знаю, что есть способы обработки аудиопотоков на уровне отдельного пакета, которые бы сработали, если бы у меня был какой-то способ создания аудиопакетов. Если у кого-то есть хорошие указатели или места для получения дополнительной информации, я был бы признателен за это.

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Конечно, Мэтт Галлахер написал тональный генератор с использованием аудиоустройства RemoteIO.

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

2 голосов
/ 10 мая 2011

То, что вы, вероятно, хотите, это использовать AudioQueue.Это API, который находится немного в стеке аудио, но позволяет вам генерировать любой звук, который вы хотите.Я использовал его в приложении SC68 Player для генерации аудиопотока для эмулятора звукового чипа Atari ST, для воспроизведения старой музыки из игр и демонстраций сцен 80-х годов.

Основная идея:

  1. Создать фоновый поток, в котором вы создали CFRunLoop для получения обратных вызовов по требованию для заполнения буфера аудио-очередей.Используйте AudioQueueNewOutput()
  2. Запуск / приостановка аудио-очереди из любого потока.Используйте AudioQueueStart() / AudioQueueStart() pause.
  3. Реализация обратного вызова для заполнения аудио буфера.

Обратный вызов будет выглядеть примерно так:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...