【问题标题】:speech framework integration showing error语音框架集成显示错误
【发布时间】:2017-01-04 06:29:38
【问题描述】:

我正在尝试使用语音框架将语音转换为文本并在 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 块,但结果为 nil,并且出现如下错误:

错误域=kAFAssistantErrorDomain 代码=203“损坏” UserInfo={NSUnderlyingError=0x14651450 {错误 Domain=SiriSpeechErrorDomain Code=102 "(null)"}, NSLocalizedDescription=损坏}

【问题讨论】:

  • 您找到解决方案了吗?我面临同样的问题...如果您找到了解决方案,请告诉我。
  • @RaviKiran,我也面临着类似的问题。请让我知道您遇到的问题的解决方案。谢谢。
  • @csharpnewbie 希望我的回答对你有所帮助。
  • 我最终只是重新启动了我的手机。

标签: ios objective-c sirikit


【解决方案1】:

问题是这段代码缺少附加识别缓冲区的代码,所以要解决这个问题, 在[_audioEngine prepare]; 行之前添加以下代码

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

这解决了我的问题。希望对你也有帮助。

【讨论】:

  • 谢谢。但是我的代码中已经有了这个,我仍然随机遇到问题。对我来说,问题是我也遇到了问题 '[avas] ERROR: AVAudioSession.mm:1049: -[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O.在停用音频会话之前,应停止或暂停所有 I/O。并且不确定如何调试问题。你能帮忙吗?
  • 在激活会话之前你有这个代码吗.. if (_audioEngine.isRunning) { [_audioEngine stop]; [_recognitionRequest endAudio]; }
  • 是的。我确实有那段代码。我在其中添加了记录器,它也没有显示任何正在运行的音频引擎。
  • @csharpnewbie 如果你解决了这个问题,你还记得吗?
猜你喜欢
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 2013-12-01
  • 2014-09-16
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多