19

我正在玩 AVSpeechSynthesizer 并且总是遇到这些错误:

ERROR:     >aqsrv> 65: Exception caught in (null) - error -66634
ERROR:     AVAudioSessionUtilities.h:88: GetProperty_DefaultToZero: AudioSessionGetProperty ('disa') failed with error: '?ytp'

我的代码是:

AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
[synthesizer setDelegate:self];
speechSpeed = AVSpeechUtteranceMinimumSpeechRate;
AVSpeechUtterance *synUtt = [[AVSpeechUtterance alloc] initWithString:[[self text] text]];
[synUtt setRate:speechSpeed];
[synUtt setVoice:[AVSpeechSynthesisVoice voiceWithLanguage:languageCode]];
[synthesizer speakUtterance:synUtt];

有谁知道如何解决这些错误?

4

4 回答 4

9

我得到了上面的代码,只需进行最少的调整即可在模拟器上工作。

  1. 您的[[self text] text]代码可能是错误的(这是Exception caught in (null)错误的来源)。下面的代码对我有用。

    AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
    [synthesizer setDelegate:self]; // set your class to conform to the AVSpeechSynthesizerDelegate protocol
    float speechSpeed = AVSpeechUtteranceMinimumSpeechRate;
    AVSpeechUtterance *synUtt = [[AVSpeechUtterance alloc] initWithString:@"hello I am testing"];
    [synUtt setRate:speechSpeed];
    [synUtt setVoice:[AVSpeechSynthesisVoice voiceWithLanguage:[AVSpeechSynthesisVoice currentLanguageCode]]];
    [synthesizer speakUtterance:synUtt];
    

    当我说“工作”时,我的意思是我听到声音在我的模拟器中说出我的测试句子。

    我仍然看到这个警告:

    2013-09-21 11:37:56.454 Speech[5550:3a03] 11:37:56.454 错误:AVAudioSessionUtilities.h:88:GetProperty_DefaultToZero:AudioSessionGetProperty('disa')失败,错误:'?ytp'

  2. Xcode 5 似乎在尝试使用传统#import <AVFoundation/AVFoundation.h>的 SpeechSynthesis 代码工作时很慢,使用新的@import AVFoundation;.

于 2013-09-21T18:40:45.237 回答
4

我也看到了这些错误(使用 ARC 但不是 muli 线程),但仅在模拟器上,而不是在真实设备上。

我正在假设它们是模拟器限制并且可以安全地忽略 - 其他一切似乎都工作正常。

阿里

于 2013-10-27T09:41:13.887 回答
2

我在模拟器中得到完全相同的错误日志,但我对模拟器或 iPhone 5 设备上的代码没有问题,正如您在其他地方指出的那样。不同之处可能是我没有使用这 6 个可选的 AVSpeechSythesizerDelegates 中的任何一个,因此,我没有将它包含在我的类协议中。因此,为了帮助跟踪您的错误,您可以尝试不使用它。这是我的测试代码,它在逻辑上与您的相同,减去委托和任何 AVSpeechUtterance 存储分配:

-(void)tts:(NSString*)text
{

#define MY_SPEECH_RATE  0.1666
#define MY_SPEECH_MPX  1.55

    AVSpeechSynthesizer *textToSpeech = [[AVSpeechSynthesizer new]autorelease];
    NSString *language = [AVSpeechSynthesisVoice currentLanguageCode];
    if (language==nil) language = @"en-us";
    AVSpeechUtterance *speak = [AVSpeechUtterance speechUtteranceWithString:text];
    [speak setRate:MY_SPEECH_RATE];
    [speak setPitchMultiplier:MY_SPEECH_MPX];
    [speak setVoice:[AVSpeechSynthesisVoice voiceWithLanguage:language]];
    [textToSpeech speakUtterance:speak];
}

如您所见,我没有使用 ARC,但我认为这并没有什么不同。(也发布在开发者论坛中)

于 2013-10-04T02:40:59.960 回答
0

我不敢相信,但我实际上找到了解决方案:如果您没有插入耳机或任何音频输出源,AVPlayer 将无法工作,它会打印:

ERROR:     >aqsrv> 65: Exception caught in (null) - error -66634
于 2015-08-11T13:44:41.860 回答