Swift ios9为资产构建MacinTalk语音:(null)

时间:2015-12-06 16:46:40

标签: swift2 avfoundation ios9 xcode7.1

我正在使用xcode 7,swift 2.0

我正在使用模拟器中的语音文本,而不是真正的iphone6 plus设备,iOS 9.我已正确导入AVFOUNDATION及其框架。

我试过......

@IBAction func SpeakTheList(sender: AnyObject) {
    let mySpeechUtterance = AVSpeechUtterance(string: speakString)

    //let voice = AVSpeechSynthesisVoice(language: "en-US")
   // mySpeechUtterance.voice = voice

    let voices = AVSpeechSynthesisVoice.speechVoices()

    for voice in voices {

        if "en-US" == voice.language {
            mySpeechUtterance.voice = voice
            print(voice.language)
            break;
        }
    }
    mySpeechSynthesizer.speakUtterance(mySpeechUtterance)
}

我收到以下错误: 为资产构建MacinTalk语音:(null) 在我的iphone6plus iOS 9中有什么需要做的设置,或者我必须下载一些东西。

我在Why I'm getting "Building MacinTalk voice for asset: (null)" in iOS device test

找到了一个建议

说... “自从iOS9开始,可能会在开发期间打开日志事件而忘记关闭”

3 个答案:

答案 0 :(得分:2)

只想添加到此(以及扩展名,原始帖子中的链接讨论):

我有两个设备:iPad2和iPad Air。它们运行的​​iOS版本完全相同(9.2,13C75)。我有以下目标-C ++函数,用于在Yosemite上使用Xcode 7.2(7C68)从Qt生成语音:

void iOSTTSClient::speakSpeedGender(const QString &msg, const float speechRateModifier, const QString &gender, const bool cutOff) {
    QString noHTML(msg);
    noHTML.remove(QRegularExpression("<[^<]*?>"));
    AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:noHTML.toNSString()];
    /* See https://forums.developer.apple.com/thread/18178 */
    const float baseSpeechRate = (m_iOSVersion < 9.0) ? 0.15 : AVSpeechUtteranceDefaultSpeechRate;
    utterance.rate = baseSpeechRate * speechRateModifier;
    NSString *locale;
    if (gender.compare("male", Qt::CaseInsensitive) == 0)
        locale = @"en-GB"; // "Daniel" by default
    else if (gender.compare("female", Qt::CaseInsensitive) == 0)
        locale = @"en-US"; // "Samantha" by default
    else
        locale = [AVSpeechSynthesisVoice currentLanguageCode];
    AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:locale];
    const QString errMsg = QString("Null pointer to AVSpeechSynthesisVoice (could not fetch voice for locale '%1')!").arg(QString::fromNSString(locale));
    Q_ASSERT_X(voice, "speakSpeedGender", errMsg.toLatin1().data());
    utterance.voice = voice;
    static const AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
    if (synthesizer.speaking && cutOff) {
        const bool stopped = [synthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
        Q_ASSERT_X(stopped, "speakSpeedGender", "Could not stop previous utterance!");
    }
    [synthesizer speakUtterance:utterance];
}

在iPad Air上,一切都很美妙:

  

为资产构建MacinTalk语音:   文件:///private/var/mobile/Library/Assets/com_apple_MobileAsset_MacinTalkVoiceAssets/db2bf75d6d3dbf8d4825a3ea16b1a879ac31466b.asset/AssetData/

但是在iPad2上,我什么都没听到,并得到以下信息:

  

为资产构建MacinTalk语音:( null)

出于好奇,我启动了iPad2模拟器并在那里运行我的应用程序。我还有另一个控制台消息:

  

AXSpeechAssetDownloader |误差| ASAssetQuery错误获取结果   (对于com.apple.MobileAsset.MacinTalkVoiceAssets)错误域= ASError   代码= 21&#34;无法复制资产信息&#34;   UserInfo = {NSDescription =无法复制资产信息}

然而,我听到了演讲!我意识到我戴着耳机。果然,当我把耳塞插入iPad2时,我也听到了那里的演讲。所以现在我正在寻找有关它的信息。以下链接是最近的,有这个为我工作的伏都教的常见分类(没有一个帮助我,但也许会帮助其他人解决这个问题):

https://forums.developer.apple.com/thread/18444

总结:TTS&#34;工作&#34;但没有耳机/耳塞则不一定听得见。它似乎是iOS 9.2的硬件设置问题。控制台消息可能相关也可能不相关。

最后更新:为了充分,如果羞怯,披露,我认为我分享了我最终如何解决这个问题。有问题的iPad2使用了侧面开关:&#34;选项设置为&#34;静音&#34;。我独自离开了,但继续切换开关本身。重击!一切都没有耳塞。因此,如果您无法听到文字转语音,请尝试耳塞。如果可行,请检查您的设备是否设置为静音!

答案 1 :(得分:0)

请勿使用pauseSpeakingAtBoundary()。相反,请使用stopSpeakingAtBoundarycontinueSpeaking。这对我有用。

答案 2 :(得分:-1)

终于发现iOS9中存在一个错误,在XCODE新版本7.2更新和 iOS 9.2更新版本发布后不久, 我测试了相同的上述代码,文本到语音开始工作。