;)
  thinkIT.ru — первый IT-портал города  
 
 
Первый IT-портал города
 
 
Почта:
Пароль:
    Забыли пароль?
  • Звездные войны: Эпизод I 3D
  • Путешествие-2 3D
  • Значит, война
  • Код доступа «Кейптаун»
  • Такие разные близнецы
  • Хроника
  • На Байкал
  • На грани
  • Все любят китов
  • Одержимая
  • Ржевский против Наполеона 3D

Кино в Таганроге

 

Рубрика: soft

5
Учим iPod Shuffle 3G говорить по-русски

Учим iPod Shuffle 3G говорить по-русски


Пока мы ждем что iTunes (Apple) научит новые iPod Shuffle говорить по-русски, почему бы не попробовать самим?

Автор: it_3.0 | Добавлено: 12 Мая, 2009 | Чуток комментариев | Просмотров: 1120
Перед тем как начать

Статья написана по материалам и просьбе пользователя Dmitri. Программа, которая была написана в борьбе за русскоговорящий айпод, написана при моем непосредственном участии.
Все что здесь описано не предназначено для замены iTunes, а служит, скорее, дополнением, которое нужно только до тех пор, пока iTunes не научится озвучивать названия по-русски (очень надеюсь что научится).

Техническая сторона вопроса
Функция voiceover, появившаяся в новых iPod (произносит голосом название песни/плейлиста) реализуется, конечно же, не самим iPod-ом, а программой iTunes (именно поэтому для работы с новым iPod нужен iTunes не ниже чем 8.1), которая при синхронизации синтезирует звуковые файлы и закачивает их на iPod. iPod, в свою очередь, их читает (при "удобном" случае).
 

Звуковые файлы, котороые используются для проговаривания находятся в директории Speakable. По мимо всего прочего (системных голосовых сообщений о заряде батареии и т.д.) в ней есть две поддиректории — Tracks и Playlists. В которых находятся озвученные названия плейлистов и треков, в формате wav (raw PCM, 22050 Hz), с довольно странными именами. Как выяснилось, эти имена - идентификаторы песен и плейлистов в базе данных, которая хранится на iPod.
 

Ищем способ читать iPod — libgpod
В поисках места, откуда iPod берет имена файлов с озвучкой, наткнулись на файлы в директории iPod_Control/iTunes, в которых встречаются имена файлов, точнее, если некоторые числовые последовательности из файлов представить в виде шестнадцетиричной строки, то получались имена файлов. Разбираться с форматом БД iTunes не было ни времени, ни желания, поэтому решили поискать готовые решения. Выбор пал на библиотеку libgpod (о ней узнали из зависимостей приложения gtkpod — очень неплохая замена iTunes для линукс — для которого, судя по-всему эта библиотека и была разработана).

Тут возникла сложность — библиотека возвращала ошибку, что-то в духе «не правильный размер записи (11 < 18)». Пришлось смотреть исходники библиотеки.
(К слову, здесь речь идет о библиотеке версии 7.0, существовала, на момент начала разработки, версия 7.2, которая так же не умела читать шафлы третьего поколения.)
На рисунке справа показан соответствующий участок кода. Первое подчеркнутое — смещение, которое в той версии БД, которая в новых iPod, изменилось и стало 8 (это видно если открыть файл hex-редактором, в нашем случае это был GHex). Второе подчеркнутое — изменения котороые сделали (пока искали информацию в сети, нашли что числа стали 32-х битными в новых iPod, так ли это — не проверяли, но на всякий случай сделали :).

Стоит обратить внимание, что т.к. число которое исправляли (смещение) задано жестко, не зависимо от версии БД, то пропатченная таким образом libgpod не будет работать со старыми версиями iPod. Чтобы сделать по-нормальному пришлось бы довольно сильно менять библиотеку, что целью не являлось.

Итак, сумев прочитать БД iPod-а увидели что названия файлов с озвучиванием — это идентификаторы плейлистов и треков. В той же БД, к счастью, есть вся информация и о названиях плейлистов, треках, названиях албомов и исполнителей. Следующий вопрос — как озвучивать, т.е. как самим синтезировать звуковые файлы из русского текста.

Озвучиваем по-русски, festival

Мне удалось найти только одно бесплатное решение для озвучивания, — festival, дистрибутив есть, наверное, во всех дистрибутивах Linux, если нет, — можно скачать исходники с сайта разработчиков (http://www.cstr.ed.ac.uk/projects/festival/). Официальный дистрибутив не поддерживает русский язык, но есть решение, позволяющее озвучивать русский текст. Описание можно найти здесь (http://festlang.berlios.de/docu/doku.php?id=russianru)

Чтобы можно было пользоваться сразу русским языком в festival, нужно добавить команду (set! voice_default 'voice_msu_ru_nsh_clunits) в файл /etc/festival/siteinit.scm.
Festival позволяет получить довольно неплохое качество русского текста, но у него есть одна беда — английский текст получается не очень хорошим ... скорее даже совсем не хорошим (это если выбран русский голос).

Примеры озвучивания (wav, порядка 100к каждый):

Собственно, программа

У нас получилась вот такая программа (C, GTK+):



Жмем прочитать iPod, выбираем iPod, получаем список плейлистов и треков. Правая колонка — файл, — имя файла с "озвучкой", для соответствующей позиции
Двойной клик на строке, — воспроизвести файл, который в данный момент соответствует треку/плейлисту.
Выбираем что именно нужно озвучить, жмем озвучить и ждем, довольно долго, внизу прогресс.

У программы еще есть консольный (не интерактивный) интерфейс (смотрим --help и README).

Установка

Итак, нам потребуется:
  1. Собственно программа (здесь)
  2. Пропатченная libgpod (здесь)
  3. версии пакетов GTK+, GStreamer и libgpod для разработчиков (в генту это те же самые пакеты, в дебиане, кажется, они с постфиксом -dev). Поставить любимыми средствами.
Распаковываем libgpod, внутри выполняем
./configure
make
(только если не собираетесь пользоваться gtkpod с более старыми моделями iPod) make install

Распаковывем программу, внутри выполняем
./configure
make
(make install выполнять не нужно, т.к. все равно нет desktop-файла, т.е. в меню ничего не добавится)

Если в предыдущем пункте (про libgpod) не делали make install, то нужно сделать следующее (иначе, можно пропустить до последнего параграфа этой части):

скопировать файл libgpod/src/.libs/libgpod.a в директорию shuffle-vo/src, libgpod - это директория в которой распакованная библиотека libgpod, shuffle-vo - директория с распакованной программой.
Перейти в директорию shuffle-vo/src, выполнить там make clean, затем make, скопировать строку примерно такого вида (она будет последней):

gcc -Wall -g -g -O2 -Wl,--export-dynamic -o shuffle_vo main.o -pthread  -L/usr/lib /usr/lib64/libgtk-x11-2.0.so /usr/lib64/libgdk-x11-2.0.so /usr/lib64/libatk-1.0.so /usr/lib64/libpangocairo-1.0.so /usr/lib64/libpangoft2-1.0.so /usr/lib64/libcairo.so /usr/lib64/libpixman-1.so /usr/lib64/libpng12.so /usr/lib64/libXrender.so /usr/lib64/libX11.so /usr/lib64/libXau.so /usr/lib64/libXdmcp.so /usr/lib64/libpango-1.0.so /usr/lib64/libfontconfig.so /usr/lib64/libfreetype.so /usr/lib64/libexpat.so /usr/lib/libgpod.so /usr/lib64/libgdk_pixbuf-2.0.so /usr/lib64/libgio-2.0.so /usr/lib64/libgstreamer-0.10.so /usr/lib64/libgobject-2.0.so /usr/lib64/libgmodule-2.0.so /usr/lib64/libgthread-2.0.so -lpthread -lrt /usr/lib64/libxml2.so -ldl -lz -lm /usr/lib64/libglib-2.0.so -pthread

и заменить /usr/lib/libgpod.so в этой строке на libgpod.a, а потом выполнить получившуюся строку

Таким образом, наша программа будет статически связана с нужной библиотекой libgpod, при этом в системе будет библиотека libgpod, которая сможет работать с предыдущими версиями iPod.

Чтобы проверить что связывание статическое можно выполнить следующее — ldd shuffle_vo, в списке не должно быть строки вида
libgpod.so.4 => /usr/lib/libgpod.so.4 (0x00007fe6537f1000)

Читаем README, который с программой, настраиваем соответствующим образом festival.

Что дальше


Качество озвучивания английсих слов в русских текстах оставляет желать лучшего, поэтому будет здорово если кто-нибудь, например, uBot организует сервис по озвучиванию, у uBot, кстати, качество озвучивания русских текстов повыше чем у festival. Ну и ждем когда apple выпустит обновление для iTunes, которое позволит озвучивать русские названия, ждем сильно, т.к.  iTunes озвучивает английские тексты очень хорошо, если также будет озвучивать русские будет очень здорово.

Это первый публичный релиз программы, так что, наверняка, в ней полно глюков и ошибок.

По поводу дальнейшего развития программы — смело скачивайте, модифицируйте и выкладывайте. У меня, скорее всего не будет времени для ее развития. Разве что если будет интеграция с uBot.


Теги: ipod, itunes, voiceover, русский voiceover | Оценка: (8) |

Комментарии:

Saint Saint | 12 Мая 2009 09:54ссылка сюда
it 3.0 - мегахорош!!! Великолепная работа)). Одна из лучших статей на thinkit за последнее время!
it_3.0 it_3.0 | 12 Мая 2009 11:01ссылка сюдаответ на
Спасибо.
Это совместная работа меня и Dmitri
iNik iNik | 12 Мая 2009 10:44ссылка сюда
it_3.0 очень круто! Думаю, софтинка пойдет в массы!
it_3.0 it_3.0 | 28 Мая 2009 09:28ссылка сюда
прошивка 1.1, вместе с voiceover kit 1.1 принесли русский в ipod...
iNik iNik | 28 Мая 2009 09:33ссылка сюдаответ на
мои поздравления!
Авторизуйтесь чтобы не быть Серой Анонимностью!

 

Играть в тетрис бесплатно он-лайн, без регистраций и смс =)






Время играть в тетрис!

Играть в тетрис проще простого. Жмем на иконку и вперед.


Найди нас везде!

Теперь ты можешь найти нас во всех популярных социальных сетях. Читай thinkit.ru где тебе удобно!


Банкоматы Таганрога

Теперь ты сможешь легко узнать, где именно находится ближайший банкомат.

 

 
  CreativeCUBE - разработка и поддержка сайтовПроизводство и поддержка сайтов
cCube.ru
  При воровстве с этого сайта ссылка обязательна.
Copyright © 2008-2012 thinkit.ru
Связаться с нами