Есть ли способ воспроизвести звук через динамик Apple Watch? Я не смог найти какую-либо документацию в Интернете.
Воспроизведение звука через динамик Apple Watch
Ответы (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];
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) и работал нормально. Не забудьте установить целевое членство аудиофайла в наборе часов.
Невозможно воспроизвести звук из динамика Apple Watch, но вы можете запустить воспроизведение звукового файла на iPhone, вот тема об этом
- PresentMediaPlayerControllerWithURL:options:completion: (Новое в watchOS 2.0)
URL-адрес URL-адрес медиафайла, который вы хотите воспроизвести. URL-адрес должен указывать файл; потоковое мультимедиа не поддерживается. Файл может содержать аудио, видео или и то, и другое.
Если вы укажете URL-адрес для файла на удаленном сервере, этот метод сначала загружает файл и отображает индикатор выполнения, показывающий ход операции. Поскольку WatchKit использует App Transport Security (ATS) при загрузке файлов с веб-сервера, файл должен находиться на защищенном сервере, а URL-адрес должен использовать схему https. Если ваш сервер не поддерживает безопасность уровня ATS, загрузите файл самостоятельно, прежде чем воспроизводить его.
Используйте общий контейнер, следите за расширениями для хранения файла.
Любой звук, который вы воспроизводите с помощью этого метода, направляется на сопряженное аудиоустройство Bluetooth, если оно доступно. Если аудиоустройство Bluetooth недоступно, звук направляется на динамик Apple Watch.
Для WatchOS3 ответом на исходный вопрос является WKInterfaceInlineMovie https://developer.apple.com/reference/watchkit/wkinterfaceinlinemovie
Вы можете скрыть виджет, чтобы он не изменил дизайн вашего интерфейса. Он воспроизводит аудиофайлы через динамик часов, если динамик Bluetooth не подключен.
В файле 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()
}
}
Если вы по-прежнему не можете воспроизводить аудио, это должно быть связано с тем, что вы получаете нулевое значение в аудиофайле, указанный аудиофайл не будет в правильном пакете, который вы ищете.