Воспроизведение звука через динамик Apple Watch

Есть ли способ воспроизвести звук через динамик Apple Watch? Я не смог найти какую-либо документацию в Интернете.


person frenchie4111    schedule 11.03.2015    source источник


Ответы (6)


Теперь это возможно, начиная с watchOS 2, используя WKAudioFilePlayer или WKInterfaceMovie.

NSURL *assetURL = [[NSBundle mainBundle] URLForResource:@"file" withExtension:@"wav"];

WKAudioFilePlayer пример:

WKAudioFileAsset *asset = [WKAudioFileAsset assetWithURL:assetURL];
WKAudioFilePlayerItem *playerItem = [WKAudioFilePlayerItem playerItemWithAsset:asset];
WKAudioFilePlayer *audioFilePlayer = [WKAudioFilePlayer playerWithPlayerItem:playerItem];
[audioFilePlayer play];

WKInterfaceMovie пример:

[self presentMediaPlayerControllerWithURL:assetURL options:nil completion:nil];
person Ric Santos    schedule 02.08.2015
comment
На самом деле это не ответ на вопрос, потому что фрагмент воспроизводит звуковой файл не через динамик часов, а через сопряженные наушники Bluetooth: расширение WatchKit может инициировать воспроизведение расширенного аудиоконтента через сопряженную аудиогарнитуру Bluetooth. developer.apple.com/library/prerelease/watchos/documentation/ - person Michael Dorner; 14.09.2015
comment
@MichaelDorner, это неправда. Звук в ваших медиафайлах направляется на сопряженную гарнитуру Bluetooth, если она доступна. Если Bluetooth-гарнитура недоступна, звук направляется на динамик Apple Watch. - person Ace Green; 13.01.2016
comment
Я протестировал его с watchOS 2.0 и не смог увидеть эту маршрутизацию. Что вы наделали? Было бы круто, если бы это работало. :-) - person Michael Dorner; 13.01.2016
comment
Пожалуйста, как реализовать потоковое воспроизведение радио в приложении для часов? - person Markus; 16.07.2016
comment
Я сделал это, и у меня не было звука из динамиков часов. Я не уверен, что это работает. Я на WatchOS 3. - person SolidSnake4444; 01.11.2016

import AVFoundation
var player: AVAudioPlayer?

if let path = Bundle.main.path(forResource: "siren", ofType: "wav") {

        let fileUrl = URL(fileURLWithPath: path)

        do{
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)

            player = try AVAudioPlayer(contentsOf: fileUrl)

            guard let player = player else { return }

            player.play()

        }
        catch
        {

        }

    }

Я использовал это для воспроизведения пользовательского звука из динамика Apple Watch (4.3) и работал нормально. Не забудьте установить целевое членство аудиофайла в наборе часов.

person Rafael Bonini    schedule 23.08.2018
comment
Это работает в watchOS 5 для вас? У меня не работает (не воспроизводится через динамик) - person wazawoo; 29.03.2019
comment
доступен ли динамик для симулятора ОС часов? - person kalpa; 03.01.2020

Невозможно воспроизвести звук из динамика Apple Watch, но вы можете запустить воспроизведение звукового файла на iPhone, вот тема об этом

person sheraza    schedule 11.03.2015

  • PresentMediaPlayerControllerWithURL:options:completion: (Новое в watchOS 2.0)

URL-адрес URL-адрес медиафайла, который вы хотите воспроизвести. URL-адрес должен указывать файл; потоковое мультимедиа не поддерживается. Файл может содержать аудио, видео или и то, и другое.

Если вы укажете URL-адрес для файла на удаленном сервере, этот метод сначала загружает файл и отображает индикатор выполнения, показывающий ход операции. Поскольку WatchKit использует App Transport Security (ATS) при загрузке файлов с веб-сервера, файл должен находиться на защищенном сервере, а URL-адрес должен использовать схему https. Если ваш сервер не поддерживает безопасность уровня ATS, загрузите файл самостоятельно, прежде чем воспроизводить его.

Используйте общий контейнер, следите за расширениями для хранения файла.

Любой звук, который вы воспроизводите с помощью этого метода, направляется на сопряженное аудиоустройство Bluetooth, если оно доступно. Если аудиоустройство Bluetooth недоступно, звук направляется на динамик Apple Watch.

person zeAttle    schedule 28.09.2015
comment
Я пытаюсь воспроизвести потоковое мультимедиа (радио). Попытка не удалась, а также я получил сообщение об ошибке: App Transport Security (ATS). Как я могу воспроизвести потоковое радио? - person Markus; 15.07.2016

Для WatchOS3 ответом на исходный вопрос является WKInterfaceInlineMovie https://developer.apple.com/reference/watchkit/wkinterfaceinlinemovie

Вы можете скрыть виджет, чтобы он не изменил дизайн вашего интерфейса. Он воспроизводит аудиофайлы через динамик часов, если динамик Bluetooth не подключен.

person ghr    schedule 17.02.2017
comment
Любая идея, почему том не использует значение из системы? Я поставил его на минимум в настройках часов, но он очень громкий. Я также не нашел никакого параметра для изменения громкости. - person yonicsurny; 23.05.2017
comment
Вы знаете, как скрыть виджет? - person Jesse Jin; 22.02.2018
comment
То же, что и скрытие любого виджета: установите для свойства hidden виджета значение true/YES или проверьте свойство hidden в Interface Builder. - person ghr; 04.05.2018

В файле InterfaceController.swift

Отлично работает в симуляторе и устройстве, также доступно в последней версии WatchOS 5

import AVFoundation

var player = AVAudioPlayer()
let audioSession = AVAudioSession.sharedInstance()


    override func willActivate() {
    // This method is called when watch view controller is about to be visible to user
    super.willActivate()
    
    do {
        // Working Reroutes to headset
        //            try session.setCategory(AVAudioSession.Category.playback,
        //                                    mode: .default,
        //                                    policy: .longForm,
        //                                    options: [])
        
        // Plays in watch speaker
        try audioSession.setCategory(AVAudioSession.Category.playback,
                                mode: .default,
                                policy: .default,
                                options: [])
    } catch let error {
        fatalError("*** Unable to set up the audio session: \(error.localizedDescription) ***")
    }
    if let path = Bundle.main.url(forResource: "piano", withExtension: "mp3") {
        let fileUrl = path
        do{
            player = try AVAudioPlayer(contentsOf: fileUrl)
        }
        catch
        {
            print("*** Unable to set up the audio player: \(error.localizedDescription) ***")
            // Handle the error here.
            return
        }
    }
}

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

     audioSession.activate(options: []) { (success, error) in
            guard error == nil else {
                print("*** error occurred: \(error!.localizedDescription) 
                     ***")
                // Handle the error here.
                return
            }
            if(success){
                // Play the audio file.
                self.player.play()
            }
        }

Если вы по-прежнему не можете воспроизводить аудио, это должно быть связано с тем, что вы получаете нулевое значение в аудиофайле, указанный аудиофайл не будет в правильном пакете, который вы ищете.

person Bharath Varma    schedule 28.03.2019