WatchKit: системные звуки разрешены?
Я читал несколько постов, касающихся воспроизведения звуков в Apple Watch
и кажется, что это невозможно... Однако такие посты имеют дело с аудиофайлами, и я хотел бы знать, можно ли воспроизводить хотя бы системные звуки, и могут ли уведомления, доставленные на часы, воспроизводить системный звук как уведомления в iPhone и iPad можно. Я не нахожу ничего связанного со звуками ни в Руководстве по интерфейсу Apple Watch Human Interface, ни в руководстве по программированию Apple Watch.
Спасибо
3 ответа
Вы можете загрузить свой аудиофайл или системный звук и воспроизводить его через динамик Apple Watch. Использование WKAudioFilePlayer для воспроизведения аудиофайла требует подключения наушников Bluetooth, подключенных к Apple Watch, для воспроизведения звука.
Чтобы воспроизвести любой из немногих тактильных звуков обратной связи с вибрацией с помощью WKInterfaceDevice:
[[WKInterfaceDevice currentDevice] playHaptic:WKHapticTypeFailure]
Чтобы воспроизвести любой аудиофайл, используйте AVAudioEngine:
1) Добавьте AVFoundation.framework в свой список фреймворков.
2) В файл.h положить
#import <AVFoundation/AVFoundation.h>
@property (nonatomic) AVAudioEngine *audioEngine;
@property (nonatomic) AVAudioPlayerNode *playerNode;
@property (nonatomic) AVAudioFile *audioFile;
@property (nonatomic) AVAudioPCMBuffer *audioPCMBuffer;
3) В файл.m положить
NSError *error = nil;
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"alarm" withExtension:@"wav"];
self.audioFile = [[AVAudioFile alloc] initForReading:fileURL error:&error];
if (error) {
NSLog(@"error");
return;
}
self.audioEngine = [[AVAudioEngine alloc]init];
AVAudioFormat *audioFormat = self.audioFile.processingFormat;
AVAudioFrameCount length = (AVAudioFrameCount)self.audioFile.length;
self.audioPCMBuffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:audioFormat frameCapacity:length];
[self.audioFile readIntoBuffer:self.audioPCMBuffer error:nil];
AVAudioMixerNode *mixerNode = [self.audioEngine mainMixerNode];
self.playerNode = [[AVAudioPlayerNode alloc] init];
[self.audioEngine attachNode:self.playerNode];
[self.audioEngine connect:self.playerNode to:mixerNode format:self.audioFile.processingFormat];
[self.audioEngine startAndReturnError:&error];
[self.playerNode scheduleFile:self.audioFile atTime:nil completionHandler:nil];
[self.playerNode play];
Вы можете использовать эти классы из watchOS 2.0 дальше. Существует документация для классов playHaptic: и AVAudioEngine.
Я надеюсь, что это поможет вам решить вашу проблему.
В watchOS 2 это теперь возможно. Из-за NDA я не могу более подробно остановиться. Пожалуйста, ознакомьтесь с документацией разработчика, предоставленной Apple.