如何在调整中使用OpenEars?

时间:2014-05-27 12:18:46

标签: ios objective-c jailbreak theos openears

我正在尝试将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” “到最后,并确保捆绑名称拼写与实际捆绑名称中显示的完全相同(捆绑包可以在此分发的文件夹”Framework“中看到。

如果这不能解决问题,很可能是因为声学模型包未成功导入应用项目及其mainBundle的根级别。这通常是因为声学模型包在最初应该被拖入“Framework”文件夹时从未被拖入您的应用程序项目,或者因为它被拖入而不是使用设置“为任何添加的文件夹创建组”在Xcode的“添加文件”对话框中,无意中选择了“为任何添加的文件夹创建文件夹引用”选项。要解决此问题,只需从应用程序中删除声学模型包或“Framework”文件夹,然后在Xcode的“添加文件”对话框中使用正确的“为任何添加的文件夹创建组”设置将其再次添加到您的应用程序项目中。“< / p>

我也在我的系统日志中收到这些消息:

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:]'

非常感谢任何有助于此工作的帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

我最近做了一个基于OpenEars的iOS调整,我遇到了同样的问题。由于您的调整不是普通应用,因此pathToAcousticModel提供的位置将不正确。最简单的解决方案是将声学模型束放在已知位置并对其进行硬编码。

例如,如果您使用theos,可以将AcousticModelEnglish.bundle放在“layout / Library / OpenEars /”文件夹中。然后替换

[AcousticModel pathToAcousticModel:@"AcousticModelEnglish"]

@"/Library/OpenEars/AcousticModelEnglish.bundle"

答案 1 :(得分:0)

我找到的最简单的解决方案是拖动&#34;框架&#34; OpenEars库中包含捆绑文件到&#34;框架&#34;的文件夹Xcode项目中的文件夹。拖动后,标记选项&#34;如果需要,复制项目&#34;。

enter image description here

第一眼看起来很奇怪,但这个解决方案有效,你不会改变代码。

您将获得类似的文件结构:

enter image description here

您还可以在&#34; Framework&#34;下删除这些库中最早的引用。保存项目清洁的文件夹。

干杯,

大卫