簡體   English   中英

從另一個類/控制器(IOS,Objective c)獲取字符串時,打開耳朵文本到語音(語音)不起作用

[英]Open ears text to speech (voice) not working when getting string from another class/controller (IOS, Objective c)

我對objective c和OpenEars很陌生,所以如果我有一些混亂的代碼並且我迷失在非常簡單的問題中,請原諒我。

無論如何,我在這個應用程序中有兩個控制器。 第一個是默認的 ViewController,第二個是我創建的名為 ReplyManagerController 的新控制器。

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

編輯:

該應用程序應該是一個基本的應用程序,用戶說一些東西,應用程序回復。

但最初的問題是,當我的 ViewController 從另一個類/控制器獲取字符串時,我無法顯示字符串或 TTS 工作。

我下面的答案提到這可能是因為我的另一個類在沒有初始化 self.fliteController 的情況下調用了我的 ViewController。

我將如何使用初始化的 self.fliteController 來初始化 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;

}

任何幫助都會很棒! 謝謝!

回復經理.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];
}
ViewController* getReply = [[ViewController alloc] init];

在這里,您初始化一個新的ViewController ,它最有可能沒有定義self.fliteController 您需要重用 previos 控制器,例如像這樣:

   [replyObject speechResult:(NSString*)strResult viewController:self];

所以你可以稍后使用已經初始化的viewController 總的來說,最好事先初始化像viewControllerreplyController這樣的對象,而不是在回調方法中。

聽起來像是在初始化之前嘗試使用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?

以上是否解決了問題? 如果是這樣,您可能正在-(void)viewDidLoad初始化fliteController 兩個NSLog語句的結果是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM