Остановить 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.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector