unsigned int sampleIndex;
float *outBuffer;
float scale;
-
+
offset = (s_chunkCount * submissionChunk) % maxMixedSamples;
samples = s_mixedSamples + offset;
-
+
outBuffer = (float *)outOutputData->mBuffers[0].mData;
-
+
// If we have run out of samples, return silence
if (s_chunkCount * submissionChunk > shm->format.channels * paintedtime)
{
s_chunkCount++; // this is the next buffer we will submit
}
-
+
return 0;
}
Con_Printf("AudioHardwareGetProperty returned %d\n", status);
return false;
}
-
+
if (outputDeviceID == kAudioDeviceUnknown)
{
Con_Printf("AudioHardwareGetProperty: outputDeviceID is kAudioDeviceUnknown\n");
return false;
}
- // Configure the output device
+ // Configure the output device
// TODO: support "-sndspeed", "-sndmono" and "-sndstereo"
propertySize = sizeof(bufferByteCount);
bufferByteCount = CHUNK_SIZE * sizeof(float);
Con_Printf("AudioDeviceSetProperty: returned %d when setting kAudioDevicePropertyBufferSize to %d\n", status, CHUNK_SIZE);
return false;
}
-
+
propertySize = sizeof(bufferByteCount);
status = AudioDeviceGetProperty(outputDeviceID, 0, false, kAudioDevicePropertyBufferSize, &propertySize, &bufferByteCount);
if (status)
return false;
}
Con_DPrintf(" Hardware format:\n");
- Con_DPrintf(" %5d mSampleRate\n", (unsigned int)outputStreamBasicDescription.mSampleRate);
- Con_DPrintf(" %c%c%c%c mFormatID\n",
+ Con_DPrintf(" %5d mSampleRate\n", (unsigned int)outputStreamBasicDescription.mSampleRate);
+ Con_DPrintf(" %c%c%c%c mFormatID\n",
(outputStreamBasicDescription.mFormatID & 0xff000000) >> 24,
(outputStreamBasicDescription.mFormatID & 0x00ff0000) >> 16,
(outputStreamBasicDescription.mFormatID & 0x0000ff00) >> 8,
(outputStreamBasicDescription.mFormatID & 0x000000ff) >> 0);
- Con_DPrintf(" %5d mBytesPerPacket\n", outputStreamBasicDescription.mBytesPerPacket);
- Con_DPrintf(" %5d mFramesPerPacket\n", outputStreamBasicDescription.mFramesPerPacket);
- Con_DPrintf(" %5d mBytesPerFrame\n", outputStreamBasicDescription.mBytesPerFrame);
- Con_DPrintf(" %5d mChannelsPerFrame\n", outputStreamBasicDescription.mChannelsPerFrame);
- Con_DPrintf(" %5d mBitsPerChannel\n", outputStreamBasicDescription.mBitsPerChannel);
+ Con_DPrintf(" %5d mBytesPerPacket\n", outputStreamBasicDescription.mBytesPerPacket);
+ Con_DPrintf(" %5d mFramesPerPacket\n", outputStreamBasicDescription.mFramesPerPacket);
+ Con_DPrintf(" %5d mBytesPerFrame\n", outputStreamBasicDescription.mBytesPerFrame);
+ Con_DPrintf(" %5d mChannelsPerFrame\n", outputStreamBasicDescription.mChannelsPerFrame);
+ Con_DPrintf(" %5d mBitsPerChannel\n", outputStreamBasicDescription.mBitsPerChannel);
if(outputStreamBasicDescription.mFormatID != kAudioFormatLinearPCM)
{
Con_Printf("Default Audio Device doesn't support Linear PCM!\n");
return false;
}
-
+
// Start sound running
status = AudioDeviceAddIOProc(outputDeviceID, audioDeviceIOProc, NULL);
if (status)
}
maxMixedSamples = BUFFER_SIZE;
- s_mixedSamples = Mem_Alloc (snd_mempool, sizeof(*s_mixedSamples) * maxMixedSamples);
+ s_mixedSamples = (short *)Mem_Alloc (snd_mempool, sizeof(*s_mixedSamples) * maxMixedSamples);
Con_DPrintf(" Buffer size = %d samples (%d chunks)\n",
maxMixedSamples, (maxMixedSamples / submissionChunk));
shm->format.speed = outputStreamBasicDescription.mSampleRate;
shm->format.channels = outputStreamBasicDescription.mChannelsPerFrame;
shm->format.width = 2;
+ shm->sampleframes = maxMixedSamples / shm->format.channels;
shm->samples = maxMixedSamples;
- shm->buffer = (qbyte *)s_mixedSamples;
+ shm->buffer = (unsigned char *)s_mixedSamples;
shm->samplepos = 0;
// We haven't enqueued anything yet
s_isRunning = true;
Con_Printf(" Initialization successful\n");
-
+
return true;
}
void SNDDMA_Shutdown(void)
{
OSStatus status;
-
+
if (!s_isRunning)
return;
-
+
status = AudioDeviceStop(outputDeviceID, audioDeviceIOProc);
if (status)
{
Con_Printf("AudioDeviceStop: returned %d\n", status);
return;
}
-
+
s_isRunning = false;
-
+
status = AudioDeviceRemoveIOProc(outputDeviceID, audioDeviceIOProc);
if (status)
{
Con_Printf("AudioDeviceRemoveIOProc: returned %d\n", status);
return;
}
-
+
Mem_Free(s_mixedSamples);
s_mixedSamples = NULL;
- shm->samples = NULL;
+ shm->buffer = NULL;
}
/*