wip mpg123 demo

This commit is contained in:
~d6 2023-12-12 22:31:21 -05:00
parent a22cbb8aa3
commit 214d504311
1 changed files with 116 additions and 0 deletions

116
test/mpg123.tal Normal file
View File

@ -0,0 +1,116 @@
( 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 &param $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