Apple Watchのスピーカーから音を再生する方法はありますか?オンラインでドキュメントを見つけることができませんでした。
これは、watchOS2以降で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];
Apple Watchのスピーカーからサウンドを再生することはできませんが、iPhoneでサウンドファイルの再生をトリガーすることはできます。これは スレッド です。
WatchOS3の場合、元の質問に対する答えはWKInterfaceInlineMovie https://developer.Apple.com/reference/watchkit/wkinterfaceinlinemovie です。
ウィジェットを非表示にして、インターフェイスデザインを変更しないようにすることができます。ブルートゥーススピーカーが接続されていない場合は、時計のスピーカーからオーディオファイルを再生します。
URL再生するメディアファイルのURL。 URLはファイルを指定する必要があります。ストリーミングメディアはサポートされていません。ファイルには、オーディオ、ビデオ、またはその両方が含まれている場合があります。
リモートサーバー上のファイルのURLを指定すると、このメソッドは最初にファイルをダウンロードし、操作の進行状況を示す進行状況インジケーターを表示します。 WatchKitはWebサーバーからファイルをダウンロードするときにAppTransport Security(ATS)を使用するため、ファイルは安全なサーバー上にある必要があり、URLはhttpsスキームを使用する必要があります。サーバーがATSレベルのセキュリティをサポートしていない場合は、ファイルを再生する前に自分でダウンロードしてください。
ファイルの保存には、sharedcontainer、watchextensionsを使用してください。
この方法を使用して再生するオーディオは、ペアリングされたBluetoothオーディオデバイスが利用可能な場合はそれにルーティングされます。 Bluetoothオーディオデバイスが利用できない場合、オーディオはAppleウォッチスピーカーにルーティングされます。
シミュレーターとデバイスで正常に動作します最新のWatchOS5でも利用可能
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()
}
}
それでもオーディオを再生できない場合は、オーディオファイルで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)スピーカーからカスタムサウンドを再生し、問題なく動作しました。オーディオファイルのターゲットメンバーシップをウォッチキットに設定することを忘れないでください。