The jonki

呼ばれて飛び出てじょじょじょじょーんき

【iOS】【JPlayer】再生/停止の切り替えで音声認識をスタートして自動でストップする

前回の 【iOS】iPod Library Accessの使い方(5)音声入力を使ってiPodを操作する で作ったプレイヤーを少し改造しました。先日MDR-1RBTというBlueTooth対応のヘッドホンを買ったんですが、これは音楽の再生停止ができるしマイクもついているので、iPhoneを触らないで操作できるようにしました。
例えば外を歩いているときに、ヘッドフォンのところをポチポチと押して、「坂本真綾」としゃべると流れる音楽が坂本真綾になります。この寒い中、手袋外してポケットからiPhoneを取り出すなんてことをしなくて良くなりました。



GitHubにコードさらしてます

音声認識の開始

再生状態から、停止→再生、という切り替えを0.8秒以内に行う。カチカチっと再生ボタンを2回押すことに該当します

音声認識の終了

4.75秒で切れるタイマーを発動をスタートさせ、自動で切れるようにする


終了も何かしらのアクションを与えてやらせたかったんですが、音量の変化やiPodステータスは音声認識中は飛んでこないので時限性にしました。

- (void)handle_PlaybackStateChanged {
    NSTimeInterval time = [[NSDate date] timeIntervalSinceDate:_startTime];
    NSLog(@"%f", time);
    
    if (MPMusicPlaybackStatePlaying == [_player playbackState]
       && MPMusicPlaybackStatePaused == _lastState
       && time < 0.8f)
    {
        _isPushedArtistButton = YES;
        _isPushedSongButton = NO;
        [self startDictation];
    }
    
    _startTime = [NSDate date];
    _lastState = [_player playbackState];
}

- (void)startDictation {
    [_dictationController performSelector:@selector(startDictation)];
    _debugLabel.text = @"start dictation";
    _timer = [NSTimer scheduledTimerWithTimeInterval:4.75
                                              target:self
                                            selector:@selector(timerDidEnd)
                                            userInfo:nil
                                             repeats:NO];
}

- (void)timerDidEnd {
    [self stopDictation];
}