Как говорить миллисекунды молчания в С# с использованием SpVoice?
Как на самом деле говорить молчание за X # миллисекунд, а не с помощью Thread.Sleep(). Я пытаюсь использовать функцию .Speak() в библиотеке SpeechLib переменной SpVoice, чтобы говорить о конкретной длительности молчания в соответствии с заданным количеством миллисекунд. В частности, в выходном файле .wav, в котором я вставляю периоды молчания между устными линиями текста. Использование Thread.Sleep() будет принимать непристойное количество времени, чтобы говорить или сохранять, так как я планирую сохранить почти 5000 строк устного текста в .wav с паузами между линиями.
Это решение, которое у меня есть до сих пор:
int pauseA = (int)(22050.0 * ((double)pauseTargetToSource.Value / 1000.0) * 2.0);
int pauseB = (int)(22050.0 * ((double)pauseLineBreak.Value / 1000.0) * 2.0);
while (
(lineSource = srSource.ReadLine()) != null &&
(lineTarget = srTarget.ReadLine()) != null)
{
voiceSource.Speak(lineSource, SpeechVoiceSpeakFlags.SVSFlagsAsync);
voiceSource.WaitUntilDone(Timeout.Infinite);
voiceSource.AudioOutputStream.Write(new byte[pauseA]);
voiceTarget.Speak(lineTarget, SpeechVoiceSpeakFlags.SVSFlagsAsync);
voiceTarget.WaitUntilDone(Timeout.Infinite);
voiceSource.AudioOutputStream.Write(new byte[pauseB]);
}
Где 22050.0 - частота выборки, а pauseLineBreak.Value - это число в миллисекундах. Множитель 2.0 для 2-байтовой длины короткого значения в данных .wav.
AudioOutputStream.Write просто записывает правильный номер 00 в файл для молчания.
Ответы
Ответ 1
Это не идеальное решение, но...
Вы можете использовать определенное количество "тихой" фонемы, то есть "_" (подчеркнуто) (см. http://msdn.microsoft.com/en-us/library/ms717239(v=vs.85).aspx) после проверки того, как много мс это длится. Возможно, вам придется настроить количество тишин в зависимости от установленной вами скорости.
Ответ 2
Пара вариантов:
- Вы можете перевернуть еще один поток, чтобы выполнить операцию
- Вы можете просто определить, сколько байтов требуется в секунду, и записать их в выходной поток.