Код отслеживания Google Analytics.

Feb 10, 2008

Радио - создание списка станций

Одной из features COWON D2 является радио. Как и в любом подобном устройстве, оно поддерживает список станций. Правда сканирование плеер проводит плохо, пихая в список все что угодно, кроме реальных станций. К тому же, интерфейс плеера не позволяет вводить названия станций.


К счастью здесь описан формат файла списка. Сам файл не только доступен безо всяких ограничений, когда плеер подсоединён к компьютеру (<точка монтирования>/system/radio.ini), но и включает в себя названий станций. Формат файла(русский в WIN-1251):
$> file ./system/radio.ini
./system/radio.ini:    ISO-8859 text, with CRLF line terminators

Формат файла (цитата из статьи упомянутой выше):
[FM]
Sn=f
Nn=a

где:
n - номер пресета по порядку от 0 до 23
f - частота без точки (т.е. 90.5fm записывается в виде 9050)
а - название станции
Очень важно, что частоты указываются с точностью до сотой. Это не было упомянуто в оригинале статьи и стоило мне двух часов экспериментов :)))
Список станций можно найти здесь. Поскольку такой список редко будет переделываться целиком (если только не забывать его backup-ить перед перепрошивками), то особо мудрствовать со скриптами я не вижу смысла. Копируем, с предложенной страницы, например, такой список в файл:

Санкт-Петербург (на май 2007 года)

Номер Частота Название
1 87,5 Дорожное радио
2 88,0 Ретро
3 88,4 Авто Радио
4 88,9 Юмор FM
5 89,3 Радио Культура
6 89,7 Радио Зенит
7 90,1 Эрмитаж
8 90,6 Радио Хит
9 91,1 Мелодия
10 91,5 Эхо Москвы
11 100,5 Европа Плюс
12 100,9 Петроград Русский Шансон
13 101,4 Эльдорадио
14 102,0 Радио Рокс
15 102,4 Студио
16 102,8 Радио Максимум
17 103,4 Динамит FM
18 104,0 Наше Радио
19 104,4 Русский Шансон
20 104,8 Радио Балтика
21 105,3 Love Радио
22 105,9 Радио Montecarlo
23 106,3 Радио Рекорд
24 107,0 Радио России - С-Пб
25 107,4 Радио Ленинград
26 107,8 Русское Радио

Выкидываем отсюда все станции, которые мы видеть не хотим. Это все равно придётся сделать, так как наш плеер хранит в памяти лишь 24 позиции.
Потом применяем следующую конструкцию:
sed -n "s|^[0-9]\{1,2\} \(.*\)|\1|p" radioStations.txt | \
awk "{print NR-1, \$0}" | \
sed -e "s|^ *\([0-9]\{1,2\}\) *\([0-9]\+\),\([0-9]\+\) \(.*\)$|S\1=\2\30\nN\1=\4|" -e "1 i [FM]" | \
iconv --from UTF8 --to WINDOWS-1251 > radio.ini

Общая идея такая - взять лишь строки со станциями и убрать из них нумерацию, которая могла сбиться при редактировании файла-списка станций (в данном случае список в файле radioStations.txt)
sed -n "s|^[0-9]\{1,2\} \(.*\)|\1|p" radioStations.txt

занумеровать все заново. К сожалению, cat -n не умеет нумеровать строки с 0 - поэтому нам требуется awk и NR-1.
awk "{print NR-1, \$0}"

Теперь форматируем строки - из одной вида <номер> <частота с точностью до десятых> <название станций>, две соответствующие шаблону. А в начале добавим строку "[FM]"
sed -e "s|^ *\([0-9]\{1,2\}\) *\([0-9]\+\),\([0-9]\+\) \(.*\)$|S\1=\2\30\nN\1=\4|" -e "1 i [FM]"

У меня локаль UTF8, поэтому перед записью в файл "radio.ini" мне требуется переконвертация
iconv --from UTF8 --to WINDOWS-1251 > radio.ini

однако, несмотря, на виндовую кодировку, к dos-формату (CRLF line terminators) файл приводить не нужно - плеер это сделает сам.

No comments: