Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @property (strong, nonatomic) AVAudioEngine * audioEngine;
- @property (strong, nonatomic) SFSpeechRecognizer * speechRecognizer;
- @property (strong, nonatomic) SFSpeechAudioBufferRecognitionRequest * request;
- @property (strong, nonatomic) SFSpeechRecognitionTask * recognitionTask;
- @property (strong, nonatomic) AVAudioInputNode * node;
- - (void) initialization {
- self.audioEngine = [[AVAudioEngine alloc] init];
- NSLocale * local = [[NSLocale alloc] initWithLocaleIdentifier:@"ru_RU"];
- self.speechRecognizer = [[SFSpeechRecognizer alloc] initWithLocale:local];
- [SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {
- dispatch_async(dispatch_get_main_queue(), ^{
- switch (status) {
- case SFSpeechRecognizerAuthorizationStatusNotDetermined:
- NSLog(@"SFSpeechRecognizerAuthorizationStatusNotDetermined");
- break;
- case SFSpeechRecognizerAuthorizationStatusRestricted:
- NSLog(@"SFSpeechRecognizerAuthorizationStatusRestricted");
- break;
- case SFSpeechRecognizerAuthorizationStatusDenied:
- NSLog(@"SFSpeechRecognizerAuthorizationStatusDenied");
- break;
- case SFSpeechRecognizerAuthorizationStatusAuthorized:
- NSLog(@"SFSpeechRecognizerAuthorizationStatusAuthorized");
- break;
- }
- });
- }];
- - (void) startRecognitionWithCompletion:(void(^)(NSString *recodingString))completion {
- if (self.request == nil) {
- self.request = [[SFSpeechAudioBufferRecognitionRequest alloc] init];
- }
- self.node = self.audioEngine.inputNode;
- AVAudioFormat * recognitionFormat = [self.node outputFormatForBus:0];
- [self.node installTapOnBus:0 bufferSize:1024 format:recognitionFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
- [self.request appendAudioPCMBuffer:buffer];
- }];
- [self.audioEngine prepare];
- [self.audioEngine startAndReturnError:nil];
- self.recognitionTask = [self.speechRecognizer recognitionTaskWithRequest:self.request resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {
- if (result.bestTranscription != nil) {
- dispatch_async(dispatch_get_main_queue(), ^{
- completion([result.bestTranscription formattedString]);
- });
- } else {
- NSLog(@"%@", [error localizedDescription]);
- }
- }];
- - (void)stopRecording {
- dispatch_async(dispatch_get_main_queue(), ^{
- if(self.audioEngine.isRunning){
- if (self.node == [self.audioEngine inputNode]) {
- [self.node removeTapOnBus:0];
- [self.node reset];
- }
- [self.audioEngine stop];
- [self.request endAudio];
- [self.recognitionTask cancel];
- self.recognitionTask = nil;
- self.request = nil;
- }
- });
Add Comment
Please, Sign In to add comment