void MFSound_UpdateInternal() { const int NumSamples = 4096; float buffer[NumSamples]; size_t numCaptureDevices = MFDevice_GetNumDevices(MFDT_AudioCapture); for(size_t i=0; i<numCaptureDevices; ++i) { MFDevice *pDevice = MFDevice_GetDeviceByIndex(MFDT_AudioCapture, i); AudioDevice &device = *(AudioDevice*)pDevice->pInternal; if(device.pDevice && device.bActive) { // get samples, and feed to callback ALint numSamples; alcGetIntegerv(device.pDevice, ALC_CAPTURE_SAMPLES, (ALCsizei)sizeof(ALint), &numSamples); MFDebug_Assert(false, "TODO: check if numSamples is in samples or bytes..."); while(numSamples > 0) { ALint samples = MFMin(1024, numSamples); alcCaptureSamples(device.pDevice, (ALCvoid *)buffer, samples); numSamples -= samples; // feed samples to the callback device.pSampleCallback((float*)buffer, samples, 1, device.pUserData); } } } }
void MFMidi_UpdateInternal() { // copy notes into lastNotes size_t numInputDevices = MFDevice_GetNumDevices(MFDT_MidiInput); for (int i = 0; i < numInputDevices; ++i) { MFDevice *pDevice = MFDevice_GetDeviceByIndex(MFDT_MidiInput, i); if (pDevice->state == MFDevState_Active) { MFMidiPC_MidiInputDevice *pMidi = (MFMidiPC_MidiInputDevice*)pDevice->pInternal; for (int j = 0; j < 16; ++j) MFCopyMemory(pMidi->channels[j].lastNotes, pMidi->channels[j].notes, sizeof(pMidi->channels[j].lastNotes)); } } }