diff options
Diffstat (limited to 'utils/winmm_drv/cpl')
-rw-r--r-- | utils/winmm_drv/cpl/adlconfig.rc | 60 | ||||
-rw-r--r-- | utils/winmm_drv/cpl/config_dialog.c | 84 | ||||
-rw-r--r-- | utils/winmm_drv/cpl/resource.h | 6 |
3 files changed, 123 insertions, 27 deletions
diff --git a/utils/winmm_drv/cpl/adlconfig.rc b/utils/winmm_drv/cpl/adlconfig.rc index 455c906..edc5048 100644 --- a/utils/winmm_drv/cpl/adlconfig.rc +++ b/utils/winmm_drv/cpl/adlconfig.rc @@ -14,37 +14,43 @@ // Dialog resources // LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_CONFIG_BOX DIALOGEX 0, 0, 251, 244 +IDD_CONFIG_BOX DIALOGEX 0, 0, 247, 307 STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU CAPTION "libADLMIDI settings" FONT 8, "MS Shell Dlg", 400, 0, 1 BEGIN - GROUPBOX "Instruments bank", IDC_INS_BANK, 9, 4, 233, 51, 0, WS_EX_LEFT - AUTORADIOBUTTON "Internal bank", IDC_BANK_INTERNAL, 15, 17, 63, 8, WS_GROUP | WS_TABSTOP, WS_EX_LEFT - COMBOBOX IDC_BANK_ID, 83, 14, 155, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT - AUTORADIOBUTTON "External bank", IDC_BANK_EXTERNAL, 15, 33, 63, 8, WS_TABSTOP, WS_EX_LEFT - EDITTEXT IDC_BANK_PATH, 83, 31, 107, 14, WS_DISABLED | ES_AUTOHSCROLL, WS_EX_LEFT - PUSHBUTTON "Browse...", IDC_BROWSE_BANK, 194, 30, 45, 14, 0, WS_EX_LEFT - LTEXT "Chip emulator type:", IDC_CHIPEMU_LABEL, 11, 60, 67, 10, SS_LEFT, WS_EX_LEFT - COMBOBOX IDC_EMULATOR, 83, 58, 159, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT - LTEXT "Number of chips", IDC_CHIPNUM_LABEL, 11, 78, 67, 8, SS_LEFT, WS_EX_LEFT - COMBOBOX IDC_NUM_CHIPS, 83, 76, 34, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT - LTEXT "Number of 4OP voices", IDC_4OPSNUM_LABEL, 128, 78, 72, 8, SS_LEFT, WS_EX_LEFT - COMBOBOX IDC_NUM_4OPVO, 202, 76, 40, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT - LTEXT "Volume model:", IDC_VM_LABEL, 11, 95, 67, 13, SS_LEFT, WS_EX_LEFT - COMBOBOX IDC_VOLUMEMODEL, 83, 95, 159, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT - AUTOCHECKBOX "Full-panning stereo", IDC_FLAG_SOFTPAN, 11, 115, 227, 10, 0, WS_EX_LEFT - AUTO3STATE "Deep tremolo (Auto/Enable/Disable)", IDC_FLAG_TREMOLO, 11, 130, 227, 10, NOT WS_TABSTOP, WS_EX_LEFT - AUTO3STATE "Deep vibrato (Auto/Enable/Disable)", IDC_FLAG_VIBRATO, 11, 145, 227, 10, NOT WS_TABSTOP, WS_EX_LEFT - AUTOCHECKBOX "Scalable modulation", IDC_FLAG_SCALE, 11, 160, 227, 10, 0, WS_EX_LEFT - AUTOCHECKBOX "Full-range brightness (CC74)", IDC_FLAG_FULLBRIGHT, 11, 175, 227, 10, 0, WS_EX_LEFT - PUSHBUTTON "Reset synth now", IDC_RESET_SYNTH, 73, 195, 80, 14, 0, WS_EX_LEFT - PUSHBUTTON "Restore defaults", IDC_RESTORE_DEFAULTS, 155, 195, 88, 14, 0, WS_EX_LEFT - PUSHBUTTON "About...", IDC_ABOUT, 10, 212, 50, 14, 0, WS_EX_LEFT - DEFPUSHBUTTON "OK", IDOK, 88, 212, 50, 14, 0, WS_EX_LEFT - PUSHBUTTON "Cancel", IDCANCEL, 141, 212, 50, 14, 0, WS_EX_LEFT - PUSHBUTTON "Apply", IDC_APPLYBUTTON, 194, 212, 50, 14, 0, WS_EX_LEFT - RTEXT "Settings will be applied immediately", IDC_BOTTOMNOTE_LABEL, 7, 227, 235, 8, SS_RIGHT, WS_EX_LEFT + COMBOBOX IDC_AUDIOOUT, 81, 7, 160, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT + CONTROL "", IDC_GAIN, TRACKBAR_CLASS, WS_TABSTOP | TBS_AUTOTICKS | TBS_BOTH, 84, 21, 155, 20, WS_EX_LEFT + AUTORADIOBUTTON "Internal bank", IDC_BANK_INTERNAL, 13, 61, 63, 8, WS_GROUP | WS_TABSTOP, WS_EX_LEFT + COMBOBOX IDC_BANK_ID, 81, 58, 155, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT + AUTORADIOBUTTON "External bank", IDC_BANK_EXTERNAL, 13, 77, 63, 8, WS_TABSTOP, WS_EX_LEFT + EDITTEXT IDC_BANK_PATH, 81, 75, 107, 14, WS_DISABLED | ES_AUTOHSCROLL, WS_EX_LEFT + PUSHBUTTON "Browse...", IDC_BROWSE_BANK, 192, 74, 45, 14, 0, WS_EX_LEFT + COMBOBOX IDC_EMULATOR, 81, 103, 160, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT + COMBOBOX IDC_NUM_CHIPS, 81, 121, 34, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT + COMBOBOX IDC_NUM_4OPVO, 201, 121, 40, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT + COMBOBOX IDC_VOLUMEMODEL, 81, 140, 160, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, WS_EX_LEFT + COMBOBOX IDC_CHANALLOC, 81, 159, 160, 200, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS, WS_EX_LEFT + AUTOCHECKBOX "Full-panning stereo", IDC_FLAG_SOFTPAN, 8, 180, 227, 10, 0, WS_EX_LEFT + AUTO3STATE "Deep tremolo (Auto/Enable/Disable)", IDC_FLAG_TREMOLO, 8, 195, 227, 10, 0, WS_EX_LEFT + AUTO3STATE "Deep vibrato (Auto/Enable/Disable)", IDC_FLAG_VIBRATO, 8, 210, 227, 10, 0, WS_EX_LEFT + AUTOCHECKBOX "Scalable modulation", IDC_FLAG_SCALE, 8, 225, 227, 10, 0, WS_EX_LEFT + AUTOCHECKBOX "Full-range brightness (CC74)", IDC_FLAG_FULLBRIGHT, 8, 240, 227, 10, 0, WS_EX_LEFT + PUSHBUTTON "About...", IDC_ABOUT, 6, 260, 50, 14, 0, WS_EX_LEFT + PUSHBUTTON "Reset synth now", IDC_RESET_SYNTH, 71, 260, 80, 14, 0, WS_EX_LEFT + PUSHBUTTON "Restore defaults", IDC_RESTORE_DEFAULTS, 153, 260, 88, 14, 0, WS_EX_LEFT + DEFPUSHBUTTON "OK", IDOK, 85, 277, 50, 14, 0, WS_EX_LEFT + PUSHBUTTON "Cancel", IDCANCEL, 138, 277, 50, 14, 0, WS_EX_LEFT + PUSHBUTTON "Apply", IDC_APPLYBUTTON, 191, 277, 50, 14, 0, WS_EX_LEFT + GROUPBOX "Instruments bank", IDC_INS_BANK, 7, 48, 233, 51, 0, WS_EX_LEFT + LTEXT "Chip emulator type:", IDC_CHIPEMU_LABEL, 9, 105, 67, 10, SS_LEFT, WS_EX_LEFT + LTEXT "Number of chips", IDC_CHIPNUM_LABEL, 9, 123, 67, 8, SS_LEFT, WS_EX_LEFT + LTEXT "Number of 4OP voices", IDC_4OPSNUM_LABEL, 126, 123, 72, 8, SS_LEFT, WS_EX_LEFT + LTEXT "Volume model:", IDC_VM_LABEL, 9, 142, 67, 8, SS_LEFT, WS_EX_LEFT + RTEXT "Settings will be applied immediately", IDC_BOTTOMNOTE_LABEL, 4, 292, 235, 8, SS_RIGHT, WS_EX_LEFT + LTEXT "Channels allocation:", IDC_CA_LABEL, 9, 161, 64, 8, SS_LEFT, WS_EX_LEFT + LTEXT "Audio output:", IDC_AUDIOOUT_LABEL, 11, 9, 65, 8, SS_LEFT, WS_EX_LEFT + LTEXT "Output gain:", IDC_GAIN_LABEL, 11, 29, 65, 8, SS_LEFT, WS_EX_LEFT END diff --git a/utils/winmm_drv/cpl/config_dialog.c b/utils/winmm_drv/cpl/config_dialog.c index 195524d..1742ab1 100644 --- a/utils/winmm_drv/cpl/config_dialog.c +++ b/utils/winmm_drv/cpl/config_dialog.c @@ -1,5 +1,6 @@ #define WIN32_LEAN_AND_MEAN #include <windows.h> +#include <mmsystem.h> #include <commctrl.h> #include <commdlg.h> #include <string.h> @@ -38,6 +39,15 @@ static const char *const volume_models_descriptions[] = NULL }; +static const char *const channel_allocation_descriptions[] = +{ + "Auto (defined by bank)", + "Sounding off delay based", + "Same instrument", + "Any first released", + NULL +}; + static const char * const emulator_type_descriptions[] = { "Nuked OPL3 1.8", @@ -50,6 +60,7 @@ static const char * const emulator_type_descriptions[] = static DriverSettings g_setup; static HINSTANCE s_hModule; +static UINT s_audioOutPrev = WAVE_MAPPER; static void syncBankType(HWND hwnd, int type); static void sync4ops(HWND hwnd); @@ -88,6 +99,11 @@ static void syncWidget(HWND hwnd) else SendDlgItemMessage(hwnd, IDC_BANK_INTERNAL, BM_SETCHECK, 1, 0); + SendDlgItemMessage(hwnd, IDC_GAIN, TBM_SETRANGE, TRUE, MAKELPARAM(0, 1000)); + SendDlgItemMessage(hwnd, IDC_GAIN, TBM_SETPAGESIZE, 0, 10); + SendDlgItemMessage(hwnd, IDC_GAIN, TBM_SETTICFREQ, 100, 0); + SendDlgItemMessage(hwnd, IDC_GAIN, TBM_SETPOS, TRUE, g_setup.gain100); + syncBankType(hwnd, g_setup.useExternalBank); SendDlgItemMessage(hwnd, IDC_FLAG_TREMOLO, BM_SETCHECK, g_setup.flagDeepTremolo, 0); @@ -109,6 +125,12 @@ static void syncWidget(HWND hwnd) updateBankName(hwnd, g_setup.bankPath); SendDlgItemMessageA(hwnd, IDC_EMULATOR, CB_SETCURSEL, (WPARAM)g_setup.emulatorId, (LPARAM)0); SendDlgItemMessageA(hwnd, IDC_VOLUMEMODEL, CB_SETCURSEL, (WPARAM)g_setup.volumeModel, (LPARAM)0); + SendDlgItemMessageA(hwnd, IDC_CHANALLOC, CB_SETCURSEL, (WPARAM)g_setup.chanAlloc + 1, (LPARAM)0); + + if(g_setup.outputDevice == WAVE_MAPPER) + SendDlgItemMessageA(hwnd, IDC_AUDIOOUT, CB_SETCURSEL, (WPARAM)0, (LPARAM)0); + else + SendDlgItemMessageA(hwnd, IDC_AUDIOOUT, CB_SETCURSEL, (WPARAM)g_setup.outputDevice + 1, (LPARAM)0); sync4ops(hwnd); } @@ -116,6 +138,8 @@ static void syncWidget(HWND hwnd) static void buildLists(HWND hwnd) { int i, bMax; + UINT ai, aMax; + WAVEOUTCAPSW wavDev; HMODULE lib; const char *const* list; BankNamesCount adl_getBanksCount; @@ -152,11 +176,27 @@ static void buildLists(HWND hwnd) SendDlgItemMessageA(hwnd, IDC_VOLUMEMODEL, CB_ADDSTRING, (LPARAM)0, (LPARAM)volume_models_descriptions[i]); } + // Channel allocation mode + for(i = 0; channel_allocation_descriptions[i] != NULL; ++i) + { + SendDlgItemMessageA(hwnd, IDC_CHANALLOC, CB_ADDSTRING, (LPARAM)0, (LPARAM)channel_allocation_descriptions[i]); + } + // Emulators list for(i = 0; emulator_type_descriptions[i] != NULL; ++i) { SendDlgItemMessageA(hwnd, IDC_EMULATOR, CB_ADDSTRING, (LPARAM)0, (LPARAM)emulator_type_descriptions[i]); } + + // Audio devices + aMax = waveOutGetNumDevs(); + SendDlgItemMessageW(hwnd, IDC_AUDIOOUT, CB_ADDSTRING, (LPARAM)0, (WPARAM)L"[Default device]"); + for(ai = 0; ai < aMax; ++ai) + { + memset(&wavDev, 0, sizeof(wavDev)); + waveOutGetDevCapsW(ai, &wavDev, sizeof(wavDev)); + SendDlgItemMessageW(hwnd, IDC_AUDIOOUT, CB_ADDSTRING, (LPARAM)0, (WPARAM)wavDev.szPname); + } } static void syncBankType(HWND hwnd, int type) @@ -209,6 +249,18 @@ static void openCustomBank(HWND hwnd) } } +static void warnIfOutChanged(HWND hwnd) +{ + if(s_audioOutPrev != g_setup.outputDevice) + { + s_audioOutPrev = g_setup.outputDevice; + MessageBoxW(hwnd, + L"To apply the change of the audio output device, you should reload your applications.", + L"Audio output device changed", + MB_OK|MB_ICONINFORMATION); + } +} + INT_PTR CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) @@ -218,6 +270,16 @@ INT_PTR CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPar syncWidget(hwnd); return TRUE; + case WM_HSCROLL: + if(lParam == (LPARAM)GetDlgItem(hwnd, IDC_GAIN)) + { + g_setup.gain100 = SendMessageW((HWND)lParam, (UINT)TBM_GETPOS, (WPARAM)0, (LPARAM)0); + saveGain(&g_setup); + sendSignal(DRV_SIGNAL_UPDATE_GAIN); + break; + } + break; + case WM_COMMAND: switch(LOWORD(wParam)) { @@ -230,6 +292,17 @@ INT_PTR CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPar MB_OK); break; + case IDC_AUDIOOUT: + if(HIWORD(wParam) == CBN_SELCHANGE) + { + g_setup.outputDevice = SendMessageW((HWND)lParam, (UINT)CB_GETCURSEL, (WPARAM)0, (LPARAM)0); + if(g_setup.outputDevice == 0) + g_setup.outputDevice = WAVE_MAPPER; + else + g_setup.outputDevice--; + } + break; + case IDC_NUM_CHIPS: if(HIWORD(wParam) == CBN_SELCHANGE) { @@ -260,6 +333,13 @@ INT_PTR CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPar } break; + case IDC_CHANALLOC: + if(HIWORD(wParam) == CBN_SELCHANGE) + { + g_setup.chanAlloc = SendMessageW((HWND)lParam, (UINT)CB_GETCURSEL, (WPARAM)0, (LPARAM)0) - 1; + } + break; + case IDC_BANK_INTERNAL: g_setup.useExternalBank = 0; syncBankType(hwnd, FALSE); @@ -329,11 +409,13 @@ INT_PTR CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPar case IDC_APPLYBUTTON: saveSetup(&g_setup); sendSignal(DRV_SIGNAL_RELOAD_SETUP); + warnIfOutChanged(hwnd); break; case IDOK: saveSetup(&g_setup); sendSignal(DRV_SIGNAL_RELOAD_SETUP); + warnIfOutChanged(hwnd); EndDialog(hwnd, IDOK); break; @@ -358,6 +440,8 @@ BOOL runAdlSetupBox(HINSTANCE hModule, HWND hwnd) s_hModule = hModule; loadSetup(&g_setup); + // Keep the last audio output setup for the future + s_audioOutPrev = g_setup.outputDevice; DialogBoxW(hModule, MAKEINTRESOURCEW(IDD_CONFIG_BOX), hwnd, ToolDlgProc); diff --git a/utils/winmm_drv/cpl/resource.h b/utils/winmm_drv/cpl/resource.h index 4d41e9f..78461c5 100644 --- a/utils/winmm_drv/cpl/resource.h +++ b/utils/winmm_drv/cpl/resource.h @@ -28,5 +28,11 @@ #define IDC_4OPSNUM_LABEL 1025 #define IDC_RESET_SYNTH 1026 #define IDC_BOTTOMNOTE_LABEL 1027 +#define IDC_CHANALLOC 1028 +#define IDC_CA_LABEL 1029 +#define IDC_AUDIOOUT 1030 +#define IDC_AUDIOOUT_LABEL 1031 +#define IDC_GAIN 1032 +#define IDC_GAIN_LABEL 1033 #define IDC_DRIVERNAME 40000 #define IDC_DRIVERDESC 40001 |