]> git.lizzy.rs Git - plan9front.git/blobdiff - rc/bin/play
play(1): handle file names containing consecutive spaces
[plan9front.git] / rc / bin / play
index f7b8ce37bc4166df8d03cc98d701cd8eb60e343a..dfb05ed7f7a70db108403f1ceceb4e2284a8282c 100755 (executable)
@@ -1,5 +1,8 @@
 #!/bin/rc
+rfork e
 
+nl='
+'
 out=/dev/audio
 typ=()
 tmp=()
@@ -21,23 +24,23 @@ fn sigexit {
 }
 
 fn play1 {
-       if(~ $#* 0){
+       if(! ~ $#* 2){
                tmp=(/tmp/play.$pid.$#tmp.tmp $tmp)
                dd -bs 8192 -count 1 >$tmp(1) >[2]/dev/null
-               cat $tmp(1) /fd/0 | play1 `{file -m $tmp(1)} xxx
+               cat $tmp(1) /fd/0 | play1 $1 `{file -m $tmp(1)}
                cleanup
        }
        if not {
-               switch($1){
+               switch($2){
                case *plain*
-                       sed 's/\r//g' | while(j=`{read}){
+                       sed 's/\r//g' | while(j=`$nl{read}){
                                echo $"j >[1=2]
                                if(~ $"j http:* https:* HTTP:* HTTPS:*){
-                                       hget -r 'Icy-MetaData: 0' $j | play1
+                                       hget -r 'User-Agent: play' -r 'Icy-MetaData: 0' $"j | play1 $"j
                                }
                                if not {
                                        if(test -r $"j)
-                                               play1 <$"j
+                                               play1 <$"j $"j
                                        if not {
                                                echo $argv0: 'can''t open file:' $"j >[1=2]
                                        }
@@ -51,16 +54,39 @@ fn play1 {
                        audio/wavdec
                case *flac*
                        audio/flacdec
+               case *audio/basic*
+                       audio/sundec
+               case *audio/midi*
+                       games/midi -c
+               case *audio/mus*
+                       games/mus | games/midi -c
                case *pls*
-                       awk 'BEGIN {FS="="} /^File/{print $2}' | play1 plain
+                       awk 'BEGIN {FS="="} /^File/{print $2}' | play1 list plain
                case *
-                       echo $argv0: unknown format: $1 >[1=2]
+                       switch($1){
+                       case *.mp3 *.MP3
+                               audio/mp3dec
+                       case *.ogg *.OGG
+                               audio/oggdec
+                       case *.wav *.WAV
+                               audio/wavdec
+                       case *.flac *.FLAC
+                               audio/flacdec
+                       case *.au *.AU
+                               audio/sundec
+                       case *.mid *.MID
+                               games/midi -c
+                       case *.mus *.MUS
+                               games/mus | games/midi -c
+                       case *
+                               echo $argv0: $1: unknown format: $2 >[1=2]
+                       }
                }
        }
 }
 
 fn usage {
-       echo usage: $argv0 [ -o file ] [ file ... ] >[1=2]
+       echo usage: $argv0 '[ -o file ] [ file ... ]' >[1=2]
        exit usage
 }
 
@@ -79,6 +105,6 @@ while(~ $1 -*){
 @{echo pri 13 >/proc/$pid/ctl} >/dev/null >[2=1] 
 
 >$out {
-       if(~ $#* 0){play1; exit}
-       for(i){echo $i} | play1 plain 
+       if(~ $#* 0){play1 stdin; exit}
+       for(i){echo $"i} | play1 args plain
 }