ios - 如何在微调中使用 OpenEars?

标签 ios objective-c jailbreak theos openears

我正在尝试将 OpenEars 包含在我正在制作的 theos 项目中,这是对越狱 iDevices 的调整,因为我的调整需要语音识别。通过将 OpenEars 框架与我的私有(private)框架放在同一文件夹中,我能够链接它,我目前正在尝试让教程代码正常工作。这是我当前的代码:

#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

这编译正常,但当它运行时,我收到这些错误消息并且我的设备崩溃:“在尝试引用预期位于路径(空)的请求的声学模型包时,找不到包。这意味着当监听循环开始时,它会由于缺少所需的资源而崩溃。找到声学模型包的问题可能是因为包的名称没有以它可以使用的方式提供给这个方法;例如,如果你正在尝试使用英语声学模型并且你已经将该包添加到你的应用程序项目中,你可以通过传递 [AcousticModel pathToAcousticModel:@"AcousticModelEnglish"](或 [AcousticModel pathToAcousticModel:@"AcousticModelSpanish"] 用于西类牙语包),无需在末尾附加“.bundle”,并确保包名称的拼写与实际包名称中显示的完全相同(包可以是可以在这个发行版的文件夹“框架”中看到。

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

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

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

非常感谢任何帮助实现此工作的帮助。谢谢!

最佳答案

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

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

[AcousticModel pathToAcousticModel:@"AcousticModelEnglish"]

@"/Library/OpenEars/AcousticModelEnglish.bundle"

关于ios - 如何在微调中使用 OpenEars?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889265/

相关文章:

iPhone应用程序在后台运行,无需后台程序(Cydia)

ios - 现有系统上的 Homekit 实现

ios - 无法在 Swift 2 中将类型 '__NSCFNumber' 的值转换为 'NSString'

ios - 如何在 objective-c 中的sqlite DB中存储音频

ios - cocoa iOS/触摸 : Keeping a subview of the UITableViewCell contentView right-aligned

iphone - 如何将字节数组转换为 wav 文件 <OOURAFFT>

ios - 天球中恒星的OpenGL可视化

ios - 如何在深度 sleep 的越狱 iPhone 上准确安排任务

iPhone:strace、dtruss、dtrace 或同等工具?

iphone - 检查基于 PFRelation 的 PFTableViewCell