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