2017-01-04 24 views
4

音声をテキストに変換し、音声フレームワークを使用してUILabelに表示しようとしています。私は、ユーザーがマイクを使用することを許可しました。それをデバッグするrecognitionTaskWithRequestブロックに入ってくるが、結果がnilであると、このようなエラーを取得していますが音声フレームワーク統合エラー表示

は、ここに私のコード

- (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]; 
} 

です:

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

+0

解決方法はありましたか?私は同じ問題に直面しています...あなたが解決策を見つけたら教えてください。 –

+0

@RaviKiranも同様の問題に直面しています。 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:]:I/Oを実行しているオーディオセッションを無効にします。オーディオセッションを無効にする前に、すべてのI/Oを停止または一時停止する必要があります。問題をデバッグする方法がわからないことがあります。あなたは助けてもらえますか? – csharpnewbie

+0

セッションをアクティブ化する前にこのコードをお持ちですか? if(_audioEngine.isRunning){ [_audioEngine stop]; [_recognitionRequest endAudio]; } –

+0

はい。私はそのコードを持っています。私はその中にロガーを追加しました、そして、それはどんなオーディオエンジンも実行していません。 – csharpnewbie

関連する問題