]> git.lizzy.rs Git - plan9front.git/blob - rc/bin/play
g: revert accidental change, document missing file type
[plan9front.git] / rc / bin / play
1 #!/bin/rc
2 rfork e
3
4 out=/dev/audio
5 typ=()
6 tmp=()
7 argv0=$0
8
9 fn cleanup {
10         if(! ~ $#tmp 0)
11                 rm -f $tmp
12         tmp=()
13 }
14
15 fn sigint {
16         cleanup
17         exit
18 }
19
20 fn sigexit {
21         cleanup
22 }
23
24 fn play1 {
25         if(! ~ $#* 2){
26                 tmp=(/tmp/play.$pid.$#tmp.tmp $tmp)
27                 dd -bs 8192 -count 1 >$tmp(1) >[2]/dev/null
28                 cat $tmp(1) /fd/0 | play1 $1 `{file -m $tmp(1)}
29                 cleanup
30         }
31         if not {
32                 switch($2){
33                 case *plain*
34                         sed 's/\r//g' | while(j=`{read}){
35                                 echo $"j >[1=2]
36                                 if(~ $"j http:* https:* HTTP:* HTTPS:*){
37                                         hget -r 'User-Agent: play' -r 'Icy-MetaData: 0' $"j | play1 $"j
38                                 }
39                                 if not {
40                                         if(test -r $"j)
41                                                 play1 <$"j $"j
42                                         if not {
43                                                 echo $argv0: 'can''t open file:' $"j >[1=2]
44                                         }
45                                 }
46                         }
47                 case *ogg* *vorbis*
48                         audio/oggdec
49                 case *mp3* *mpeg*
50                         audio/mp3dec
51                 case *wave*
52                         audio/wavdec
53                 case *flac*
54                         audio/flacdec
55                 case *audio/basic*
56                         audio/sundec
57                 case *audio/midi*
58                         games/midi -c
59                 case *audio/mus*
60                         games/mus | games/midi -c
61                 case *pls*
62                         awk 'BEGIN {FS="="} /^File/{print $2}' | play1 list plain
63                 case *
64                         switch($1){
65                         case *.mp3 *.MP3
66                                 audio/mp3dec
67                         case *.ogg *.OGG
68                                 audio/oggdec
69                         case *.wav *.WAV
70                                 audio/wavdec
71                         case *.flac *.FLAC
72                                 audio/flacdec
73                         case *.au *.AU
74                                 audio/sundec
75                         case *.mid *.MID
76                                 games/midi -c
77                         case *.mus *.MUS
78                                 games/mus | games/midi -c
79                         case *
80                                 echo $argv0: $1: unknown format: $2 >[1=2]
81                         }
82                 }
83         }
84 }
85
86 fn usage {
87         echo usage: $argv0 '[ -o file ] [ file ... ]' >[1=2]
88         exit usage
89 }
90
91 while(~ $1 -*){
92         switch($1){
93         case -o
94                 out=$2
95                 shift
96         case *
97                 usage
98         }
99         shift
100 }
101
102 # boost priority
103 @{echo pri 13 >/proc/$pid/ctl} >/dev/null >[2=1] 
104
105 >$out {
106         if(~ $#* 0){play1 stdin; exit}
107         for(i){echo $i} | play1 args plain
108