我正在使用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开始,可能会在开发期间打开日志事件而忘记关闭”
答案 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()
。相反,请使用stopSpeakingAtBoundary
和continueSpeaking
。这对我有用。
答案 2 :(得分:-1)
终于发现iOS9中存在一个错误,在XCODE新版本7.2更新和 iOS 9.2更新版本发布后不久, 我测试了相同的上述代码,文本到语音开始工作。