WDL_DLGRET PreferencesDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { int v = 0; switch(uMsg) { case WM_INITDIALOG: PopulatePreferencesDialog(hwndDlg); memcpy(gTempState, gState, sizeof(AppState)); // copy state to temp state return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: if(memcmp(gActiveState, gState, sizeof(AppState)) != 0) // if state is different try to change audio { TryToChangeAudio(); } EndDialog(hwndDlg, IDOK); // INI file will be changed see MainDialogProc break; case IDAPPLY: TryToChangeAudio(); break; case IDCANCEL: EndDialog(hwndDlg, IDCANCEL); // if state has been changed reset to previous state, INI file won't be changed if (!AudioSettingsInStateAreEqual(gState, gTempState) || !MIDISettingsInStateAreEqual(gState, gTempState)) { memcpy(gState, gTempState, sizeof(AppState)); TryToChangeAudioDriverType(); ProbeAudioIO(); TryToChangeAudio(); } break; case IDC_COMBO_AUDIO_DRIVER: if (HIWORD(wParam) == CBN_SELCHANGE) { v = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_DRIVER, CB_GETCURSEL, 0, 0); if(v != gState->mAudioDriverType) { gState->mAudioDriverType = v; TryToChangeAudioDriverType(); ProbeAudioIO(); if(gAudioInputDevs.size()) strcpy(gState->mAudioInDev,GetAudioDeviceName(gAudioInputDevs[0]).c_str()); if(gAudioOutputDevs.size()) strcpy(gState->mAudioOutDev,GetAudioDeviceName(gAudioOutputDevs[0]).c_str()); // Reset IO gState->mAudioOutChanL = 1; gState->mAudioOutChanR = 2; PopulateAudioDialogs(hwndDlg); } } break; case IDC_COMBO_AUDIO_IN_DEV: if (HIWORD(wParam) == CBN_SELCHANGE) { int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_DEV, CB_GETCURSEL, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioInDev); // Reset IO gState->mAudioInChanL = 1; gState->mAudioInChanR = 2; PopulateDriverSpecificControls(hwndDlg); } break; case IDC_COMBO_AUDIO_OUT_DEV: if (HIWORD(wParam) == CBN_SELCHANGE) { int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_DEV, CB_GETCURSEL, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioOutDev); // Reset IO gState->mAudioOutChanL = 1; gState->mAudioOutChanR = 2; PopulateDriverSpecificControls(hwndDlg); } break; case IDC_COMBO_AUDIO_IN_L: if (HIWORD(wParam) == CBN_SELCHANGE) { gState->mAudioInChanL = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_L, CB_GETCURSEL, 0, 0) + 1; //TEMP gState->mAudioInChanR = gState->mAudioInChanL + 1; SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_SETCURSEL, gState->mAudioInChanR - 1, 0); // } break; case IDC_COMBO_AUDIO_IN_R: if (HIWORD(wParam) == CBN_SELCHANGE) SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_IN_R,CB_SETCURSEL, gState->mAudioInChanR - 1, 0); // TEMP // gState->mAudioInChanR = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IN_R, CB_GETCURSEL, 0, 0); break; case IDC_COMBO_AUDIO_OUT_L: if (HIWORD(wParam) == CBN_SELCHANGE) { gState->mAudioOutChanL = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_L, CB_GETCURSEL, 0, 0) + 1; //TEMP gState->mAudioOutChanR = gState->mAudioOutChanL + 1; SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_SETCURSEL, gState->mAudioOutChanR - 1, 0); // } break; case IDC_COMBO_AUDIO_OUT_R: if (HIWORD(wParam) == CBN_SELCHANGE) SendDlgItemMessage(hwndDlg,IDC_COMBO_AUDIO_OUT_R,CB_SETCURSEL, gState->mAudioOutChanR - 1, 0); // TEMP // gState->mAudioOutChanR = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_OUT_R, CB_GETCURSEL, 0, 0); break; case IDC_CB_MONO_INPUT: if (SendDlgItemMessage(hwndDlg,IDC_CB_MONO_INPUT, BM_GETCHECK, 0, 0) == BST_CHECKED) gState->mAudioInIsMono = 1; else gState->mAudioInIsMono = 0; break; case IDC_COMBO_AUDIO_IOVS: // follow through case IDC_COMBO_AUDIO_SIGVS: //TODO: FIX if (HIWORD(wParam) == CBN_SELCHANGE) { int iovsidx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETCURSEL, 0, 0); int sigvsidx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_GETCURSEL, 0, 0); if (atoi(kIOVSOptions[iovsidx].c_str()) < atoi(kSIGVSOptions[sigvsidx].c_str())) // if iovs < sigvs { SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETLBTEXT, iovsidx, (LPARAM) gState->mAudioIOVS); strcpy(gState->mAudioSigVS, kSIGVSOptions[0].c_str()); // set sigvs to minimum SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_SETCURSEL, -1, 0); } else { SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_IOVS, CB_GETLBTEXT, iovsidx, (LPARAM) gState->mAudioIOVS); SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SIGVS, CB_GETLBTEXT, sigvsidx, (LPARAM) gState->mAudioSigVS); } } break; case IDC_COMBO_AUDIO_SR: if (HIWORD(wParam) == CBN_SELCHANGE) { int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SR, CB_GETCURSEL, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMBO_AUDIO_SR, CB_GETLBTEXT, idx, (LPARAM) gState->mAudioSR); } break; case IDC_BUTTON_ASIO: if (HIWORD(wParam) == BN_CLICKED) #ifdef OS_OSX system("open \"/Applications/Utilities/Audio MIDI Setup.app\""); #elif defined OS_WIN if( gState->mAudioDriverType == DAC_ASIO && gDAC->isStreamRunning()) // TODO: still not right ASIOControlPanel(); #endif break; case IDC_COMBO_MIDI_IN_DEV: if (HIWORD(wParam) == CBN_SELCHANGE) { int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_DEV, CB_GETCURSEL, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mMidiInDev); ChooseMidiInput( gState->mMidiInDev ); } break; case IDC_COMBO_MIDI_OUT_DEV: if (HIWORD(wParam) == CBN_SELCHANGE) { int idx = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_DEV, CB_GETCURSEL, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_DEV, CB_GETLBTEXT, idx, (LPARAM) gState->mMidiOutDev); ChooseMidiOutput( gState->mMidiOutDev ); } break; case IDC_COMBO_MIDI_IN_CHAN: if (HIWORD(wParam) == CBN_SELCHANGE) gState->mMidiInChan = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_IN_CHAN, CB_GETCURSEL, 0, 0); break; case IDC_COMBO_MIDI_OUT_CHAN: if (HIWORD(wParam) == CBN_SELCHANGE) gState->mMidiOutChan = (int) SendDlgItemMessage(hwndDlg, IDC_COMBO_MIDI_OUT_CHAN, CB_GETCURSEL, 0, 0); break; default: break; } break; default: return FALSE; } return TRUE; }
JNIEXPORT void JNICALL Java_com_synthbot_jasiohost_AsioDriver_ASIOControlPanel (JNIEnv *env, jclass clazz) { ASIOControlPanel(); }