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; }
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); }