2 * enlightenment sound daemon for plan9front
4 * usage: aux/listen1 -t 'tcp!*!16001' esd
23 if(readn(0, buf, 4) != 4)
26 return buf[3] | buf[2]<<8 | buf[1]<<16 | buf[0]<<24;
28 return buf[0] | buf[1]<<8 | buf[2]<<16 | buf[3]<<24;
34 if(readn(0, buf, 128) != 128)
45 buf[3] = v & 0xFF, v >>= 8;
46 buf[2] = v & 0xFF, v >>= 8;
47 buf[1] = v & 0xFF, v >>= 8;
50 buf[0] = v & 0xFF, v >>= 8;
51 buf[1] = v & 0xFF, v >>= 8;
52 buf[2] = v & 0xFF, v >>= 8;
55 if(write(1, buf, 4) != 4)
60 pcmfmt(ulong fmt, ulong rate)
64 snprint(buf, sizeof(buf), "s%dc%dr%lud",
65 (fmt & 0x000F) == 0x01 ? 16 : 8,
66 (fmt & 0x00F0) == 0x20 ? 2 : 1,
74 ulong op, id, len, fmt, rate;
79 /* initial protocol */
80 if(readn(0, buf, 16) != 16) /* key */
82 if((get4() & 0xFF) == 'E') /* endian */
93 case 3: /* stream-play */
98 /* wait 2 seconds, device might be busy */
99 for(i=0; i<2000; i+=100){
100 fd = open("/dev/audio", OWRITE);
108 execl("/bin/audio/pcmconv", "pcmconv",
109 "-i", pcmfmt(fmt, rate), 0);
113 case 5: /* stream-mon */
117 fd = open("/dev/audio", OREAD);
121 execl("/bin/audio/pcmconv", "pcmconv",
122 "-o", pcmfmt(fmt, rate), 0);
125 case 6: /* sample-cache */
126 fmt = get4(); /* format */
127 rate = get4(); /* rate */
128 len = get4(); /* size */
130 id = get4(); /* sample-id */
133 fd = open("/dev/null", OWRITE);
137 snprint(buf, sizeof(buf), "%lud", len);
138 execl("/bin/audio/pcmconv", "pcmconv",
140 "-i", pcmfmt(fmt, rate), 0);
146 case 7: /* sample-free */
147 case 8: /* sample-play */
148 case 9: /* sample-loop */
149 case 10: /* sample-stop */
150 case 11: /* sample-kill */
154 case 12: /* standby */
155 case 13: /* resume */
157 case 14: /* sample-getid */
159 put4(0);/* sample-id */
161 case 15: /* stream-filter */
169 case 16: /* server-info */
170 case 17: /* server-all-info */
171 put4(1); /* version */
172 put4(44100); /* rate */
173 put4(0x0021); /* fmt */
177 memset(buf, 0, sizeof(buf));
178 if(write(1, buf, 32) != 32)
181 case 18: /* subscribe */
182 case 19: /* unsubscribe */
184 case 20: /* stream-pan */
185 case 21: /* sample-pan */
192 case 22: /* standby-mode */
193 get4(); /* version */
197 case 23: /* latency */