Удобное радио из консоли через mpg123

У меня почти все время играет “Радио Рокс”.

Играет через mpg123, и все бы хорошо, но выхлоп у него выглядит примерно так:

High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
    version 1.12.1; written and copyright by Michael Hipp and others
    free software (LGPL/GPL) without any warranty but with best wishes

rectory: http://online-radioroks.tavrmedia.ua:8000/
Playing MPEG stream 1 of 1: RadioROKS_256 ...
ICY-NAME: Radio ROKS
ICY-URL: http://www.radioroks.com.ua
MPEG 1.0 layer III, 256 kbit/s, 44100 Hz joint-stereo

ICY-META: StreamTitle='Машина Времени - Барьер';

ICY-META: StreamTitle='Машина Времени - Барьер';

ICY-META: StreamTitle='Radio ROKS - Київ: 103.6 fm';

ICY-META: StreamTitle='Radio ROKS - Київ: 103.6 fm';

ICY-META: StreamTitle='Radio ROKS - Київ: 103.6 fm';

ICY-META: StreamTitle='AC/DC - T.N.T.';

ICY-META: StreamTitle='AC/DC - T.N.T.';

ICY-META: StreamTitle='AC/DC - T.N.T.';

ICY-META: StreamTitle='AC/DC - T.N.T.';

ICY-META: StreamTitle='AC/DC - T.N.T.';

Вобщем-то неплохо…

Но и не хорошо.

Хотелось бы как-то так:

Radio ROKS - Київ: 103.6 fm
Demon - Expressing The Heart
@ Made In Rock: Alice In Chains - Would

И конечно с выводом названия композиции через всплывающие сообщения.

Вот сам bash скрипт:

#! /bin/bash

do_log() {
 while true
 do
 read -d ';'
 if [ ! -z "$REPLY" ]; then
 track_old=$track_now;

 track_now=$(echo "$REPLY"| grep ICY-META|sed s/ICY-META:\ StreamTitle=//g);
[ "$track_old" = "$track_now" ] || (notify-send "$track_now"&& echo $track_now)
 sleep 10;
 fi
 done
 }

mpg123 http://online-radioroks.tavrmedia.ua:8000/RadioROKS_256 &> /dev/stdout | do_log

Все бы хорошо, если бы скрипт не писал на диск. Причем запись в /tmp тоже чаще всего винчестер. А так:
a) протрется диск именно на этом файле через пару месяцев;
b) диск не будет засыпать (если настроено)

А не проще пропатчить исходник, сделать такую оптцию и выложить патченный ebuild?

А не проще пропатчить исходник, сделать такую оптцию и выложить патченный ebuild?

Будет время - сделаю патч.

Вариант без записи на диск выглядит примерно так:

mpg123 http://online-radioroks.tavrmedia.ua:8000/RadioROKS_256 &> /dev/stdout|sed -e "s/.*='\(.*\)';/\1/"

Плюсы:

  • Не пишет на диск.

Минусы:

  • В выхлопе название трека повторяется несколько раз.
  • не представляю как его в notify-send запихнуть

А вообще - как появится время обязательно посмотрю сорцы. Так что будет патч)

Нет под рукой mpg123, так что не проверял. Попробуйте

#! /bin/bash

do_log() {
  while true
  do
    read -d ';'
    if [ ! -z "$REPLY" ]; then
      track_old=$track_now
      track_now=$(echo "$REPLY"|sed '$!d'|sed -e "s/.*='\(.*\)';?/\1/");
      [ "$track_old" = "$track_now" ] || (notify-send "$track_now"&& echo $track_now)
      sleep 10;
     fi
  done
}


mpg123 http://online-radioroks.tavrmedia.ua:8000/RadioROKS_256& | do_log

Спасибо огромное Артёму Власову

Вот в таком варианте заработало.

#! /bin/bash

do_log() {
 while true
 do
 read -d ';'
 if [ ! -z "$REPLY" ]; then
 track_old=$track_now;

 track_now=$(echo "$REPLY"| grep ICY-META|sed s/ICY-META:\ StreamTitle=//g);
[ "$track_old" = "$track_now" ] || (notify-send "$track_now"&& echo $track_now)
 sleep 10;
 fi
 done
 }

mpg123 http://online-radioroks.tavrmedia.ua:8000/RadioROKS_256 &> /dev/stdout | do_log