WatchKit: системные звуки разрешены?

Я читал несколько постов, касающихся воспроизведения звуков в Apple Watch и кажется, что это невозможно... Однако такие посты имеют дело с аудиофайлами, и я хотел бы знать, можно ли воспроизводить хотя бы системные звуки, и могут ли уведомления, доставленные на часы, воспроизводить системный звук как уведомления в iPhone и iPad можно. Я не нахожу ничего связанного со звуками ни в Руководстве по интерфейсу Apple Watch Human Interface, ни в руководстве по программированию Apple Watch.

Спасибо

3 ответа

Невозможно воспроизвести любой звук с помощью API WatchKit.

Вы можете загрузить свой аудиофайл или системный звук и воспроизводить его через динамик 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.

Другие вопросы по тегам