117 lines
3.9 KiB
Tal
117 lines
3.9 KiB
Tal
|
( mpg123.tal )
|
||
|
( )
|
||
|
( runs mpg123 in a pipe, using -R to enable remote mode )
|
||
|
( )
|
||
|
( )
|
||
|
( basic protocol: )
|
||
|
( )
|
||
|
( < @R ... ; startup banner )
|
||
|
( > L path/to/track.mp3 ; starts playing )
|
||
|
( < @I ... ; ID3 metadata )
|
||
|
( < @P ... ; playing state )
|
||
|
( < @S ... ; sound info )
|
||
|
( < @F ... ; frame/position info )
|
||
|
( )
|
||
|
( example session: )
|
||
|
( )
|
||
|
( < @R MPG123 (ThOr) v10 ; startup banner )
|
||
|
( > L spectra.mp3 ; load command )
|
||
|
( > @I { ; start id3 )
|
||
|
( > @I ID3v2.title:Spectra ; song title )
|
||
|
( > @I ID3v2.artist:Chipzel ; artist name )
|
||
|
( > @I ID3v2.album:Spectra ; album title )
|
||
|
( > @I ID3v2.year:2013 ; song year )
|
||
|
( > @I ID3v2.comment:Visit https://chipzelmusic.bandcamp.com ; comment )
|
||
|
( > @I ... ; other info possible )
|
||
|
( > @I } ; end id3 )
|
||
|
( > @P 2 ; song playing )
|
||
|
( > @S 1.0 3 44100 Joint-Stereo 2 1044 2 0 0 0 320 0 1 ; sound info )
|
||
|
( > @F 0 9052 0.00 236.46 ; first frame output )
|
||
|
( > @F ... ; lots of frames of output )
|
||
|
( > @F 9051 1 236.43 0.03 ; last frame output )
|
||
|
( > @P 3 ; song ended )
|
||
|
( > @P 0 ; stopped )
|
||
|
( )
|
||
|
( @S <mpeg-version> <layer> <freq> _ _ <frame-size> <stereo> _ _ _ <bitrate> _ <vbr> )
|
||
|
( )
|
||
|
( other commands: )
|
||
|
( )
|
||
|
( > LP ; load paused, without playing )
|
||
|
( ... )
|
||
|
( < @P 1 ; paused )
|
||
|
( )
|
||
|
( > pause ; pause playback )
|
||
|
( < @P 1 ; paused )
|
||
|
( > pause ; unpause playback )
|
||
|
( < @P 1 ; playing )
|
||
|
( )
|
||
|
( > stop ; stop playback )
|
||
|
( < @P 0 ; stopped )
|
||
|
( )
|
||
|
( > V 10 ; set volume to 10% )
|
||
|
( < @V 10.000000% ; current volume )
|
||
|
( > V 100 ; set volume to 100% )
|
||
|
( < @V 100.000000% ; current volume )
|
||
|
|
||
|
|10 @Console [
|
||
|
&vector $2 &stdin $1 &pad1 $4 &type $1
|
||
|
&stdout $1 &stderr $1 &proc-put $1 &pad2 $1 ¶m $2 &opts $1 &host-put $1
|
||
|
]
|
||
|
|
||
|
|0000
|
||
|
|
||
|
|0100 ( -> BRK )
|
||
|
;on-console .Console/vector DEO2 ( ; set up console vector callback )
|
||
|
#31 .Console/opts DEO ( ; child 1: write child.in, read child.out )
|
||
|
;mpg123-cmd .Console/param DEO2 ( ; set up `ispell -a` to run )
|
||
|
#01 .Console/host-put DEO BRK ( ; run the command now and return )
|
||
|
|
||
|
@on-console ( -> BRK )
|
||
|
.Console/type DEI #01 EQU ?on-stdin
|
||
|
.Console/type DEI #21 EQU ?on-mpg123
|
||
|
BRK
|
||
|
|
||
|
@reset ( buf* addr* -> )
|
||
|
OVR2 #0000 SWP2 STA2 ( ; buf<-0000 )
|
||
|
STA2 JMP2r ( ; addr<-buf )
|
||
|
|
||
|
@save ( c^ addr* -> )
|
||
|
STH2k LDA2 STH2k ( c^ pos* [addr* pos*] )
|
||
|
STA INC2r #00 STH2kr STA ( [addr* pos+1*] ; pos<-c, pos+1<-00 )
|
||
|
STH2r STH2r STA2 JMP2r ( ; addr<-pos+1 )
|
||
|
|
||
|
( exec should have type [->] )
|
||
|
@save-or-exec ( exec* addr* -> BRK )
|
||
|
,&addr STR2 ,&exec STR2
|
||
|
.Console/stdin DEI #0a EQU LIT2 [ &exec $2 ] JCN2
|
||
|
.Console/stdin DEI LIT2 [ &addr $2 ] !save
|
||
|
|
||
|
@on-stdin ( -> BRK )
|
||
|
;exec-stdin ;input/pos save-or-exec BRK
|
||
|
|
||
|
@exec-stdin ( -> )
|
||
|
;input ;input/pos !reset
|
||
|
|
||
|
@on-mpg123 ( -> BRK )
|
||
|
;exec-mpg123 ;buffer/pos save-or-exec BRK
|
||
|
|
||
|
@exec-mpg123 ( -> )
|
||
|
JMP2r
|
||
|
|
||
|
@print ( c^ -> )
|
||
|
.Console/stdout DEO JMP2r ( ; print character to stdout )
|
||
|
|
||
|
@println ( c^ -> )
|
||
|
print #0a .Console/stdout DEO JMP2r ( ; print character and newline to stdout )
|
||
|
|
||
|
@input [ $80 &pos $2 ]
|
||
|
@buffer [ $80 &pos $2 ]
|
||
|
|
||
|
@mpg123-cmd "mpg123 20 "-R 00 ( ; "mpg123 -R" )
|
||
|
|
||
|
@frames-past $2
|
||
|
@frames-togo $2
|
||
|
|
||
|
@time-past $9
|
||
|
@time-togo $9
|