2015-03-21 4 views
1

Можно ли использовать OpenEars (или другой пакет) для доступа к речи с микрофона Apple Watch?Можно ли использовать OpenEars (или другое) для прослушивания и анализа речи с помощью микрофона Apple Watch?

Я хочу создать приложение, способное слушать речь, используя микрофон часов и ключевые слова для пятен.

+1

Я считаю, что в настоящее время вы не можете получить доступ к микрофону на часах, см. Подробности http://stackoverflow.com/questions/28963024/apple-watch-microphone-use –

+0

Вы можете получить результаты голосового диктовки, но вы можете получить доступ это так, как вы думаете. https://developer.apple.com/library/prerelease/ios/documentation/WatchKit/Reference/WKInterfaceController_class/index.html#//apple_ref/occ/instm/WKInterfaceController/presentTextInputControllerWithSuggestions:allowedInputMode:completion: – bgilham

ответ

1

По WatchOS 2,1 и прошивкой 9, я был в состоянии, что вы предлагаете, 2 различными способами:

ВАРИАНТ 1 - ЗАПИСЬ ФАЙЛА WAV И ЗАГРУЗИТЬ К СЕРВЕРУ ASR Я записал и сохранил WAV-файл на часах яблока. После этого я загрузил файл в платный провайдер распознавания речи, и все сработало нормально! Вот код для записи, замените интерфейс обновляя строки коды (и те, отладочные) с вашим собственным:

//RECORD AUDIO SAMPLE 
    var saveUrl: NSURL? //this var is initialized in the awakeWithContext method// 
    func recordAudio(){ 
     let duration = NSTimeInterval(5) 
     let recordOptions = 
     [WKAudioRecorderControllerOptionsMaximumDurationKey : duration] 
     // print("Recording to: "+(saveUrl?.description)!) 
     //CONSTRUCT AUDIO FILE URL 
     let fileManager = NSFileManager.defaultManager() 
     let container = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.artivoice.applewatch"); 
     let fileName = "audio.wav" 
     saveUrl = container?.URLByAppendingPathComponent(fileName) 
     presentAudioRecorderControllerWithOutputURL(saveUrl!, 
      preset: .WideBandSpeech, 
      options: recordOptions, 
      completion: { saved, error in 
       if let err = error { 
        print(err.description) 
        self.sendMessageToPhone("Recording error: "+err.description) 
       } 
       if saved { 
        self.btnPlay.setEnabled(true) 
        self.sendMessageToPhone("Audio was saved successfully.") 
        print("Audio Saved") 
        self.uploadAudioSample() 
       } 
     }) 
    } 

ВАРИАНТ 2 - Использование iWATCH в РОДНОЙ РЕЧИ ПРИЗНАНИЕ При таком подходе я беру оригинал, родной голосовое меню, но ...! Я не добавляю никаких кнопок, просто чистых ASR. Я запустил пустое голосовое меню, а затем восстановил строку, возвращаемую ASR. Вот код, наслаждайтесь:

func launchIWatchVoiceRecognition(){ 
    //you can see the empty array [], add options if it suits you well 
     self.presentTextInputControllerWithSuggestions([], allowedInputMode: WKTextInputMode.Plain, completion:{(results) -> Void in 
      let aResult = results?[0] as? String 
      if(!(aResult == nil)){ 
       print(aResult) //print result 
       self.sendMessageToPhone("Native ASR says: "+aResult!) 
       dispatch_async(dispatch_get_main_queue()) { 
        self.txtWatch.setText(aResult) //show result on UI 
       } 
      }//end if 
     })//end show voice menu 
    } 

ВАРИАНТ 2 молниеносно, но ВАРИАНТ 1 может быть более удобно, если вы хотите сделать некоторые дополнительные функции речи разведывательные (пользовательские словари, грамматики ...) Я бы рекомендовал ВАРИАНТ 1 для большинства пользователей. Voila !! Если вам нужны дополнительные подсказки, дайте мне знать!

1

Нет, на данный момент невозможно получить прямой доступ к микрофону Apple Watch. Я нашел ответ на официальном форуме разработчиков.

В настоящее время WatchKit не обеспечивает доступ к микрофону часов. Однако у вас есть доступ к микрофону iPhone из расширения WatchKit.

Вы можете использовать систему диктовки предложенную Apple, объясняется здесь: WatchKit: Speech to text conversion in WatchKit Apps

0

Я пытался записывать звук непосредственно из AppleWatch с AppleWatch Simulator.

Но это только производит звук с iPhone-симулятора. Вы можете сделать то же самое с настоящим AppleWatch для записи звука с iPhone-микрофона.

- (void) setupRecorder{ 
    [self configureAVAudioSession]; 

    // Set the audio file 
    NSArray *pathComponents = [NSArray arrayWithObjects: 
           [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], // NSUserDomainMask 
           @"AWAudio.wav", 
           nil]; 

    file = [NSURL fileURLWithPathComponents:pathComponents]; 

    // Setup audio session 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

    // Define the recorder setting 
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; 
    [recordSetting setValue:[NSNumber numberWithFloat:16000.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 
    [recordSetting setValue:[NSNumber numberWithBool:0] forKey:AVLinearPCMIsBigEndianKey]; 
    [recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 

    // Initiate and prepare the recorder 
    recorder = [[AVAudioRecorder alloc] initWithURL:file settings:recordSetting error:NULL]; 
    recorder.delegate = self; 
    recorder.meteringEnabled = YES; 

    [recorder prepareToRecord]; 
} 

Пример того, как запись:

if (player.playing) { 
     NSLog(@"player playing"); 
     [player stop]; 
    } 

    if (!recorder.recording) { 
     NSLog(@"recorder no recording"); 
     AVAudioSession *session = [AVAudioSession sharedInstance]; 
     [session setActive:YES error:nil]; 

     // Start recording 
     [recorder record]; 
     [self startAnimation]; 
     [self performSelector:@selector(finishRecordingAfterTwelveSeconds) withObject:nil afterDelay:12.0]; 
    } else { 

     // Pause recording 
     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     [audioSession setActive:NO error:nil]; 
     [self stopAnimation]; 
     [self setupFinishRecording]; 
    } 
+2

Из всего, что я прочитал , это либо не сработает, либо поступит к микрофону iPhone. Я предполагаю, что этот код является частью контроллера для просмотра на часах, и поскольку контроллер выполняется на iPhone, я предполагаю, что он использует микрофон iPhone. Я на 99,9% уверен, что микрофон Watch недоступен в текущем WatchKit. –