2

MacBook (OS 10.8.2) で音声認識を動作させようとしていますが、デリゲート メソッドでコールバックを取得できません。XCode 4.6 と ARC を使用した、簡単なテスト コードを次に示します。コンソールに「リスニング」出力が表示されます。「マイク」が画面に表示され、ESC キーを押すと、マイクのディスプレイに自分のスピーチ パターンが表示されますが、デリゲート コールバックはまだありません。何か基本的なものが欠けているに違いありませんが、私はそれを見つけていません。

私は多くのSOの質問を見てきましたが、これを解決するものはありません。コントロールパネルでキャリブレーションについて話している人もいますが、キャリブレーションについては何も見つかりません(以前のOSだったのでしょうか?)。

完全なプロジェクト ソースはgithubで入手できます。

#import "RBListener.h"

@interface RBListener() <NSSpeechRecognizerDelegate>

@property (nonatomic, strong, readonly) NSSpeechRecognizer* recognizer;
@property (nonatomic, strong)           NSArray*            commands;

@end

@implementation RBListener

@synthesize recognizer = _recognizer;

- (id)init
{
    self = [super init];
    if (self) {
        // initialize
        _commands = @[@"hi", @"yes", @"no", @"hello", @"good", @"time"];

        _recognizer = [[NSSpeechRecognizer alloc] init];
        _recognizer.delegate = self;
        _recognizer.commands = _commands;
        _recognizer.listensInForegroundOnly = NO;
        _recognizer.blocksOtherRecognizers  = YES;
        [_recognizer startListening];
        DLog(@"listening");
    }
    return self;
}


#pragma mark -
#pragma mark NSSpeechRecognizerDelegate methods
- (void)speechRecognizer:(NSSpeechRecognizer*)sender didRecognizeCommand:(id)command
{
    DLog(@"command: %@", command);
}

@end

ディクテーション中のスクリーンショット

4

1 に答える 1

1

RBListener インスタンスが残っていない (または作成されていない) 可能性が高いため、すべてのセットアップが完了した直後には、デリゲート メッセージを受信する RBListener インスタンスはありません。

最も簡単な方法は、XIB にアウトレットを作成し、それを RBListener インスタンスに接続することです。つまり、基本的な「NSObject」(プレーン キューブ) をライブラリから xib にドラッグし、そのクラスを「RBListener」に変更します。このインスタンスは、(IB に接続すると) アウトレットを介して参照でき、メモリ内に保持する必要があります。

プログラムで RBListener インスタンスを割り当て/初期化する場合は、どこかに保存していることを確認してください (たとえば、アプリデリゲートまたは NSDocument サブクラスなど、デザインに適した他のオブジェクトのインスタンス変数として)。それをプロパティに隠したり、シングルトンにしたりしない場合 (別の可能なアプローチ)、ARC はそれを使用する機会を得る前にそれを強制終了します。

これが役立つことを願っています。

于 2013-02-19T20:22:55.140 に答える