iPad неправильно обрабатывает маршрут смены колонок -> наушники - PullRequest
1 голос
/ 28 апреля 2011

Я использую iOS 4.3.2.

  1. Я запускаю свое приложение на iPad (ничего не подключено).
  2. Звук работает.
  3. Я подключаю наушники.
  4. Нет звука, ни от iPad, ни от наушников.
  5. Я отключаю наушники, перейдите к (2)

В качестве альтернативы:

  1. Я запускаю свое приложение на iPad с подключенными наушниками.
  2. Звук выходит изнаушники.
  3. Я отключаю наушники.
  4. Теперь звук выходит из iPad.
  5. Я подключаю наушники.
  6. Нет звука, ни отiPad, ни от наушников.
  7. Я снова отсоединяю наушники, иди (4).

Вот мой код аудиосеанса:

@implementation AudioSession

+ (void) CreateAudioSessionWithInterruptionListener: (AudioSessionInterruptionListener) interruptionListener 
                                returningSampleRate: (Float64 *) pHWSampleRate 
{
    OSStatus result = AudioSessionInitialize(NULL, NULL, interruptionListener, self);
    if (result != kAudioSessionNoError)
    {
        NSLog(@"AudioSessionInitialize(...) failed!");
        return;
    }

    SET_PROPERTY( kAudioSessionProperty_AudioCategory,                        UInt32,   kAudioSessionCategory_PlayAndRecord );
    SET_PROPERTY( kAudioSessionProperty_OverrideCategoryMixWithOthers,        UInt32,   (UInt32) YES                        );
    SET_PROPERTY( kAudioSessionProperty_PreferredHardwareIOBufferDuration,    Float32,  .005                                );

    // GET not set h/w sampleRate
    // Float64 hwSampleRate;
    // UInt32 size = sizeof(Float64);
    AssertOK(AudioSessionGetProperty(
                                     kAudioSessionProperty_CurrentHardwareSampleRate, 
                                     & (UInt32) { sizeof(Float64) }, 
                                     pHWSampleRate), 
             @"couldn't get hw sample rate");
    //NSAssert(size == sizeof(Float64);
    NSLog(@"H/W SampleRate: %d", (int) (* pHWSampleRate));

    AssertOK(AudioSessionSetActive(true), 
             @"couldn't set audio session active\n");
}

1 Ответ

1 голос
/ 09 сентября 2011

На самом деле это может быть ошибка iOS.У меня такая же проблема при переключении на выход HDMI (тоже iOS 4.3).В 50% случаев изменение маршрута происходит успешно, и звук, как и ожидалось, выходит из телевизора, а не из iPad.В остальных 50% случаев после подключения адаптера HDMI у меня вообще нет звука, ни телевизора, ни iPad.Я получаю звук обратно, как только снова отсоединяю адаптер.

Так что я не могу предложить вам хорошее решение, только обходной путь.Зарегистрируйтесь для изменения аудио маршрута (установив прослушиватель свойства для свойства kAudioSessionProperty_AudioRouteChange).Когда сработает этот обратный вызов, обработайте его, например, повторно инициализировав все содержимое Core Audio.Это не очень хорошее решение, но оно работает.

Обновление:
В вашем особом случае система ведет себя почти так, как Apple говорит, что она должна себя вести.Позвольте мне привести цитату из Руководства Apple по интерфейсу для iOS:

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

Итак, Apple говорит: переключение с внутреннего динамика на наушники -> воспроизведение продолжается.Переключение с наушников на внутренний динамик -> паузы воспроизведения.Согласно этой цитате, это поведение, которое вы должны реализовать самостоятельно, а не то, которое система навязывает вам, но оно довольно близко к поведению, которое вы на самом деле видите, не так ли?

...