如何检测iOS设备是否下载了语音文件?

时间:2015-10-04 05:31:17

标签: ios objective-c text-to-speech

我正在使用iOS文字转语音应用,并试图添加一个选项来使用Alex语音,这是iOS 9的新功能。我需要确定用户是否已下载了Alex语音设置 - >可访问性。我似乎无法找到如何做到这一点。

if ([AVSpeechSynthesisVoice voiceWithIdentifier:AVSpeechSynthesisVoiceIdentifierAlex] == "Not Found" ) {
    // Do something...
}

原因是其他语言的声音是标准的,以一定的速度回放,与Alex的声音不同。所以我有一个可用的应用程序,但如果用户没有下载语音,iOS会自动默认为基本语音,但它会以不正确的速率播放。如果我能检测到语音没有下载,我可以补偿差异和/或建议用户。

2 个答案:

答案 0 :(得分:3)

好的,所以我想我是在思考这个并认为它更复杂。解决方案很简单。

if (![AVSpeechSynthesisVoice voiceWithIdentifier:AVSpeechSynthesisVoiceIdentifierAlex]) {
        // Normalize the speech rate since the user hasn't downloaded the voice and/or trigger a notification that they need to go into settings and download the voice. 
    }

感谢所有看过这个的人和@CeceXX的编辑。希望这有助于其他人。

答案 1 :(得分:0)

这是一种方法。让我们坚持以Alex为例:

- (void)checkForAlex {

        // is Alex installed?
        BOOL alexInstalled = NO;
        NSArray *voices = [AVSpeechSynthesisVoice speechVoices];

        for (id voiceName in voices) {

            if ([[voiceName valueForKey:@"name"] isEqualToString:@"Alex"]) {
                alexInstalled = YES;
            }
        }

        // react accordingly
        if (alexInstalled) {
            NSLog(@"Alex is installed on this device.");
        } else {
            NSLog(@"Alex is not installed on this device.");
        }
    }

此方法循环播放所有已安装的语音并查询每个语音的名称。如果亚历克斯是其中之一,他已安装。

您可以查询的其他值是“语言”(返回类似en-US的语言代码)和质量(1 =标准,2 =增强)。