ios AudioQueue потоковая передача нескольких песен - PullRequest
2 голосов
/ 17 августа 2011

Я использую AudioQueue для потоковой передачи аудио из произвольного источника (классу просто нужен делегат, который предоставляет ему пакеты), я создал класс, который оборачивает все функции, которые можно вызывать, AudioQueueClass, я использую этот классчтобы воспроизвести много песен, между каждой песней, которую я выпускаю своим классом, и создаю новый экземпляр AudioQueueClass для воспроизведения следующей песни, я вижу две проблемы, которые мне не удалось найти, может быть, некоторые из вас сталкивались с этими проблемамии может пролить свет на это

1- Каждый раз, когда AudioQueue воспроизводит несколько секунд предыдущей песни, а затем возвращается к текущей песне, не уверенный, почему это может происходить, когда я создаю новыйочереди для каждой песни, и я считаю, что я распоряжаюсь своими очередями надлежащим образом - какой-то код должен следовать

2 - этот код еще хуже, иногда, когда я вхожу в 3-ю или 4-ю песню, аудио-очередь останавливаетсяиграю ... Я считаю, что проблема в том, что AudioQueueInputCallback inCallbackProc перестает вызываться,Я думаю, это потому, что очередь перестала воспроизводить и обрабатывать пакеты, но не может понять, почему ... Еще одна вещь, на которую следует обратить внимание, это то, что это происходит только тогда, когда я передаю потоковую передачу на устройство из внешнего источника, если я просто получаю данные файла локально ииспользуйте это как пакеты, я слышу «заикание» в музыке, но оно восстанавливается и воспроизводится нормально, тогда как в случае потоковой передачи звук просто останавливается (довольно странно)

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

    AudioQueueFlush(audioQueue);
AudioQueueStop(audioQueue, true);
if (audioFileStream)
{
    err = AudioFileStreamClose(audioFileStream);
    audioFileStream = nil;
    if (err)
    {
        [self failWithErrorCode:AS_FILE_STREAM_CLOSE_FAILED];
    }
}

//
// Dispose of the Audio Queue
//
if (audioQueue)
{
    err = AudioQueueDispose(audioQueue, true);
    audioQueue = nil;
    if (err)
    {
        [self failWithErrorCode:AS_AUDIO_QUEUE_DISPOSE_FAILED];
    }
}

1 Ответ

0 голосов
/ 22 августа 2011

Оказывается, неудивительно, что ошибки вообще не было в Audio Streamer, это был способ, которым я писал музыку для потоковой передачи ... после того, как я исправил это, все работало хорошо ...

Еще раз спасибо

Daniel

...