[Neues Modul] StreamRadio

Begonnen von gemx, 08 Januar 2014, 19:31:54

Vorheriges Thema - Nächstes Thema

Rince

Um die Länger einer WAV Datei rauszufinden, müsste Tobias aktiv werden schätze ich.
Entweder mit dem mplayer (was theoretisch sinnvoll wäre, da der mplayer eh schon installiert ist),
oder z.B. mit http://www.etree.org/shnutils/shntool/.
Alternativ gibt es auch noch Audio::WAV::READ http://search.cpan.org/~npeskett/Audio-Wav-0.06/Wav/Read.pm

Ich denke, die CPAN Variante ist die schönste ;)

Dann wäre es außerdem noch schlau, wenn in den Readings von Text2Speech der Dateiname der abgespielten Datei stünde.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

fiedel

Hey Rince, du hast dir ja schon richtig Gedanken dazu gemacht!  :)
Ich hab mal kurz drübergeguckt und gesehen, dass die beiden Tools leider nur WAV können. Aber hast du (und ich auch) nicht auch MP3- Bestandteile in deiner "Soundbibliothek"? Ich wolllte immer schon mal forschen, ob der mplayer nicht was zurückgibt, wenn er mit der Wiedergabe fertig ist. Oder ob man ihn auf "busy/idle" abfragen kann. Naja - wenn mal Zeit dafür ist...  ;) Bei nächster Gelegenheit mache ich erst mal den Wikieintrag fürs Radio. Das ist hier mittlerweile viel zu unübersichtlich und ich hab ja keine Rechte um den ersten Post zu editieren.
Hast du schon mal das Squeezebox- Modul ausprobiert? Ich komme leider auch dazu nicht, aber das wäre ggf. eine bessere Alternative zum Streamradio. Das wird auch ständig weiterentwickelt. Ist wohl nur etwas aufwändiger einzurichten, da man ja den Server braucht. Und ein Softwarefrontend, falls man keine SB rumliegen hat.
Das ist sowieso die größte Sauerei in der HIFI- Geschichte, dass die die Touch eingestellt und nicht weiterentwickelt haben. Aber (*Verschwörungstheoriemodus an*) wenn ein Kistchen um die 300 Öcken auf einem Niveau von Linn und Konsorten für Tausende Euro spielt - was muss da schnelltens vom Markt verschwinden!?   *Verschwörungstheoriemodus aus*  ;D

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Reinerlein

Hi Frank,

ich bin der Author vom Sonos-Modul, und habe dieses jetzt auch offiziell eingecheckt.
Dort habe ich eine kleine MP3-Info Library mitgebracht, die ich in meinem Modul verwende um die Dauer der Zwischenansagen zu ermitteln (und dort die Tags mit Cover sauber zu setzen).

Da die ja nun da ist, kannst du sie ja auch verwenden...

Code-Auszug für die Längenermittlung (in Sekunden):

my $time;
eval {
use MP3::Info;
my $tag = get_mp3info(<filename>);
if ($tag) {
$time = $tag->{SECS};
}
};
if ($@) {
Log $udn, 2, 'Bei der MP3-Längenermittlung ist ein Fehler aufgetreten: '.$@;
}


Code-Auszug für die Tag-Setzung:

eval {
require MP3::Tag;
my $mp3 = MP3::Tag->new(<filename>);

$mp3->title_set(<durchsagetext>);
$mp3->artist_set('FHEM ~ Sonos');
$mp3->album_set('Sprachdurchsagen');

my $coverPath = <coverfilename>;
my $imgfile = SONOS_ReadFile($coverPath);
$mp3->set_id3v2_frame('APIC', 0, (($coverPath =~ m/\.png$/) ? 'image/png' : 'image/jpeg'), chr(3), 'Cover Image', $imgfile) if ($imgfile);
$mp3->update_tags();
};
if ($@) {
Log $udn, 2, 'Beim Setzen der MP3-Informationen (ID3TagV2) ist ein Fehler aufgetreten: '.$@;
}

SONOS_ReadFile liest einfach nur die komplette angegebene Datei (hier das Cover) binär ein...

Da sich das ganze in FHEM/lib befindet, musst du noch eine entsprechende LIB-Anweisung oben machen:

use lib ('./FHEM/lib', './lib');


Vielleicht kannst du das ja gebrauchen...

Grüße
Reinerlein

fiedel

Hi Reinerlein,

cool, vielen Dank! Ich sehe mir das an und versuche was draus zu machen. Meine Perl-/Prog.-kenntnisse sind zwar nicht berauschend, aber es ist auch nicht aussichtslos.  ;)

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

coolice

Guten Morgen @all,

da mir meine SD Karte kaputt gegangen ist und ich nun alles neu aufsetze muss ich nochmal eure Hilfe in Anspruch nehmen. Das Streamradio lief 1a doch habe ich jetzt das Problem das ich keinen Ton habe. Ich habe alle Lösungsansätze die hier besprochen wurden bereits erfolglos getestet.

amixer controls ergibt
numid=3,iface=MIXER,name='PCM Playback Route'
numid=2,iface=MIXER,name='PCM Playback Switch'
numid=1,iface=MIXER,name='PCM Playback Volume'
numid=5,iface=PCM,name='IEC958 Playback Con Mask'
numid=4,iface=PCM,name='IEC958 Playback Default'


also müsste doch amixer cset numid=1 -- %s%% richtig sein?!

Hab mal auf Verbose 5 gestellt aber ausser 2014.12.28 12:42:18 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/74_StreamRadio.pm line 272.
2014.12.28 12:42:38 1: PERL WARNING: Use of uninitialized value in string ne at ./FHEM/74_StreamRadio.pm line 144.
steht nichts drin.

Hat einer eine Idee was ich versuchen kann?

DerFrickler

Hallo zusammen, beim Feintuning bin ich noch lange nicht...

ich benutze die Modul Version 0.5 vom Februar 2014, gibt es da bereits eine neuere?

Meine Einstellungen:

Internals:
   DEF        /opt/fhem/StreamRadio.txt
   NAME       streamradio
   NR         787
   PLAYLIST   /opt/fhem/StreamRadio.txt
   STATE      playing
   TYPE       StreamRadio
   Readings:
     2014-12-28 13:07:12   Bitrate         128kbit/s
     2014-12-28 13:07:12   Genre           Rock
     2014-12-28 13:07:12   StationName     ROCK ANTENNE Classic Perlen
     2014-12-28 13:07:12   StreamTitle     Genesis - Musical Box (live)
     2014-12-28 13:07:10   StreamURL       http://www.rockantenne.de/webradio/channels/classic-perlen.m3u
     2014-12-28 13:07:10   state           playing
   Helper:
     Running_pid:
       abortArg
       abortFn
       finishFn
       fn         StreamRadio_Play
       pid        11050
Attributes:
   room       Test
   telnetport 7072
   volume_command amixer cset numid=1 -- %s%%


Ergebnis: kein Ton und der StreamTitle ändert sich auch nicht mehr; in der Prozessliste erscheint der player auch nicht, ausser wenn Text2Speech Nachrichten verlesen werden

Dann noch folgende Fehlermeldungen:


2014.12.28 13:07:05 1: PERL WARNING: Use of uninitialized value $pls{"\n"} in concatenation (.) or string at ./FHEM/74_StreamRadio.pm line 262.
2014.12.28 13:07:05 1: PERL WARNING: Use of uninitialized value $pls{"\n"} in index at ./FHEM/74_StreamRadio.pm line 264.
2014.12.28 13:07:10 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/74_StreamRadio.pm line 163.
2014.12.28 13:07:12 1: PERL WARNING: Odd number of elements in hash assignment at ./FHEM/74_StreamRadio.pm line 225, <$proc> line 18.


Für Hilfe währe ich dankbar!

Vielen Dank!

fiedel

@coolice: vielleicht noch einschalten per: amixer cset numid=2 -- 1 (Konsole)
Kennst du eigentlich dieses Win32- Kopiertool für SD-Karten? Das solltest du mal verwenden. Neu Einrichten ist für mich fast das Schlimmste wo gibt...  ;) Ich schreib mir direkt beim Einrichten auch immer noch eine Textdatei, was ich installiert habe und wie ich was eingerichtet und eingestellt habe. Und die Links der Seiten mit den Anleitungen für die komplizierten Sachen. Dann ist es später beim Systemwechsel auch nicht mehr ganz so nervig.

@Frickler: diese Version ist meine aktuelle (ohne Radiotext weil zu Fehlerhaft). Für die amixer- Einstellungen lies ggf. hier nach. Mehr weiß ich auch nicht. Aber diese Ansätze sind ja ein guter Startpunkt für eigene "Forschungen" bezüglich amixer.  ;)
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

DerFrickler

#142
ich habe alles noch mal angepasst... die Definition mit dem Slider hier aus dem Forum genommen und den amixer kontrolliert:


Frickler@raspberrypi ~ $ amixer controls
numid=3,iface=MIXER,name='PCM Playback Route'
numid=2,iface=MIXER,name='PCM Playback Switch'
numid=1,iface=MIXER,name='PCM Playback Volume'
numid=5,iface=PCM,name='IEC958 Playback Con Mask'
numid=4,iface=PCM,name='IEC958 Playback Default'



Internals:
   DEF        /opt/fhem/StreamRadio.txt
   NAME       SRadio
   NR         787
   PLAYLIST   /opt/fhem/StreamRadio.txt
   STATE      stopped
   TYPE       StreamRadio
   Readings:
     2014-12-28 15:08:44   state           stopped
     Bitrate:
       TIME       2014-12-28 15:08:44
       VAL
     Genre:
       TIME       2014-12-28 15:08:44
       VAL
     Stationname:
       TIME       2014-12-28 15:08:44
       VAL
     Streamtitle:
       TIME       2014-12-28 15:08:44
       VAL
     Streamurl:
       TIME       2014-12-28 15:08:44
       VAL
Attributes:
   group      Radio
   room       Radio
   telnetport 7072
   volume_command amixer cset numid=1 -- %s%%


jetzt habe ich folgende Meldungen im Log gefunden:


2014.12.28 15:11:32 1: PERL WARNING: Use of uninitialized value $pls{"\n"} in concatenation (.) or string at ./FHEM/74_StreamRadio.pm line 263.
2014.12.28 15:11:32 1: PERL WARNING: Use of uninitialized value $pls{"\n"} in index at ./FHEM/74_StreamRadio.pm line 266.
2014.12.28 15:11:32 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/74_StreamRadio.pm line 272.

fiedel

FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

DerFrickler

#144
leider nicht...

ich habe noch mal neu angefangen:

define SRadio StreamRadio /opt/fhem/StreamRadio.txt
attr SRadio telnetport 7072
attr SRadio volume_command amixer cset numid=1 -- %s%%
attr SRadio room Radio
attr SRadio group Radio

die Einstellung auf numid=1 sollte korrekt sein:

Frickler@raspberrypi ~ $ amixer cget numid=1
numid=1,iface=MIXER,name='PCM Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=-10239,max=400,step=0
  : values=2
  | dBscale-min=-102.39dB,step=0.01dB,mute=1


nur was soll dieses mute=1 da? bedeutet das aktuell Stummschaltung?

weiter mit dem Slider

define Dum_Volume_D dummy
attr Dum_Volume_D alias Volume
attr Dum_Volume_D setList state:slider,0,1,100
attr Dum_Volume_D webCmd state
attr Dum_Volume_D room Radio
attr Dum_Volume_D group Radio

define Func_Volume_N notify Dum_Volume_D {\
my $vol = Value("Dum_Volume_D");;\
fhem "set SRadio VOLUME $vol";;\
}
attr Func_Volume_N room Radio


ich betätige den Slider:


2014-12-28 18:31:01 StreamRadio SRadio VOLUME 74
2014-12-28 18:31:01 dummy Dum_Volume_D 74

und schaue mir amixer an

Frickler@raspberrypi ~ $ amixer cget numid=1
numid=1,iface=MIXER,name='PCM Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=-10239,max=400,step=0
  : values=2
  | dBscale-min=-102.39dB,step=0.01dB,mute=1

an dieser Stelle hätte ich mit irgendeiner Veränderung bei den "values" gerechnet, muss ja nicht unbedingt

ich bewege den Regler erneut:

2014-12-28 18:32:15 StreamRadio SRadio VOLUME 100
2014-12-28 18:32:15 dummy Dum_Volume_D 100


immer noch nichts


Frickler@raspberrypi ~ $ amixer cget numid=1
numid=1,iface=MIXER,name='PCM Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=-10239,max=400,step=0
  : values=2
  | dBscale-min=-102.39dB,step=0.01dB,mute=1

ich starte das Radio

2014-12-28 18:33:40 StreamRadio SRadio StreamURL: http://www.rockantenne.de/webradio/channels/classic-perlen.m3u
2014-12-28 18:33:40 StreamRadio SRadio playing

auch nichts

Frickler@raspberrypi ~ $ amixer cget numid=1
numid=1,iface=MIXER,name='PCM Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=-10239,max=400,step=0
  : values=2
  | dBscale-min=-102.39dB,step=0.01dB,mute=1


haste Das Radio auf HipHop-Only eingestellt? ;)

fiedel

#145
Viel zu viel auf einmal!  ;)
Zuerst muss mplayer und amixer von der Konsole laufen. Z.B.: per "mplayer http://www.motorfm.de/stream-berlin" oder andere Station einen Stream abspielen, hören ob was kommt und falls nicht, auf der Konsole den amixer aufrufen und einstellen, bzw. die Stummschaltung aufheben. Oder für die ersten Tests eine MP3 Datei abspielen. Dann kann der Rest (fhem) nachgezogen werden. Sonst findest du den Fehler nie.

Edit: Yo man!  ;D
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

DerFrickler

#146
mplayer http://www.motorfm.de/stream-berlin klappt nicht

pi@raspberrypi ~ $ mplayer http://www.motorfm.de/stream-berlin
Creating config file: /home/pi/.mplayer/config
MPlayer svn r34540 (Debian), built with gcc-4.6 (C) 2000-2012 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing http://www.motorfm.de/stream-berlin.
Resolving www.motorfm.de for AF_INET...
Connecting to server www.motorfm.de[87.106.70.5]: 80...

Server returned 404: Not Found
STREAM_ASF, URL: http://www.motorfm.de/stream-berlin
Resolving www.motorfm.de for AF_INET...
Connecting to server www.motorfm.de[87.106.70.5]: 80...

Server returned 404:Not Found
Failed to parse header.
Failed, exiting.
Resolving www.motorfm.de for AF_INET...
Connecting to server www.motorfm.de[87.106.70.5]: 80...

Server returned 404: Not Found
No stream found to handle url http://www.motorfm.de/stream-berlin


was ganz gut geht ist folgendes:

pi@raspberrypi ~ $ mplayer -playlist http://www.rockantenne.de/webradio/channels/classic-perlen.m3u
Resolving www.rockantenne.de for AF_INET...
Connecting to server www.rockantenne.de[194.97.153.233]: 80...

Cache size set to 320 KBytes
MPlayer svn r34540 (Debian), built with gcc-4.6 (C) 2000-2012 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing http://mp3channels.webradio.rockantenne.de/classic-perlen.
Resolving mp3channels.webradio.rockantenne.de for AF_INET...
Connecting to server mp3channels.webradio.rockantenne.de[195.30.109.21]: 80...

Name   : ROCK ANTENNE Classic Perlen
Genre  : Rock
Website: http://classicperlen.rockantenne.de/classicperlen
Public : no
Bitrate: 128kbit/s
Cache size set to 320 KBytes
Cache fill: 10.00% (32768 bytes)   

Audio only file format detected.
==========================================================================
Requested audio codec family [mpg123] (afm=mpg123) not available.
Enable it at compilation.
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
libavcodec version 53.35.0 (external)
Mismatching header version 53.32.2
AUDIO: 44100 Hz, 2 ch, floatle, 128.0 kbit/4.54% (ratio: 16000->352800)
Selected audio codec: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio)
==========================================================================
AO: [pulse] Init failed: Connection refused
Failed to initialize audio driver 'pulse'
AO: [alsa] 44100Hz 2ch floatle (4 bytes per sample)
Video: no video
Starting playback...
A:  29.2 (29.1) of 0.0 (unknown)  4.9% 45%
ICY Info: StreamTitle='White Lion - Wait';StreamUrl='http://classicperlen.rockantenne.de/classicperlen';
A:  94.5 (01:34.4) of 0.0 (unknown)  4.9% 46%


http://www.rockantenne.de/webradio/channels/classic-perlen.m3u wird übrigens von mir auch im SRadio aufgerufen.

fiedel

Na also! Weitermachen!  ;) Vielleicht ist dein telnet-Port nicht offen oder hat ein Passwort davor?
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

DerFrickler

#148
ja, aber es läuft im StreamRadio nicht, auch wenn ich es wollte. es läuft lediglich als terminal Kommando.

es werden zwar folgende Events generiert, nur kommt kein Audiooutput


Events:
2014-12-28 19:31:38 StreamRadio SRadio StreamURL: http://www.rockantenne.de/webradio/channels/classic-perlen.m3u
2014-12-28 19:31:38 StreamRadio SRadio playing

DerFrickler

#149
ja, ich habe ein Passwort davor... das habe ich vor langer Zeit mal gesetzt und nicht mehr daran gedacht. Muss das ganz raus, oder kann das im Modul mit gesetzt werden?

Edit:

Ich habe das Telnet-Passwort mal testweise entfernt, leider immer noch keine Audio-Output.

noch ein Edit:

wenn ich das richtig erkannt habe lautet der Aufruf im Modul: mplayer -really-quiet -nolirc -noconsolecontrols $PLString $aoString $StreamURL

$StreamURL dürfte demnach bei mir http://www.rockantenne.de/webradio/channels/classic-perlen.m3u sein

darf das .m3u am ende enthalten sein? wie ich im code sehen kann fügst du in der sub StreamRadio_Play noch ein .m3u hinzu

mplayer -really-quiet -nolirc -noconsolecontrols -playlist $aoString http://www.rockantenne.de/webradio/channels/classic-perlen.m3u.m3u

wo kommt aoString bzw aoDev her? ich würde den Aufruf mal gerne im Terminal versuchen