Остановить AudioUnit речь

Я реализую синтезатор речи с использованием Audio Unit, основываясь на примерах Core Audio. Все работает как положено, за исключением того, что StopSpeech и StopSpeechAt, похоже, ничего не делают.

Вот методы разговора и остановки:

void
Synthesizer::speak( const string &text )
{
    mIsSpeaking = true;
    mLastText = text;

    NSString *ns_text = [NSString stringWithCString:text.c_str()
                                           encoding:[NSString defaultCStringEncoding]];
    CFStringRef cf_text = (__bridge CFStringRef)ns_text;

    CheckError( SpeakCFString( mAuChannel, cf_text, NULL ), "SpeakCFString failed" );
}

void
Synthesizer::stop()
{
    if ( isSpeaking() ) {
        mStopRequested = true;

        CheckError( StopSpeech( mAuChannel ), "StopSpeech failed" );
    }

    else {
        mIsSpeaking = false;
    }
}

Я убедился, что StopSpeech вызывается в том же потоке, что и SpeakCFString. Как ни странно, когда я пытаюсь войти в вызов StopSpeech с помощью отладчика, он сразу пропускается. Действительно странно, что Callback Done вызывается, когда вызывается StopSpeech, но речь продолжается независимо от этого.

Любая идея, что может происходить, или что я могу сделать, чтобы отладить? Есть ли какое-то временное решение, которое я мог бы использовать для временного отключения узла аудиоустройства?

Это на MacOS 10.12.5.

0 ответов

Другие вопросы по тегам