Программа говорит голосом франкенштейна
долго смеялся когда услышал результат..., низкое качество произношения из-за неполного набора звуковых файлов-слогов, которые были взяты из какой-то dos-программы.
Алгоритм: разбираем предложение по имеющимся слогам в звуковых файлах и воспроизводим эти файлы.
__Способы оптимизации алгоритма__
1) Заранее создать массив из элементов Player и подключит к нему воспроизводимые файлы (если не все, то хотя бы текущего слова). Т.о. сократим промежуток между воспроизведением отдельных файлов.
2) Пока играет текущий звуковой файл загружать следующий.
Основная проблема плеера заключается в позднем воспроизведении файла, что связано с внутренней организацией виртуальной машины – это: время инициализации плеера и скорости передачи данных из ресурсов. Например, при тестировании программы на телефоне sony-ericson задержка иногда составляла около 1 сек.
Также в MIDletPascal’е нет метода для определения завершения мелодии. Единственный способ - получение длительности мелодии и приостановка основного потока программы на указанную величину. Здесь также столкнулся с досадной особенностью - телефоны не слишком точно соблюдают время усыпления потока. И в завершение ко всему метод getDuration(), который получает полное время звукового файла не сработал у меня на motorole E398.
Пришлось открывать звуковые файлы и брать из заголовков wav-файлов длительность воспроизведения.
__Рекомендации к улучшению программы__
Улучшить произношение на 30% можно путем создания всех видов слогов встречающихся в русском языке, это число примерно равно количеству согласных букв в комбинации с гласными, т.е. гласные*согласные, а общее кол-во гласные*согласные + одиночные_буквы.
Таким образом, получаем: 10 гласных звуков, 21 согласных звуков
не обозначающие звуки 2, т.е. твердые, мягкие, тогда 3-й вида произношения
10*21*3+33 = 663
10*21+33 = 243 (без учета твердых и мягких звуков)
Для более-менее сносной программы требуется создать ~250 файлов звука, сделать их максимально чистыми и короткими, чтобы текст говорился внятно и быстро, но разборчиво.
__Расчет размера получаемой программы__
Средний размер файла со звуком = 2400 bytes, т.о. общий размер данных = 250*2400 = 600000 bytes = 586 Kb
процент сжатия =~25% (150000 bytes)
общий объем = 600000-150000=450000 bytes = 440 Kb.
Итоговый размер программы не менее 450 Kb, слабые телефоны работать с такими файлами не смогут. Выделенная под java-машину память ограничена, например в motorola (c380, c650, e390, v3, и т.д.) имеет размер 800 KB.
Т.о. для работы программы остается: 800-450-150(мусор в памяти) =~200 КB
___
arT (c) 2006. e-mail:
[email protected]