2017-01-04 9 views
4

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

Вот мой код

- (void)startRecording { 
if (_recognitionTask != nil) { 
[_recognitionTask cancel]; 
_recognitionTask = nil; 
} 

NSError *error; 

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryRecord error:&error]; 
[audioSession setMode:AVAudioSessionModeMeasurement error:&error]; 
[audioSession setActive:YES error:&error]; 

_recognitionRequest = [[SFSpeechAudioBufferRecognitionRequest alloc] init]; 
_recognitionTask = [[SFSpeechRecognitionTask alloc] init]; 

AVAudioInputNode *inputNode = [_audioEngine inputNode]; 

_recognitionRequest.shouldReportPartialResults = YES; 

_recognitionTask = [_speechRecognizer  recognitionTaskWithRequest:_recognitionRequest resultHandler:^(SFSpeechRecognitionResult *result, NSError *error) { 
BOOL isFinal = NO; 

if (result != nil) { 
    _textLabel.text = [[result bestTranscription] formattedString]; 
    isFinal = result.isFinal; 
} 

NSLog(@"%@", error); 

if (error != nil || isFinal) { 
    _textLabel.text = [NSString stringWithFormat:@"%@", error]; 
    [inputNode removeTapOnBus:0]; 
    [_audioEngine stop]; 
    _recognitionRequest = nil; 
    _recognitionTask = nil; 
} 
}]; 

[_audioEngine prepare]; 
[_audioEngine startAndReturnError:nil]; 
} 

При отладке это входит в блок recognitionTaskWithRequest, но результат равен нулю, и я получаю сообщение об ошибке, как это:

Error Domain=kAFAssistantErrorDomain Code=203 "Corrupt" UserInfo={NSUnderlyingError=0x14651450 {Error Domain=SiriSpeechErrorDomain Code=102 "(null)"}, NSLocalizedDescription=Corrupt}

+0

Вы получили решение? Я столкнулся с тем же вопросом ... Пожалуйста, дайте мне знать, если вы нашли решение. –

+0

@RaviKiran, Am сталкиваются с аналогичной проблемой тоже. Pls сообщит мне о решении проблемы, с которой вы столкнулись. Благодарю. – csharpnewbie

+0

@csharpnewbie Я надеюсь, что мой ответ поможет вам. –

ответ

0

Проблема заключается в том, что этот код пропускает код для добавления буфера распознавания, поэтому для решения этой проблемы Перед строкой [_audioEngine prepare]; введите код

[_audioEngine.inputNode installTapOnBus:0 bufferSize:1024 format:[inputNode inputFormatForBus:0] block:^(AVAudioPCMBuffer *buffer, AVAudioTime *when){ 
       //NSLog(@"Tapped"); 
       [self.recognitionRequest appendAudioPCMBuffer:buffer]; 
      }]; 

Это решило мою проблему. Надеюсь, это поможет вам.

+0

спасибо. Но у меня уже есть это в моем коде, и я все еще получаю проблему случайным образом. Проблема для меня - я также получаю проблему «[avas] ERROR: AVAudioSession.mm:1049: - [AVAudioSession setActive: withOptions: error:]: деактивация аудио сессии с запуском ввода-вывода. Все операции ввода/вывода должны быть остановлены или приостановлены до деактивации сеанса аудио. и я не уверен, как отладить проблему. Можете ли вы помочь? – csharpnewbie

+0

У вас есть этот код, прежде чем активировать сеанс. if (_audioEngine.isRunning) { [_audioEngine stop]; [_recognitionRequest endAudio]; } –

+0

да. У меня есть этот код. Я добавил в него регистратор, и он не показывает, какой звуковой движок работает. – csharpnewbie

 Смежные вопросы

  • Нет связанных вопросов^_^