2016-01-28 3 views
0

У меня есть очень специфическая проблема, и я еще не нашел решение. У меня есть кнопка IBAction для нажатия кнопки. То, что я хочу, чтобы это произошло, когда нажата эта кнопка:После нажатия кнопки, как можно воспроизводить звук в ТОЧКУ в то же время, что и активность экрана

  1. играть звуковой файл (это около 5 секунд долго звук)

  2. флэш слова на экране (это также около 5 секунд длиной)

Я хочу, чтобы это произошло одновременно, так что общее время составляет около 5 секунд (слова мигают во время воспроизведения звука).

Что мне в итоге, так это то, что слова сначала мигают, а затем звучит звук. Я никогда не смогу заставить их идти одновременно. Интересно, что я никогда не смогу перенести звук первым, даже когда он будет установлен в самом начале действия.

Я пробовал NSThread звук, exec, CATransaction flush, но ничто не может заставить их одновременно.

любые идеи, кстати, я полный начинающий программист, так что извините, если не описано надлежащим образом.

-(IBAction) playButtonClick:(id)sender { 
    int i; 

    [_audioPlayer play]; 

    for (i=0; i<10; i++){ 
     [self.model getNextWord]; 
     [self displayWord]; 
     [CATransaction flush]; 
     usleep(550000); // word on screen for 0.55 seconds 
    } 

} 

[CATransaction flush] требуется еще все, что я бы увидела, было бы самым последним словом.

+0

Звук занимает некоторое время, чтобы загрузить, убедитесь, что ваш звук находится в памяти, прежде чем кнопка станет активной. Использование легкого проигрывателя звуковых эффектов, например [JSQSystemSoundPlayer] (https://github.com/jessesquires/JSQSystemSoundPlayer), может пригодиться. – ishaq

+0

Вы можете предоставить функцию IBAction? –

+0

Вы предоставите код, в котором вы вызываете обе функции? – CaptainBli

ответ

1

У вас есть 2 инструментов, имеющихся в вашем распоряжении:

  • prepareToPlay()
  • playAtTime(_:)

Подготовьте так, что звук в памяти.

Вызов этого метода предварительно загружает буферы и приобретает аудиооборудование, необходимое для воспроизведения, что минимизирует задержку между вызовом метода воспроизведения и началом выхода звука.

Подождите, пока остальная часть пользовательского интерфейса не будет готова к воспроизведению.

Этот метод позволяет точно синхронизировать воспроизведение двух или более объектов AVAudioPlayer.

+0

Спасибо за информацию. Сейчас он работает, как я себе представлял. Также благодаря указателю об унии. Я смог удалить спящий и CATransaction flush и сделать все правильно! – Baxxter

+0

Я использовал как prepareToPlay, так и playAtTime. – Baxxter

 Смежные вопросы

  • Нет связанных вопросов^_^