当从另一个类/控制器获取字符串时,打开耳朵文本到语音(语音)不工作(IOS,Objective c)

时间:2016-05-30 04:54:22

标签: objective-c xcode openears

我对目标c和OpenEars很新,所以请原谅我,如果我有一些杂乱的代码,如果我迷失在非常简单的问题中。

无论如何,我在这个应用程序中有两个控制器。第一个是默认的ViewController,第二个是我做的一个叫做ReplyManagerController的新的。

ViewController中的代码基本上使用了教程中的代码,并进行了一些(可能更多的)更改。

编辑:

该应用程序应该是一个基本的应用程序,用户说出某些内容并且应用程序会回复。

但最初的问题是,当我的ViewController从另一个类/控制器获取字符串时,我无法显示字符串或TTS工作。

我在下面的回答中提到,可能是因为我的另一个类在没有初始化self.fliteController的情况下调用了我的ViewController。

如何在初始化self.fliteController的情况下初始化ViewController?

ViewController.m

- (void) pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis recognitionScore:(NSString *)recognitionScore utteranceID:(NSString *)utteranceID {

NSString *strResult = hypothesis; //speech to text to string

ReplyManager* replyObject = [[ReplyManager alloc] init];
[replyObject speechResult:(NSString*)strResult viewController:self];
}

- (void) getReply:(NSString*)replyStr{

[self.fliteController say:replyStr withVoice:self.slt];

[self updateText:replyStr];
}

- (IBAction)updateText:(NSString*)replyStr{
labelOne.text = replyStr;
labelOne.adjustsFontSizeToFitWidth = YES;
labelOne.minimumFontSize = 0;

}

任何帮助都会很棒!谢谢!

ReplyManager.m

  - (void) speechResult:(NSString*)strResult {

    NSString *replystr;
    NSString *greetings = @"Hi!";
    NSString *sorry = @"Sorry I didn't catch that?";

    ViewController* getReply = [[ViewController alloc] init];

    if ([strResult isEqualToString:@"HELLO"])
      { 
       replystr = greetings;
       [getReply getReply:(NSString*)replystr];
      }
    else
      {
       replystr = sorry;
       [getReply getReply:(NSString*)replystr];
      }
}

编辑2:

viewDidLoad方法

 - (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view, typically from a nib.

   self.fliteController = [[OEFliteController alloc] init];
   self.slt = [[Slt alloc] init];

   self.openEarsEventsObserver = [[OEEventsObserver alloc] init];
   [self.openEarsEventsObserver setDelegate:self];
}

2 个答案:

答案 0 :(得分:1)

data.replaceAll("([\\w.]+)", "\"$1\"")
                  ^    ^ Make a character class
                      ^  Add period to the class

在这里,您初始化一个新的 if ($model->load(Yii::$app->request->post()) && $seo->load(Yii::$app->request->post()) && Model::validateMultiple([$model, $seo])) { ,其中最有可能定义ViewController* getReply = [[ViewController alloc] init]; 。您需要重用previos控制器,例如:

ViewController

因此您可以稍后使用已初始化的self.fliteController。总的来说,最好事先初始化 [replyObject speechResult:(NSString*)strResult viewController:self]; viewController之类的对象,而不是在回调方法中。

答案 1 :(得分:0)

这听起来像是一个时间问题,您在fliteController初始化之前尝试使用ViewController

fliteController课程中,您在哪里为-(void)viewDidLoad媒体资源分配值?在初始化程序中? ReplyManagerController

ViewController* getReply = [[ViewController alloc] init]; // Add these lines NSLog(getReply.fliteController); // Is this nil? [getReply.view layoutIfNeeded]; NSLog(getReply.fliteController); // Is it still nil? 添加:

fliteController

以上是否解决了这个问题?如果是这样,您可能正在初始化-(void)viewDidLoad中的NSLog。两个<div ng-controller="MyCtrl"> <button ng-click="char">Charged</button> <span>Total: {{ count }}</span> </div> 语句的结果是什么?