]> git.lizzy.rs Git - plan9front.git/blob - rc/bin/play
ircrc: various improvements (thanks again pap!)
[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(~ $#* 0){
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 `{file -m $tmp(1)} xxx
29                 cleanup
30         }
31         if not {
32                 switch($1){
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 'Icy-MetaData: 0' $j | play1
38                                 }
39                                 if not {
40                                         if(test -r $"j)
41                                                 play1 <$"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 *pls*
56                         awk 'BEGIN {FS="="} /^File/{print $2}' | play1 plain
57                 case *
58                         echo $argv0: unknown format: $1 >[1=2]
59                 }
60         }
61 }
62
63 fn usage {
64         echo usage: $argv0 [ -o file ] [ file ... ] >[1=2]
65         exit usage
66 }
67
68 while(~ $1 -*){
69         switch($1){
70         case -o
71                 out=$2
72                 shift
73         case *
74                 usage
75         }
76         shift
77 }
78
79 # boost priority
80 @{echo pri 13 >/proc/$pid/ctl} >/dev/null >[2=1] 
81
82 >$out {
83         if(~ $#* 0){play1; exit}
84         for(i){echo $i} | play1 plain 
85