iOS是否必须使用语音识别权限?

时间:2018-03-08 05:49:34

标签: ios objective-c speech-recognition

我正在使用语音识别来搜索具有用户语音的任何对象。我的代码如下。但我意识到一些使用语音识别器(不确定他们的技术)的Apple Market应用程序,他们不需要获得语音识别器的许可。 但是我的代码获得了许可,而权限就是那样

  

“[AppName]想要访问语音识别。来自的语音数据   此应用程序将被发送到Apple处理您的请求。这将   还帮助Apple改进其语音识别技术。“

这可能会对用户造成干扰。 你有什么主意吗?我不想要求许可。

audioEngine = [[AVAudioEngine alloc] init];

if (recognitionTask) {
    [recognitionTask cancel];
    recognitionTask = nil;
}

NSError *error;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryRecord error:&error];
[audioSession setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];

if (@available(iOS 10.0, *)) {
    recognitionRequest = [[SFSpeechAudioBufferRecognitionRequest alloc] init];
} else {}

AVAudioInputNode *inputNode = audioEngine.inputNode;
recognitionRequest.shouldReportPartialResults = YES;
if (@available(iOS 10.0, *)) {
    recognitionTask = [speechRecognizer recognitionTaskWithRequest:recognitionRequest resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error){
        BOOL isFinal = isSpeechStop;
        if (!isFinal) {
            NSLog(@"RESULT:%@",result.bestTranscription.formattedString);
           isFinal = !result.isFinal;
            }
        }
        if (error || isFinal) {
            [audioEngine stop];
            [inputNode removeTapOnBus:0];
            recognitionRequest = nil;
            [recognitionTask cancel];
            recognitionTask = nil;

        }
}

AVAudioFormat *recordingFormat = [inputNode outputFormatForBus:0];
[inputNode installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
    [recognitionRequest appendAudioPCMBuffer:buffer];
}];

[audioEngine prepare];
[audioEngine startAndReturnError:&error];

1 个答案:

答案 0 :(得分:1)

如果您不想要求用户许可,则您需要使用第三方SDK。我不想专门宣传任何内容,因此我不会按名称提及SDK。他们通过搜索很容易找到。

当然,他们需要麦克风许可。