1 line
3.4 KiB
C++
1 line
3.4 KiB
C++
#include "sndserver.h"
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <audio.h>
|
|
#include "irix.h"
|
|
|
|
#define al_QUEUESIZE SAMPLECOUNT*2
|
|
//#define al_QUEUESIZE SAMPLECOUNT
|
|
|
|
extern int snd_verbose;
|
|
|
|
extern int myargc;
|
|
extern char **myargv;
|
|
|
|
static ALconfig al_config;
|
|
static ALport al_outport;
|
|
|
|
void I_InitMusic(void)
|
|
{
|
|
}
|
|
|
|
void I_InitSound(int samplerate, int samplesize)
|
|
{
|
|
|
|
long paramset[16*2];
|
|
|
|
if (samplesize == 24)
|
|
samplesize = 32; // takes care of padding for 24-bit sound
|
|
|
|
ALseterrorhandler(0); // turn off audio library error handler
|
|
al_config = ALnewconfig(); // create new config for specific rate & format
|
|
|
|
// ALsetchannels(al_config, AL_MONO); // mono
|
|
ALsetchannels(al_config, AL_STEREO); // stereo
|
|
ALsetqueuesize(al_config, al_QUEUESIZE); // submission queue size
|
|
ALsetsampfmt(al_config, AL_SAMPFMT_TWOSCOMP); // 2's complement fmt
|
|
ALsetwidth(al_config, samplesize/8); // word size
|
|
|
|
al_outport = ALopenport("iddigout1", "w", al_config);
|
|
|
|
if (!al_outport)
|
|
{
|
|
fprintf(stderr, "Could not open audio port\n");
|
|
exit(-1);
|
|
}
|
|
|
|
paramset[0] = AL_OUTPUT_RATE;
|
|
paramset[1] = samplerate;
|
|
ALsetparams(AL_DEFAULT_DEVICE, paramset, 2);
|
|
|
|
paramset[0*2] = AL_INPUT_SOURCE;
|
|
paramset[1*2] = AL_LEFT_INPUT_ATTEN;
|
|
paramset[2*2] = AL_RIGHT_INPUT_ATTEN;
|
|
paramset[3*2] = AL_INPUT_RATE;
|
|
paramset[4*2] = AL_OUTPUT_RATE;
|
|
paramset[5*2] = AL_LEFT_SPEAKER_GAIN;
|
|
paramset[6*2] = AL_RIGHT_SPEAKER_GAIN;
|
|
paramset[7*2] = AL_INPUT_COUNT;
|
|
paramset[8*2] = AL_OUTPUT_COUNT;
|
|
paramset[9*2] = AL_UNUSED_COUNT;
|
|
paramset[10*2] = AL_SYNC_INPUT_TO_AES;
|
|
paramset[11*2] = AL_SYNC_OUTPUT_TO_AES;
|
|
paramset[12*2] = AL_MONITOR_CTL;
|
|
paramset[13*2] = AL_LEFT_MONITOR_ATTEN;
|
|
paramset[14*2] = AL_RIGHT_MONITOR_ATTEN;
|
|
|
|
ALgetparams(AL_DEFAULT_DEVICE, paramset, 15*2);
|
|
|
|
if (snd_verbose)
|
|
{
|
|
fprintf(stderr, "AL_INPUT_SOURCE=%d\n", paramset[0*2+1]);
|
|
fprintf(stderr, "AL_LEFT_INPUT_ATTEN=%d\n", paramset[1*2+1]);
|
|
fprintf(stderr, "AL_RIGHT_INPUT_ATTEN=%d\n", paramset[2*2+1]);
|
|
fprintf(stderr, "AL_INPUT_RATE=%d\n", paramset[3*2+1]);
|
|
fprintf(stderr, "AL_OUTPUT_RATE=%d\n", paramset[4*2+1]);
|
|
fprintf(stderr, "AL_LEFT_SPEAKER_GAIN=%d\n", paramset[5*2+1]);
|
|
fprintf(stderr, "AL_RIGHT_SPEAKER_GAIN=%d\n", paramset[6*2+1]);
|
|
fprintf(stderr, "AL_INPUT_COUNT=%d\n", paramset[7*2+1]);
|
|
fprintf(stderr, "AL_OUTPUT_COUNT=%d\n", paramset[8*2+1]);
|
|
fprintf(stderr, "AL_UNUSED_COUNT=%d\n", paramset[9*2+1]);
|
|
fprintf(stderr, "AL_SYNC_INPUT_TO_AES=%d\n", paramset[10*2+1]);
|
|
fprintf(stderr, "AL_SYNC_OUTPUT_TO_AES=%d\n", paramset[11*2+1]);
|
|
fprintf(stderr, "AL_MONITOR_CTL=%d\n", paramset[12*2+1]);
|
|
fprintf(stderr, "AL_LEFT_MONITOR_ATTEN=%d\n", paramset[13*2+1]);
|
|
fprintf(stderr, "AL_RIGHT_MONITOR_ATTEN=%d\n", paramset[14*2+1]);
|
|
|
|
fprintf(stderr, "ALgetchannels()=%d\n", ALgetchannels(al_config));
|
|
fprintf(stderr, "ALgetqueuesize()=%d\n", ALgetqueuesize(al_config));
|
|
fprintf(stderr, "ALgetsampfmt()=%d\n", ALgetsampfmt(al_config));
|
|
fprintf(stderr, "ALgetwidth()=%d\n", ALgetwidth(al_config));
|
|
}
|
|
|
|
}
|
|
|
|
signed char debugbuffer[1024][8];
|
|
|
|
void I_SubmitOutputBuffer(void *samples, int samplecount)
|
|
{
|
|
|
|
int i;
|
|
|
|
/*
|
|
for (i=0 ; i<1024 ; i++)
|
|
{
|
|
debugbuffer[i][0] = ((signed char *) samples)[i];
|
|
debugbuffer[i][1] = ((signed char *) samples)[i+1];
|
|
}
|
|
ALwritesamps(al_outport, debugbuffer, 1024);
|
|
*/
|
|
|
|
ALwritesamps(al_outport, samples, samplecount*2);
|
|
|
|
}
|
|
|
|
void I_ShutdownSound(void)
|
|
{
|
|
|
|
ALfreeconfig(al_config);
|
|
ALcloseport(al_outport);
|
|
|
|
}
|
|
|
|
void I_ShutdownMusic(void)
|
|
{
|
|
}
|