我正在尝试将OpenEars包括在我正在进行的theos项目中,这是一个针对越狱的iDevices的调整,因为我需要语音识别来进行调整。通过将OpenEars框架放在与我的私有框架相同的文件夹中,我能够链接到它,目前我正在努力使教程代码正常工作。以下是我的当前代码:
#import <OpenEars/LanguageModelGenerator.h>
#import <OpenEars/PocketsphinxController.h>
#import <OpenEars/AcousticModel.h>
%hook SBLockScreenView
-(void)setCustomSlideToUnlockText:(id)arg1 {
LanguageModelGenerator *lmGenerator = [[LanguageModelGenerator alloc] init];
NSArray *words = [NSArray arrayWithObjects:@"WORD", @"STATEMENT", @"OTHER WORD", @"A PHRASE", nil];
NSString *name = @"NameIWantForMyLanguageModelFiles";
NSError *err = [lmGenerator generateLanguageModelFromArray:words withFilesNamed:name forAcousticModelAtPath:[AcousticModel pathToModel:@"AcousticModelEnglish"]];
//NSError* err = [lmGenerator generateLanguageModelFromArray:words withFilesNamed:name forAcousticModelAtPath:imagePath];
//NSError* err = [[NSError alloc] init];
NSDictionary *languageGeneratorResults = nil;
NSString *lmPath = nil;
NSString *dicPath = nil;
if([err code] == noErr) {
languageGeneratorResults = [err userInfo];
lmPath = [languageGeneratorResults objectForKey:@"LMPath"];
dicPath = [languageGeneratorResults objectForKey:@"DictionaryPath"];
}
else {
NSLog(@"Error: %@",[err localizedDescription]);
}
%orig;
}
%end这编译得很好,但是当它运行时,我得到了这些错误消息,我的设备崩溃了:“当试图引用所请求的声学模型包(它被期望位于路径(null) )时,没有找到任何绑定。这意味着当侦听循环开始时,由于缺少所需的资源,它将崩溃。找出声学模型包的问题可能是因为该包的名称没有以它可以使用的方式命名;例如,如果您试图使用英语声学模型,并且您已经将该包添加到您的应用程序项目中,您将通过传递[AcousticModel pathToAcousticModel:@"AcousticModelEnglish"] (或西班牙语包的[AcousticModel pathToAcousticModel:@"AcousticModelSpanish"] )来调用此方法,而不将".bundle“追加到末尾,并确保包名的拼写与实际包名中的拼写完全一致(可以在此发行版的文件夹”框架“中看到该包)。
如果这不能解决问题,很可能是因为声学模型包没有成功地导入应用程序项目及其mainBundle的根级。这通常是因为当"Framework“文件夹最初应该被拖动时,声学模型包从未被拖到应用程序项目中,或者是因为它被拖了进来,但是没有使用Xcode的"Add Files”对话框中的“任何添加文件夹的创建组”设置,而是无意中选择了“为任何添加的文件夹创建文件夹引用”选项。要解决这一问题,只需从应用程序中删除声学模型包或"Framework“文件夹,并在Xcode的"Add Files”对话框中设置正确的“为任何添加的文件夹创建组”,将其再次添加到应用程序项目中。
我还在我的syslog中获得了以下消息:
May 27 00:54:49 Phillips-iPhone SpringBoard[17785] <Warning>: acousticModelPath is (null)
May 27 00:54:49 Phillips-iPhone SpringBoard[17785] <Warning>: Error: the default phonetic dictionary (null)/LanguageModelGeneratorLookupList.text can't be found in the app bundle but the app is attempting to access it, most likely there will be a crash now.
May 27 00:54:49 Phillips-iPhone SpringBoard[17785] <Warning>: Error while trying to load the pronunciation dictionary: Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260.)" UserInfo=0x1883cbb0 {NSFilePath=(null)/LanguageModelGeneratorLookupList.text, NSUnderlyingError=0x1883cb40 "The operation couldn’t be completed. No such file or directory"}
May 27 00:54:49 Phillips-iPhone SpringBoard[17785] <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid domain=nil in -[NSError initWithDomain:code:userInfo:]'任何帮助使这项工作是非常感谢的。谢谢!
发布于 2014-05-29 05:52:16
最近,我做了一个基于OpenEars的iOS调整,并经历了同样的问题。因为您的调整不是一个正常的应用程序,pathToAcousticModel给出的位置将是不正确的。最简单的解决方案是将声学模型包放在一个已知的位置,并对其进行硬编码。
例如,如果您正在使用theos,您可以将AcousticModelEnglish.bundle放在文件夹"layout/Library/OpenEars/“中。然后替换
[AcousticModel pathToAcousticModel:@"AcousticModelEnglish"]使用
@"/Library/OpenEars/AcousticModelEnglish.bundle"发布于 2015-09-14 17:36:32
我找到的最简单的解决方案是将包含包文件的OpenEars库中的"Framework“文件夹拖到Xcode项目中的”Framework“文件夹中。拖动后,标记选项“复制项目,如果需要”。

这听起来很奇怪,但这个解决方案有效,您不会更改代码。
您将得到这样的文件结构:

您还可以在"Framework“文件夹下删除这些库中最古老的引用,以保持项目的清洁。
干杯,
大卫
https://stackoverflow.com/questions/23889265
复制相似问题