static
void init_header(struct ExtSoundHeader *header, Ptr samples,
		 unsigned int nsamples, unsigned int channels,
		 unsigned int speed, unsigned int bits)
{
  double dspeed = speed;

  header->samplePtr        = samples;
  header->numChannels      = channels;
  header->sampleRate       = FixRatio(speed, 1);
  header->loopStart        = 0;
  header->loopEnd          = 0;
  header->encode           = extSH;
  header->baseFrequency    = kMiddleC;
  header->numFrames        = nsamples;
  dtox80(&dspeed, &header->AIFFSampleRate);
  header->markerChunk      = 0;
  header->instrumentChunks = 0;
  header->AESRecording     = 0;
  header->sampleSize       = bits;
  header->futureUse1       = 0;
  header->futureUse2       = 0;
  header->futureUse3       = 0;
  header->futureUse4       = 0;
}
Exemple #2
0
static BOOL SoundBuffer_Init(UINT rate, UINT samples) {

	QSOUND			qs;
	double			drate;
	extended80		extFreq;
	UINT			buffersize;
	int				i;
	ExtSoundHeader	*buf;

	qs = &QSound;
	qs->rate = rate;
	qs->samples = samples;
	buffersize = samples * 4;
	qs->buffersize = buffersize;
	drate = rate;
	dtox80(&drate, &extFreq);

#if !defined(SOUND_CRITICAL)
	qs->extendbuffer = (SINT16 *)_MALLOC(buffersize, "Extend buffer");
	if (qs->extendbuffer == NULL) {
		goto sbinit_err;
	}
#endif

	buffersize += sizeof(ExtSoundHeader);
	for (i=0; i<SOUNDBUFFERS; i++) {
		buf = (ExtSoundHeader *)_MALLOC(buffersize, "ExtSoundHeader");
		qs->buf[i] = buf;
		if (buf == NULL) {
			goto sbinit_err;
		}
		ZeroMemory(buf, buffersize);
		buf->numChannels = 2;
		buf->sampleRate = (UInt32)rate << 16;
		buf->encode = extSH;
		buf->numFrames = samples;
		buf->AIFFSampleRate = extFreq;
		buf->sampleSize = 16;

		qs->cmd[i].cmd = bufferCmd;
		qs->cmd[i].param2 = (SInt32)buf;
		qs->cbcmd[i].cmd = callBackCmd;
		qs->cbcmd[i].param1 = (i + 1) % SOUNDBUFFERS;
	}

	QS_Avail = TRUE;
	SndDoCommand(qs->hdl, &qs->cmd[0], TRUE);
	SndDoCommand(qs->hdl, &qs->cbcmd[0], TRUE);
	return(SUCCESS);

sbinit_err:
	return(FAILURE);
}