Вопрос

У меня проблемы с использованием AudioServicesPlaySystemSound. Вещи отлично работают, когда вывод проходит через динамики. Однако, когда пользователь подключается к наушникам, вывода нет. Есть ли простой способ настроить какой -то слушатель, чтобы аудио автоматически направляется через наушники, когда они подключены, и в противном случае через динамик?

Я использую следующий метод для игры в короткие, простые образцы звука AIF:

-(void)playAif:(NSString *)filename {
    SystemSoundID soundID;
    NSString *path = [[NSBundle mainBundle]
       pathForResource:filename ofType:@"aif"];    

    if (path) { // test for path, to guard against crashes

    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
    AudioServicesPlaySystemSound (soundID);

        }
   }

Я знаю, что мне не хватает чего -то, какой -то настройки, которая сделала бы это. Любые идеи?

Это было полезно?

Решение

Спасибо @Till за то, что указали мне на соответствующая часть документов. Анкет Для других с этой проблемой решение состоит в том, чтобы явно установить категорию сеанса, в моем случае для Ambient Sound. Этот код потерпел Документы Apple:

    UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;    // 1

    AudioSessionSetProperty (
                             kAudioSessionProperty_AudioCategory,                        // 2
                             sizeof (sessionCategory),                                   // 3
                             &sessionCategory                                            // 4
                             );

Итак, мой метод воспроизведения Audio теперь выглядит так:

    -(void)playAif:(NSString *)filename {
    //  NSLog(@"play: %@", filename);

        SystemSoundID soundID;
        NSString *path = [[NSBundle mainBundle]
                          pathForResource:filename ofType:@"aif"];    


        if (path) { // test for path, to guard against crashes

            UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;    // 1

            AudioSessionSetProperty (
                                     kAudioSessionProperty_AudioCategory,                        // 2
                                     sizeof (sessionCategory),                                   // 3
                                     &sessionCategory                                            // 4
                                     );

            AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
            AudioServicesPlaySystemSound (soundID);

        }
    }

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top