#include <fcntl.h>
#include <ctype.h>
#include <errno.h>
-#include <netinet/in.h>
#include <sys/asoundlib.h>
#include <assert.h>
#include <sys/poll.h>
{
AuHeader *ap = buffer;
- if (ntohl(ap->magic) != AU_MAGIC)
+ if (ap->magic != AU_MAGIC)
return -1;
- if (ntohl(ap->hdr_size) > 128 || ntohl(ap->hdr_size) < 24)
+ if (BE_INT(ap->hdr_size) > 128 || BE_INT(ap->hdr_size) < 24)
return -1;
- count = ntohl(ap->data_size);
- switch (ntohl(ap->encoding)) {
+ count = BE_INT(ap->data_size);
+ switch (BE_INT(ap->encoding)) {
case AU_FMT_ULAW:
format.format = SND_PCM_SFMT_MU_LAW;
break;
default:
return -1;
}
- format.rate = ntohl(ap->sample_rate);
+ format.rate = BE_INT(ap->sample_rate);
if (format.rate < 2000 || format.rate > 256000)
return -1;
- format.channels = ntohl(ap->channels);
+ format.channels = BE_INT(ap->channels);
if (format.channels < 1 || format.channels > 128)
return -1;
- if (read(fd, buffer + sizeof(AuHeader), ntohl(ap->hdr_size) - sizeof(AuHeader)) < 0) {
+ if (read(fd, buffer + sizeof(AuHeader), BE_INT(ap->hdr_size) - sizeof(AuHeader)) < 0) {
fprintf(stderr, "%s: read error\n", command);
exit(EXIT_FAILURE);
}
count = buffer_size;
}
while (count > 0) {
- struct pollfd pfd;
r = write_func(pcm_handle, data, count);
if (r == -EAGAIN || (r >= 0 && r < count)) {
struct pollfd pfd;
f.type = WAV_FMT;
f.length = LE_INT(16);
f.format = LE_INT(WAV_PCM_CODE);
- f.modus = LE_SHORT(format.voices);
+ f.modus = LE_SHORT(format.channels);
f.sample_fq = LE_INT(format.rate);
#if 0
tmp2 = (samplesize == 8) ? 1 : 2;
tmp2 = dsp_speed * format.channels * tmp2;
f.byte_p_sec = LE_SHORT(tmp2);
#else
- tmp2 = format.voices * ((bits + 7) / 8);
+ tmp2 = format.channels * ((bits + 7) / 8);
f.byte_p_spl = LE_SHORT(tmp2);
tmp2 = tmp2 * format.rate;
f.byte_p_sec = LE_SHORT(tmp2);
{
AuHeader ah;
- ah.magic = htonl(AU_MAGIC);
- ah.hdr_size = htonl(24);
- ah.data_size = htonl(cnt);
+ ah.magic = AU_MAGIC;
+ ah.hdr_size = BE_INT(24);
+ ah.data_size = BE_INT(cnt);
switch (format.format) {
case SND_PCM_SFMT_MU_LAW:
- ah.encoding = htonl(AU_FMT_ULAW);
+ ah.encoding = BE_INT(AU_FMT_ULAW);
break;
case SND_PCM_SFMT_U8:
- ah.encoding = htonl(AU_FMT_LIN8);
+ ah.encoding = BE_INT(AU_FMT_LIN8);
break;
case SND_PCM_SFMT_S16_LE:
- ah.encoding = htonl(AU_FMT_LIN16);
+ ah.encoding = BE_INT(AU_FMT_LIN16);
break;
default:
fprintf(stderr, "%s: Sparc Audio doesn't support %s format...\n", command, snd_pcm_get_format_name(format.format));
exit(EXIT_FAILURE);
}
- ah.sample_rate = htonl(format.rate);
- ah.channels = htonl(format.channels);
+ ah.sample_rate = BE_INT(format.rate);
+ ah.channels = BE_INT(format.channels);
if (write(fd, &ah, sizeof(AuHeader)) != sizeof(AuHeader)) {
fprintf(stderr, "%s: write error\n", command);
exit(EXIT_FAILURE);
void playbackv_go(int* fds, unsigned int channels, size_t loaded, size_t count, int rtype, char **names)
{
int r;
- size_t c, expected;
size_t vsize;
unsigned int channel;
u_char *bufs[channels];
#define COMPOSE_ID(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d)<<24))
#define LE_SHORT(v) (v)
#define LE_INT(v) (v)
+#define BE_SHORT(v) bswap_16(v)
+#define BE_INT(v) bswap_32(v)
#else
#define COMPOSE_ID(a,b,c,d) ((d) | ((c)<<8) | ((b)<<16) | ((a)<<24))
#define LE_SHORT(v) bswap_16(v)
#define LE_INT(v) bswap_32(v)
+#define BE_SHORT(v) (v)
+#define BE_INT(v) (v)
#endif
#define WAV_RIFF COMPOSE_ID('R','I','F','F')
/* Definitions for Sparc .au header */
-#define AU_MAGIC 0x2e736e64
+#define AU_MAGIC COMPOSE_ID('.','s','n','d')
#define AU_FMT_ULAW 1
#define AU_FMT_LIN8 2
#define AU_FMT_LIN16 3
typedef struct au_header {
- u_int magic; /* magic '.snd' */
+ u_int magic; /* '.snd' */
u_int hdr_size; /* size of header (min 24) */
u_int data_size; /* size of data */
u_int encoding; /* see to AU_FMT_XXXX */