Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Проекты на MidletPascal

Ответ
 
Опции темы
Старый 09.01.2009, 14:19   #1
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
программа говорящая текст

Программа говорит голосом франкенштейна долго смеялся когда услышал результат..., низкое качество произношения из-за неполного набора звуковых файлов-слогов, которые были взяты из какой-то 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]
Вложения
Тип файла: zip speak_midp2.zip (202.8 Кб, 1339 просмотров)
(Offline)
 
Ответить с цитированием
Старый 09.01.2009, 14:25   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: программа говорящая текст

это оно http://forum.boolean.name/showthread.php?t=5612 ?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 09.01.2009, 15:47   #3
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: программа говорящая текст

Я использовал простой движек без каких-либо дополнительных библиотек, достаточно чтобы телефон мог воспроизводить звуковые файлы в формате wav (ну или какие вы сделаете), и поддерживал загрузку программ размером 450кб.

Если раздобыть профессионально сделанные файлы слогов, и оптимизировать как писал выше, то можно применить в качестве читалки книг с интернета...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (09.01.2009)
Старый 09.01.2009, 15:54   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: программа говорящая текст

хватило бы и просто читалки, имхо. ну или возможность офф-лайн режима
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 09.01.2009, 17:55   #5
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: программа говорящая текст

можно будет сделать,... если кто-нить найдет все слоги русского языка, в формате WAV PCM 8 кГц, 8 bit mono, студийного качества, без шумов,
и общий размер файлов укладывался в расчеты.

p.s. этот проект пылился уже пару лет, желания и времени искать звуки для профессиональной программы - нету, потому что везде у нас халява, и заработать на ней врятли получится
(Offline)
 
Ответить с цитированием
Старый 10.01.2009, 14:36   #6
Serg153
Нуждающийся
 
Регистрация: 03.01.2009
Сообщений: 93
Написано 8 полезных сообщений
(для 15 пользователей)
Ответ: программа говорящая текст

ммм... я могу с помощью "Говорилки" создать звуковые файлы...
но останется "глюк" подгрузки слоговых файлов...
--
а может возможно создание вав файла на лету? типа один процесс анализирует слова - создаёт буфер нескольких слов и формирует вав - а другой процесс исполняет подготовленный файл.. возможно ли такое?
(Offline)
 
Ответить с цитированием
Старый 10.01.2009, 15:37   #7
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: программа говорящая текст

Теоретически, зная структуру WAV-файла и имея доступ к ФС такое можно реализовать, но, думаю, производительность все равно будет низкой.
(Offline)
 
Ответить с цитированием
Старый 10.01.2009, 19:30   #8
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: программа говорящая текст

Serg153, об этом как-то думал, но реализовывать не пробовал.
идея заинтересовала и поэтому решил щас написать либу для воспроизведения звука из строки, т.е. загружаем из ресурсов звуковой файл midi,wav и т.д. в строку и передаем её модифицированному плееру

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

Некоторые загвоздки:
1. байты в строку долго подгружается если файл больше 10 кб
2. строка не может быть слишком большой (более 50 кб), иначе может повиснуть java-машина
3. setplayercount не работат (воспроизведение только 1 раз)
4. Т.к. getduration() использует тип Long, то такая библиотека отказыватся подключаться к MIDletPascal, поэтому пришлось исключить это метод
5. размер WAV берется из заголовка загружаемого файла, иначе если readByte=0, то это считается как завершение файла с ресурсами, а нулевых байтов хватает...
__
В архиве исходники и тестовый пример
Вложения
Тип файла: zip ptest.zip (31.2 Кб, 1163 просмотров)
(Offline)
 
Ответить с цитированием
Старый 10.01.2009, 23:26   #9
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: программа говорящая текст

а если так (int)getduration();
(Offline)
 
Ответить с цитированием
Старый 11.01.2009, 00:27   #10
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: программа говорящая текст

Сообщение от pilgrim Посмотреть сообщение
а если так (int)getduration();
Если я не ошибаюсь, использование return (int)p.getDuration()
приводит к ошибке. У меня получилось только так:
public static int get_duration()
{
 
int len;
 
len=(int)P.p.getDuration();
 return 
len;

(Offline)
 
Ответить с цитированием
Старый 11.01.2009, 09:09   #11
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: программа говорящая текст

спасибо за советы! попробую, думаю ошибка загрузки из-за того что MIDletPascal не корректно разбирает элементы, которые занимают по две позиции в константном пуле, т.е. Long и Double...

касательно библиотеки то ее будет удобно использовать для загрузки из интернета и сохранения в RMS коротких midi-файлов, типа настройки программы на ходу
(Offline)
 
Ответить с цитированием
Старый 12.01.2009, 02:51   #12
Serg153
Нуждающийся
 
Регистрация: 03.01.2009
Сообщений: 93
Написано 8 полезных сообщений
(для 15 пользователей)
Ответ: программа говорящая текст

вот нарыл статью в инете - говорящая Java - там приведён пример на джаве.... глянтье - может что полезное там?

http://www.emanual.ru/download/www.eManual.ru_268.html
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
abcdef (12.01.2009)
Старый 12.01.2009, 13:42   #13
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: программа говорящая текст

Сообщение от Serg153 Посмотреть сообщение
вот нарыл статью в инете - говорящая Java - там приведён пример на джаве.... глянтье - может что полезное там?

http://www.emanual.ru/download/www.eManual.ru_268.html
Это java для компов, в мобильной java нет SoundAPI. Хотя, может, удастся найти что-то полезное.
(Offline)
 
Ответить с цитированием
Старый 12.01.2009, 22:05   #14
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: программа говорящая текст

Serg153, хорошая ссылка (правда применительно к упрощенной английской речи), какраз рассказывает о некоторых проблемах при создании голосового движка, звуковые файлы формата *.au схожи с форматом *.wav, и занимают примерно одинаковое кол-во места.

основные задачи подобных программ:
1) разбор текста на звуковые частицы
2) придание эмоциональной окраски производимой речи
3) склейка частей звука
----
1) разбор можно производить только при наличии необходимого кол-ва звуковых заготовок
2) пока не рассматривается, т.к. это довольно тяжеловесная задача для сотового телефона
3) можно попробовать склеивать в один большой файл, но это довольно медленно, потому что прийдется перемещать довольно большие байтовые массивы, на месте "склейки" без предварительной обработки возможны щелчки звука, можно попробовать использовать микширование файлов, как в библиотеке для проигрывания нескольких файлов, но опять это будут поддерживать не все телефоны...
____
сделать программу нормальную реально, просто качество звука напрямую зависит от качества звуковых файлов и метода их слияния
(Offline)
 
Ответить с цитированием
Старый 27.01.2009, 11:05   #15
Slepetc
Нуждающийся
 
Аватар для Slepetc
 
Регистрация: 05.07.2008
Сообщений: 53
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: программа говорящая текст

Нет ничего приличного на компе или кпк. Для телефона это нормально.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для текстур axel186 Создание текстур 40 19.08.2009 13:31
Программа для 3d max на тему анимация CRASHER Болтовня 17 27.10.2007 13:33
Программа на других компах evel 3D-программирование 8 12.10.2007 17:30
резидентная программа или как? sergeych 2D-программирование 18 02.04.2007 14:13


Часовой пояс GMT +4, время: 01:05.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com