Здравствуйте!

>>>>> "Дмитрий" == Дмитрий Падучих <[email protected]> writes:

    Дмитрий> Igor B. Poretsky:
    IP> Пробовали ли вы как-нибудь играться с параметром "latency" в
    IP> конфигурации?

    Дмитрий> Попробовал значения 0.1 и 1.0. В результате речь пропала
    Дмитрий> почти полностью.  Иногда были слышны небольшие фрагменты
    Дмитрий> речи и щелчки.

Вот еще один момент. Однажды я случайно тоже вписал туда неразумно
большое значение. Речь воспроизводилась тоже фрагментами и с большим
запаздыванием, но щелчков вроде никаких не было.

    Дмитрий> В каком диапазоне имеет смысл менять значение этого
    Дмитрий> параметра?

Размерность значения - секунды. Оно влияет на буферизацию при выводе
звука, но организована она в PortAudio, насколько я понял, как-то
хитроумно. Вообще, чем меньше значение, тем быстрее должен быть
отклик, но при слишком малых значениях должна наблюдаться
прерывистость звука, как бывает когда другие более приоритетные
процессы мешают. Особенно существенно это должно проявляться при
одновременном выводе нескольких звуков. Думаю, приемлемые результаты
должны получаться при значениях от 0.01 до 0.1. Возможны ситуации,
когда требуется еще больше, но реакция становится уже заметно
замедленной. Более 0.2 мне уже вытерпеть тяжело. Честно говоря, я не
слишком много с этим экспериментировал, быстро прийдя к выводу, что
автоматический выбор Portaudio оказывается самым удачным. Но это в
моей ситуации.

    Дмитрий> Что-нибудь ещё можно сделать, чтобы определить, в чём
    Дмитрий> дело?

Давайте попробуем.

Теоретически причина может крыться либо в общей неразворотливости
программы, либо в инерционности подсистемы вывода звука. Думаю, первый
вариант имеет смысл серьезно рассматривать, если ваша платформа
существенно слабее моей. У меня Pentium IV 3000 МГц и 512 Мб
ОЗУ. Кроме того, быть может, стоит еще принять во внимание
существенное различие в организации программы в ее старом и новом
варианте. Старый Multispeech представлял из себя два параллельных
процесса, полученных вызовом fork(), взаимодействующих между собой
через потоки ввода-вывода (pipe). Один из этих процессов принимал
команды от клиента и разбирался с ними, другой же - фактически
выполнял работу, вызывая для этого внешние программы и создавая
дополнительные конвейеры процессов. Сейчас же параллельные процессы
создаются только для речевых синтезаторов. Вся же программа
реализована в виде одного процесса, но многопоточного (multithreaded).

В подсистему вывода звука я включаю все, начиная с PortAudio, и
заканчивая звуковой картой.

    Дмитрий> Звуковуха у меня - SbLive.

Да, похоже, она у нас одинаковая. Попробуем сравнить остальное. У меня
используется portaudio19 версии 19+svn20070125-1ubuntu2. А вот
перечень загруженных звуковых драйверов: snd_emu10k1_synth,
snd_emux_synth, snd_seq_virmidi, snd_seq_midi_emul, snd_intel8x0,
snd_emu10k1, snd_seq_dummy, snd_seq_oss, snd_ac97_codec, ac97_bus,
snd_pcm_oss, snd_mixer_oss, snd_seq_midi, snd_rawmidi, snd_pcm,
emu10k1_gp, snd_seq_midi_event, gameport, snd_util_mem, snd_seq,
snd_timer, snd_seq_device, pcspkr, snd_hwdep, snd, soundcore,
snd_page_alloc. Ядро 2.6.22-16-generic. Все опции "device" в
конфигурации Multispeech оставлены закомментированными, то есть, в
моем случае используется ALSA устройство по-умолчанию.

    Дмитрий> Вы имеете в виду подкаталог debian/ со всеми файлами?
    Дмитрий> Это, конечно, упростит сборку пакета и позволит
    Дмитрий> автоматически проверить, все ли зависимости
    Дмитрий> установлены. Но без apt пакеты из зависимостей
    Дмитрий> автоматически устанавливаться не будут. А чтобы сделать
    Дмитрий> установку через apt, нужен репозиторий, AFAIK.

К этому я и стремлюсь. Хочу создать полный набор пакетов речевой
поддержки, чтобы достаточно было бы просто подключить содержащий их
репозиторий. Включить в Multispeech каталог debian с необходимым
содержимым совсем несложно. Сейчас к этому уже практически все
готово. Я не спешу это делать лишь потому, что останутся зависимости
от несуществующих пока пакетов.

    >>> Лучше, наверное, искать файл конфигурации не в
    >>> /etc/multispeech.conf, а в ${sysconfdir}/multispeech.conf

    IP> А у меня в окружении такой переменной нет.

    Дмитрий> Это переменная automake. Содержит имя директории, в
    Дмитрий> которую устанавливается sysconf_DATA.

Ах, да, тут вы правы. Так действительно будет правильнее.

    Дмитрий> Кстати, сейчас таким способом передаётся довольно много
    Дмитрий> переменных, что немного затрудняет чтение команд, которые
    Дмитрий> выполняются во время компиляции.  Может, стоит перенести
    Дмитрий> их в отдельный заголовочный файл (AC_CONFIG_HEADERS)?

А что, если этот файл генерировать, то все эти многочисленные флаги в
строки вызова компилятора включаться не будут? Я не стал этого делать
лишь потому, что нигде эти константы в программе не использую, но ради
сокращения строк вызова компилятора не поленился бы. Меня они тоже
ужасают. А ведь эти ключи туда еще и не по одному разу вставляются.

С уважением,
Игорь.
-- 
Blinux-rus mailing list
[email protected]
http://www.a11ywiki.org/cgi-bin/mailman/listinfo/blinux-rus

Ответить