Таймер точности со звуком - PullRequest
2 голосов
/ 15 июля 2011

Я пытаюсь сделать очень точно синхронизированный звук.

Я использовал этот код для создания таймера:

    timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));       
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1ull*500000000, 5000ull);
    dispatch_source_set_event_handler(timer, ^{[myAVAudioPlayer play];});
    dispatch_resume(timer);

myAVAudioPlayer инициализируется так:

    NSURL *soundURL = [NSURL fileURLWithPath:[mainBundle pathForResource:@"clock" ofType:@"aiff"]];
    myAVAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
    [myAVAudioPlayer prepareToPlay];

Я также пытался использовать формат звука .caf и класс Apple SoundEffect из примера кода BubbleLevel, и при этом нет заметных отличий в производительности.

Если скорость стрельбы низкая, звукдовольно точно.Но если я увеличу скорость стрельбы, звук будет очень неточным.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 15 июля 2011

Таймеры отправки не рассчитаны на точность звука.IIRC - одна из немногих областей, где Apple рекомендует, чтобы люди по-прежнему использовали потоки напрямую, а не в очередях отправки.

Лучше, чем это, было бы изучить Core Audio *.1004 *, который, помимо прочего, предназначен для работы именно с тем, что вы хотите: точный контроль времени.Я не могу помочь в деталях, так как я не знаком с API, и он легендарно плохо документирован, однако быстрый гугл обнаружил хотя бы один человек делает то же самое , так что вы можете иметьудачи в поиске лучшего решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...