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

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

    Перед тем как начать

    Все что здесь описано не предназначено для замены 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.
    Данная статья и чать программы написаны пользователем и одним из создателей it-портала thinkit.ru (it_3.0), но у него нет рагистрации на хабре, по этому публикую ее я по его просьбе.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 31
    • НЛО прилетело и опубликовало эту надпись здесь
      • +1
        Голос и особенно интонация похожи на русского парнишу из последнего стар трека :)
        • 0
          мне почему-то он напоминает голос заики :) Но все-равно забавный.
      • 0
        Ну, мы рады будем, если вам эта софтинка станет полезной.
        • 0
          Странно как-то…
          iTunes для всех треков использует вложенные папки с хешами (или частями идентификатора), чтобы не искать по одному большому списку, а тут, фактически, все треки свалили в одну кучу.
          • 0
            Согласен, — странно, но факт, видимо решили что выигрыш не очень большой от хэширования.
            Можно только гадать…
          • 0
            Спасибо за карму. Перенес в блог «Apple»
            • 0
              Все здорово, но лучше все же писать iPod G3,  чтобы не путать сами-знаете-с-чем
              • 0
                ок, поправил
                • 0
                  Извиняюсь за явное рекламное сообщение, но может кому надо будет ))

                  Есть абсолютно новый нераспакованный iPod Shuffle 2gb blue в Москве. Заказывал из Англии, так получилось, что пока доставили, уже купил его. Продам дешевле чем в магазинах.
                  • 0
                    Хорошо. Только вот он все же G4. Помните, сначала был длинненький такой на шнурке. Потом появилась прищепка, а потом, вместе с последним Nano и новым Touch вышла еще, точно такая же прищепка, только в дополнительных цветах? И вот она-то и была G3! Хотя, на мой взгляд, странно что именно так, и я на подсознании именно последний Шафл считаю третьим!
                    • 0
                      нет, он все же G3 :) когда я впервые писал на thinkit о нем, я тоже думал что он G4, потом посмотрел сайт apple
                      store.apple.com/us/product/MC003ZM/A?fnode=MTY1NDA0OQ&mco=NDI3MzgwMQ
                      Т.е. в терминологии apple он — G3
                      • 0
                        Обновление. Не написал где там видно — страница с USB шнурком, а вот в описании написано что он совместим с новым шафлом, третьего поколения.
                        • 0
                          да, путаница маленькая получилась, но спасибо за разъяснение, буду знать!
                          • 0
                            В терминологии Apple он все-таки «iPod shuffle (3rd generation)»

                        • 0
                          Ох эта Apple! Сначала в 10.5.6 они убрали возможность вводить iPhone в DFU-режим, из которого делается джейлбрейк и анлок, поэтому я могла прошить iPhone нормально только под Windows. Теперь, чтобы в iPod Shuffle добавить русскую озвучку, Линукс (Убунту?) нужен. Что будет дальше, я даже боюсь предположить. :)
                          • 0
                            ну почему же убунту, все написанное было в генту сделано.
                            А вообще, никто не мешает сделать это из любой ОС, — портировать libgpod (а может она уже есть портированная) и найти чем синтезировать
                            • 0
                              Покупаете любой USB switch, подсоединяете iPhone в него, и проблема с DFU-режимом решается:)
                              • –1
                                Проклятый iPhone у меня любит ломаться среди ночи, когда как-то трудно искать USB-switch по магазинам, а к утру надо, чтоб звонил. После того, как восстановлю, откладываю покупку USB-switch до следующего раза. Зато у нас теперь радость: в 10.5.7 снова есть DFU-режим. :)
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • 0
                                да, это было первое о чем я подумал, но это приведет к тому что все названия станут транслитом и во всех проигрывателях, а это как то не очень красиво (мне так показалось)
                                • НЛО прилетело и опубликовало эту надпись здесь
                                  • 0
                                    Есть еще один минус, замечаный авторами журнала Upgrade — подбирать подходящий транслит нужно долго, к тому же не расставляются правильно ударения. Звучит уныло.
                                    • 0
                                      попробовал с транслитом — ужасно! примерно на том же уровне, как когда festival c русским голосом читает англ. слова
                                • 0
                                  А что с iVox, а именно с его русским голосом? Не подключается к айтюнсу?
                                  • 0
                                    не пробовал, ибо не знал про него. Попробую — напишу результат.
                                    • 0
                                      попробовал, в системе голос появился, по-русски говорит очень хорошо, но вот в iTunes он не добавился (там отдельно выбирается каким языком озвучивать). Установка iVox как системного голоса не помогла. Английские слова, правда, все равно как-то по-дурацки произносятся/
                                      • 0
                                        Тоже загрузил iVox, попробую на своем iPod nano 4G (у которого тоже есть голос). Произносит конечно английское противно, но альтернативных внешних голосо я вообще не знаю. На официальном сайте iVoх'а причем показано, как голос цепляется к айпод нано как у меня.
                                        Интересно было бы посмотреть, можно ли подключить два голоса, и есть ли для этого какие-нибудь утилиты.
                                        Вообще мой плейлист состоит на половину из английских, наполовину из русских и маленького количества японских песен, вот русская половина и удерживает меня от покупки шаффла, хотя очень нравится маленькая «зажигалка».
                                        • 0
                                          ну как русский сделают можно покупать, эппл говорили что шафл сам определяет язык песни, правда при выбранном англ. французское название сам он не прочитал правильно (я сильно не искал — может можно/нужно для отдельного трека указать язык)
                                    • 0
                                      Вот спасибо! iPod'а у меня, правда и близко не-было, но очень статья оказалась познавательной: как оказалось, это куда более адекватный голос чем из espeak.
                                      А вообще, попробую приспособить этот подход для другого девайса.
                                      • 0
                                        ух ты! забавный девайс!

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