Яндекс.Метрика

    Ни о чём

    Аудио-helper изучающим ин.язык

    Недавно в одном интервью бывший советский разведчик сказал такие слова:

    — Действительно ли в СССР существовали некие американские деревни, где готовились разведчики для англоязычных стран?

    — Я не знаю, как в КГБ. В ГРУ было несколько иначе… Были дачи для подготовки нелегалов. Там радио работало круглосуточно. Допустим, готовим человека во Францию. Он спит, бодрствует, ест или находится на уроке английского, но, не переставая, работает французское радио.


    Я подумал — а неплохо было бы сделать то же самое дома, для себя. Но с учетом современной реальности.

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


    Часть 1, путь воина



    Первое, что приходит в голову — использовать готовый софт. Покажите мне человека, который этого не делал. Скачать аудио материалы, залить в плеер или слушать их на компьютере. Минусов очень много. Самый главный из которых — это нельзя назвать пассивным процессом. Если ты слушаешь в плеере, то ты не можешь одновременно разговаривать по телефону. Если на компьютере — не можешь в любой момент сделать reboot («вот-вот сейчас дослушаю и заребучусь») или заняться любовью с дебаггером. Про слушать плеер дома я вообще молчу. Наушники хочется снять, а каждый раз подключать его к своим компьютерным колонкам для меня не выход.

    Постоянное добавление и удаление материалов из плейлиста доставляет сомнительное удовольствие. Особенно когда ты учишь более одного языка. Хочется послушать не только аудиокурс, где читают буквально по слогам, но и радио в естественном темпе. Чтобы это сделать опять придется нажать несколько кнопок. Это не смертельно, но если учесть то, что слушать необходимо каждый день, то не удивительно почему этот процесс надоедает.

    Еще совсем недавно я заливал на свой iphone разные аудиокурсы, скачал специальную программу с огромным количеством радиостанций, переключал то на одну волну, то на другую. Но программа отказывалась работать после того, как приходила очередная смс. Приходилось опять нажимать кнопки. Аудиокурсы приходилось снова включать. Через некоторое время я понял, что это не выход и если не автоматизировать этот процесс, то мое желание это делать очень быстро пропадет, несмотря на все мое упорство.

    Часть 2, идея и реализация



    Я хожу на курсы немецкого и французского, при этом еще увлекаясь эсперанто и более или менее могу говорить по-английски. Сколько кнопок мне придется нажать чтобы послушать один час радио на английском, потом пару аудиофайлов, потом еще час немецкого радио, три разных типа аудио, французское радио и т.д.? Очень много. В итоге из программиста я превращаюсь в track changer'a. Те, кто знают стоимость отвлечения от задачи над которой работаешь, меня поймут. Я уже не говорю о том, что просыпаться утром мне бы хотелось имея под рукой одну кнопку — «включить!», а не судорожно тыкать мышкой мимо кнопок winamp'a, параллельно матерясь на тему «почему же не работает интернет? я так хотел послушать радио».

    Стало совершенно очевидно, что нужно разработать автоматизированную систему. Для того, чтобы не заморачиваться со своим рабочим компьютером, я поехал на радиорынок и купил самый дешевый нетбук, который только смог найти — Compaq Mini за 8700 рублей. Минималистский дизайн дешевых колонок Genius по 180 рублей мне очень понравился и я взял два комплекта. Моно-звук меня вполне устраивает (все-таки это радио), поэтому одну главную колонку повесил в ванной, другую главную в комнате. Таким образом мы можем включать и выключать радио в разных местах, прибавляя и убавляя громкость так, как нам нравится.

    Осталось дело за софтом. Долго рассказывать не буду, софт был написал на .Net'е для ОС Windows. В принципе, ничего не мешает использовать на своем рабочем компьютере. Я решил, что самым лучшим выбором будет частичное использование уже готового софта, который умеет играть разные форматы звуковых файлов, различные online-broadcasting-источники, для которого существует уже огромное количество плагинов. Вы уже догадались, что речь идет о всеми любимом Winamp'e. Однако, требуемого функционала по автоматизации проигрывания различных источников в winamp'e нет. Winamp обладает хорошим API, но чтобы быстрее добиться требуемого результата я использовал Clamp — Command Line Winamp. Утилита для консольного управления winamp'ом.

    Конфигурационный файл моей утилиты очень простой. Лучше сто раз увидеть:

     <player>
      <streamSources>
       <streamSource name="Any radio station" type="url" url="http://..." timeToPlay="00:40:00" />
       <streamSource name="Local audio files" type="directory" path="English" numFilesToPlay="1" shuffle="true" />
       <streamSource name="Other audio files" type="directory" path="English" timeToPlay="00:30:00" shuffle="true" />
      </streamSources>
     </player>

    * This source code was highlighted with Source Code Highlighter.


    В первом streamSource мы задаем тип url и атрибут url в котором прописываем URL необходимой онлайн-радиостанции (список радиостанций есть в конце статьи). timeToPlay — время, которое необходимо играть данный источник. В моем случае 40 минут.

    name — имя источника, впоследствии оно просто выводится на экран, чтобы вам было понятно, при необходимости, что именно сейчас играет.

    Второй streamSource — директория. Можно указывать как полный путь, так и относительный. Новый параметр — numFilesToPlay — количество файлов, которые нужно играть. Shuffle — вполне понятный атрибут, который говорит о том, нужно ли перемешать файлы перед проигрыванием или играть все подряд. На данный момент в коде жестко прописан "*.mp3", не забудьте модифицировать исходный код (см.ссылку в конце статьи), если захотите играть другой тип файлов. Да-да, я знаю, можно было бы сделать много разных фич в этом месте, но я руководствовался принципом YAGNI, поэтому не стал добавлять функционал, который мне не нужен.

    Третий streamSource — то же самое, что и предыдущий, только говорит о том, что нужно играть файлы в определенной директории определенное количество времени. В данном случае 30 минут.

    Как видите, все очень просто. Можно указать любое количество источников, с любым интервалом. Если вы не хотите постоянно учиться языку, то можете смело добавить какую-нибудь русскоязычную радиостанцию.

    На всякий случай привожу пример моего конфига: paste2.org/p/965847

    Визуально программа работает примерно так:



    Часть 3, оптимизация



    Очень скоро стало понятно, что программе не хватает некоторых параметров. Например, добавлять в автозагрузку лучше с ключом /randomstart — в этом случае проигрывание начинается с произвольного источника.

    Параметр /manual позволяет интерактивно выбрать первый источник для проигрывания.

    Также важный параметр, который задается в xml-конфиге — volume. Некоторые радиостанции значительно громче, чем многие аудиокурсы. Поэтому громкость некоторых источников можно ограничить. Этот параметр может принимать значение от 0 до 255, по-умолчанию он установлен в 128. Обычно для радио я ставлю это значение равное 70.

    Также стоит упомянуть о том, что происходит если пропадает подключение к Интернет. Тип sourceStream'a url требует соединения с Интернет, тип directory не требует. В программе реализован простенький пингер, который пингует ya.ru с небольшим интервалом. И если пропадает коннект, то плеер просто проигрывает те источники, которые соединения с интернет не требуют.

    Часть 4, ссылки



    Скачать исходный код и бинарник можно на моем SkyDrive (жмите «Загрузить») (требует .NET 2.0)

    Список радиостанций:

    www.listenlive.eu/ (поиск по странам, легко найти что-нибудь говорящее)
    www.shoutcast.com/ (мало что есть говорящего, в основном музыка)

    Послесловие



    Метод хорош для помощи в изучении иностранных языков. Возможно, он не годится для замены классического метода — читать, писать и задавать вопросы преподавателю. Но то, что он оказывает существенную поддержку в освоении изучаемых языков — это точно.

    В комментах, кроме обсуждения, предлагаю делиться ссылками на интересные радиостанции (а возможно и другие материалы). Если вам понравился метод и статья, то буду благодарен за карму, которая позволит пригласить на хабр человека, который помогал писать этот хоть и небольшой, но все же код :) Также прошу вас помочь бесплатно установить и настроить программу людям, далеким от мат.части, но очень желающим изучать тот или иной язык.