2

Я пытаюсь создать функцию аудиозаписи, используя симулятор Apple Watch (Watch OS 2 beta). Но я получаю следующую ошибку при вызове presentAudioRecorderControllerWithOutputURL.Возможна ли запись звука с помощью симулятора Apple Watch?

Ошибка: Ошибка Доменные = com.apple.watchkit.errors Code = 3 "(нуль)"

-(void)didSelectRowWithTag:(NSInteger)tag 
{ 
    NSString*strPath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *strAudioFileName = [strPath stringByAppendingString:[NSString stringWithFormat:@"/%d.caf",tag]]; 
    NSURL *urlOutPut = [NSURL fileURLWithPath:strAudioFileName]; 
    NSDictionary *dictMaxAudioRec = @{@"WKAudioRecorderControllerOptionsMaximumDurationKey":@1800}; 

    [self presentAudioRecorderControllerWithOutputURL:urlOutPut preset:WKAudioRecorderPresetHighQualityAudio options:dictMaxAudioRec completion:^(BOOL didSave, NSError * error) { 
     if(didSave) 
     { 
      NSLog(@"File Saved...."); 
     } 

     NSLog(@"%@",error); 
    }]; 
} 
+0

Выше образца кода работали нормально, если вы изменить формат файла от ".caf" до ".wav", ".mp4" или ".m4a", как указано ниже @lostAtSeaJoshua – Rahul

ответ

3

Watchkit код ошибки 3 Watchkit недопустимую ошибку аргумента. Похоже, что ошибка может быть в вашем пути к выходному файлу. Вы добавляете его с именем .caf, который не поддерживает тип вывода аудиофайлов. Из документации в нем указывается параметр URL:

The URL at which to store the recorded output. The filename extension determines the type of audio to record. You may specify the extensions .wav, .mp4, and .m4a.

Вот пример кода, который работает для записи звука.

let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] 
let url = NSURL(fileURLWithPath: path.stringByAppendingPathComponent("dictation.wav")) 
self.presentAudioRecordingControllerWithOutputURL(url, preset: WKAudioRecordingPreset.NarrowBandSpeech, maximumDuration: 30, actionTitle: "Save") { (didSave, error) -> Void in 
if let error = error { 
    print("error: \(error)") 
    return 
} 

if didSave { 
    print("saved!") 
    } 
} 

С этим исправлением я все еще не уверен, что симулятор будет поддерживать запись звука. Симулятор не поддерживает все вызовы API, и вам может потребоваться настоящие часы для тестирования. Пожалуйста, сообщите нам о результатах.

+1

Спасибо .. Это действительно помогло. Фактической проблемой был формат файла .caf. После того как я изменил его на «.m4a», он также открывает AudioRecordingController в симуляторе Apple Watch. Я получил записанный звуковой файл с помощью симулятора **, но ** из-за ** Аппаратное (микрофон) Ограничение в симуляторе **, я не слышу аудио. – Rahul

+0

@Rahul большое спасибо за продолжение. – lostAtSeaJoshua

0

Здесь вы идете, я не думаю, что другие ответы являются полными или правильными, как этот (WatchOS 2,1, января 2016 г.):

func recordAudio(){ 
     let duration = NSTimeInterval(5) 
     let recordOptions = 
     [WKAudioRecorderControllerOptionsMaximumDurationKey : duration] 
     //CONSTRUCT AUDIO FILE URL 
     let fileManager = NSFileManager.defaultManager() 
     let container = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.artificialsolutions.applewatch") 
     let fileName = "audio.wav" 
     saveUrl = container?.URLByAppendingPathComponent(fileName) 
     presentAudioRecorderControllerWithOutputURL(saveUrl!, 
      preset: .NarrowBandSpeech, 
      options: recordOptions, 
      completion: { saved, error in 
       if let err = error { 
        print(err.description) 
       } 
       if saved { 
        print("Audio Saved") 
       } 
     }) 
    } 
Смежные вопросы