|
|
1.1 root 1: /*
2: Hatari - dlgSound.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6: */
1.1.1.7 root 7: const char DlgSound_fileid[] = "Hatari dlgSound.c : " __DATE__ " " __TIME__;
1.1 root 8:
9: #include "main.h"
10: #include "configuration.h"
11: #include "dialog.h"
12: #include "sdlgui.h"
13: #include "file.h"
14: #include "sound.h"
15:
16:
17: #define DLGSOUND_ENABLE 3
1.1.1.7 root 18: #define DLGSOUND_11KHZ 5
19: #define DLGSOUND_12KHZ 6
20: #define DLGSOUND_16KHZ 7
21: #define DLGSOUND_22KHZ 8
22: #define DLGSOUND_25KHZ 9
23: #define DLGSOUND_32KHZ 10
24: #define DLGSOUND_44KHZ 11
25: #define DLGSOUND_48KHZ 12
26: #define DLGSOUND_50KHZ 13
1.1.1.10! root 27: #define DLGSOUND_MODEL 15
! 28: #define DLGSOUND_TABLE 16
! 29: #define DLGSOUND_LINEAR 17
! 30: #define DLGSOUND_RECNAME 21
! 31: #define DLGSOUND_RECBROWSE 22
! 32: #define DLGSOUND_RECORD 23
! 33: #define DLGSOUND_EXIT 24
1.1 root 34:
35:
36: static char dlgRecordName[35];
37:
38:
39: /* The sound dialog: */
1.1.1.4 root 40: static SGOBJ sounddlg[] =
1.1 root 41: {
1.1.1.10! root 42: { SGBOX, 0,0, 0, 0, 40,25, NULL },
! 43: { SGBOX, 0,0, 1, 1, 38,13, NULL },
1.1.1.9 root 44: { SGTEXT, 0,0, 4, 2, 13,1, "SOUND" },
45: { SGCHECKBOX, 0,0, 14, 2, 14,1, "Enabled" },
46:
47: { SGTEXT, 0,0, 4, 4, 14,1, "Playback quality:" },
48: { SGRADIOBUT, 0,0, 2, 6, 10,1, "11025 Hz" },
49: { SGRADIOBUT, 0,0, 2, 7, 10,1, "12517 Hz" },
50: { SGRADIOBUT, 0,0, 2, 8, 10,1, "16000 Hz" },
1.1.1.10! root 51: { SGRADIOBUT, 0,0, 15, 6, 10,1, "22050 Hz" },
! 52: { SGRADIOBUT, 0,0, 15, 7, 10,1, "25033 Hz" },
! 53: { SGRADIOBUT, 0,0, 15, 8, 10,1, "32000 Hz" },
! 54: { SGRADIOBUT, 0,0, 28, 6, 10,1, "44100 Hz" },
! 55: { SGRADIOBUT, 0,0, 28, 7, 10,1, "48000 Hz" },
! 56: { SGRADIOBUT, 0,0, 28, 8, 10,1, "50066 Hz" },
! 57:
! 58: { SGTEXT, 0,0, 4,10, 10,1, "YM voices mixing:" },
! 59: { SGRADIOBUT, 0,0, 2,12, 10,1, "Math model" },
! 60: { SGRADIOBUT, 0,0, 15,12, 10,1, "ST table" },
! 61: { SGRADIOBUT, 0,0, 28,12, 10,1, "Linear" },
! 62:
! 63: { SGBOX, 0,0, 1,15, 38,7, NULL },
! 64: { SGTEXT, 0,0, 13,16, 14,1, "Capture YM/WAV" },
! 65: { SGTEXT, 0,0, 2,17, 26,1, "File name (*.wav / *.ym):" },
! 66: { SGTEXT, 0,0, 2,18, 34,1, dlgRecordName },
! 67: { SGBUTTON, 0,0, 28,17, 8,1, " Browse " },
! 68: { SGBUTTON, 0,0, 12,20, 16,1, NULL },
! 69: { SGBUTTON, SG_DEFAULT, 0, 10,23, 20,1, "Back to main menu" },
1.1.1.4 root 70: { -1, 0, 0, 0,0, 0,0, NULL }
1.1 root 71: };
72:
73:
1.1.1.7 root 74: static const int nSoundFreqs[] =
75: {
76: 11025,
77: 12517,
78: 16000,
79: 22050,
80: 25033,
81: 32000,
82: 44100,
83: 48000,
84: 50066
85: };
86:
87:
1.1 root 88: /*-----------------------------------------------------------------------*/
1.1.1.8 root 89: /**
90: * Show and process the sound dialog.
91: */
1.1 root 92: void Dialog_SoundDlg(void)
93: {
1.1.1.7 root 94: int but, i;
1.1 root 95:
1.1.1.4 root 96: SDLGui_CenterDlg(sounddlg);
1.1 root 97:
1.1.1.4 root 98: /* Set up dialog from actual values: */
99:
1.1.1.5 root 100: if (ConfigureParams.Sound.bEnableSound)
1.1.1.4 root 101: sounddlg[DLGSOUND_ENABLE].state |= SG_SELECTED;
102: else
103: sounddlg[DLGSOUND_ENABLE].state &= ~SG_SELECTED;
104:
1.1.1.7 root 105: for (i = DLGSOUND_11KHZ; i <= DLGSOUND_50KHZ; i++)
106: sounddlg[i].state &= ~SG_SELECTED;
107:
1.1.1.8 root 108: for (i = 0; i <= DLGSOUND_50KHZ-DLGSOUND_11KHZ; i++)
1.1.1.7 root 109: {
110: if (ConfigureParams.Sound.nPlaybackFreq > nSoundFreqs[i]-500
111: && ConfigureParams.Sound.nPlaybackFreq < nSoundFreqs[i]+500)
112: {
113: sounddlg[DLGSOUND_11KHZ + i].state |= SG_SELECTED;
114: break;
115: }
116: }
1.1.1.4 root 117:
1.1.1.10! root 118: sounddlg[DLGSOUND_MODEL].state &= ~SG_SELECTED;
1.1.1.9 root 119: sounddlg[DLGSOUND_TABLE].state &= ~SG_SELECTED;
120: sounddlg[DLGSOUND_LINEAR].state &= ~SG_SELECTED;
1.1.1.10! root 121: if (ConfigureParams.Sound.YmVolumeMixing == YM_MODEL_MIXING)
! 122: sounddlg[DLGSOUND_MODEL].state |= SG_SELECTED;
! 123: else
1.1.1.9 root 124: if (ConfigureParams.Sound.YmVolumeMixing == YM_TABLE_MIXING)
125: sounddlg[DLGSOUND_TABLE].state |= SG_SELECTED;
126: else
127: sounddlg[DLGSOUND_LINEAR].state |= SG_SELECTED;
128:
1.1.1.5 root 129: File_ShrinkName(dlgRecordName, ConfigureParams.Sound.szYMCaptureFileName, sounddlg[DLGSOUND_RECNAME].w);
1.1.1.4 root 130:
131: if ( Sound_AreWeRecording() )
132: sounddlg[DLGSOUND_RECORD].txt = "Stop recording";
133: else
134: sounddlg[DLGSOUND_RECORD].txt = "Record sound";
135:
136: /* The sound dialog main loop */
137: do
138: {
139: but = SDLGui_DoDialog(sounddlg, NULL);
140: switch (but)
141: {
142: case DLGSOUND_RECBROWSE: /* Choose a new record file */
143: SDLGui_FileConfSelect(dlgRecordName,
1.1.1.5 root 144: ConfigureParams.Sound.szYMCaptureFileName,
1.1.1.4 root 145: sounddlg[DLGSOUND_RECNAME].w,
1.1.1.7 root 146: true);
1.1.1.4 root 147: break;
148: case DLGSOUND_RECORD:
149: if (Sound_AreWeRecording())
150: {
151: sounddlg[DLGSOUND_RECORD].txt = "Record sound";
152: Sound_EndRecording();
153: }
154: else
155: {
156: /* make sure that we have a valid file name... */
1.1.1.5 root 157: if (strlen(ConfigureParams.Sound.szYMCaptureFileName) < 4)
1.1.1.4 root 158: {
1.1.1.5 root 159: strcpy(ConfigureParams.Sound.szYMCaptureFileName, "./hatari.wav");
1.1.1.4 root 160: }
161: sounddlg[DLGSOUND_RECORD].txt = "Stop recording";
1.1.1.5 root 162: Sound_BeginRecording(ConfigureParams.Sound.szYMCaptureFileName);
1.1.1.4 root 163: }
164: break;
165: }
166: }
167: while (but != DLGSOUND_EXIT && but != SDLGUI_QUIT
168: && but != SDLGUI_ERROR && !bQuitProgram );
169:
170: /* Read values from dialog */
1.1.1.5 root 171: ConfigureParams.Sound.bEnableSound = (sounddlg[DLGSOUND_ENABLE].state & SG_SELECTED);
1.1.1.7 root 172:
173: for (i = DLGSOUND_11KHZ; i <= DLGSOUND_50KHZ; i++)
174: {
175: if (sounddlg[i].state & SG_SELECTED)
176: {
177: ConfigureParams.Sound.nPlaybackFreq = nSoundFreqs[i-DLGSOUND_11KHZ];
178: break;
179: }
180: }
1.1.1.9 root 181:
1.1.1.10! root 182: if (sounddlg[DLGSOUND_MODEL].state & SG_SELECTED)
! 183: ConfigureParams.Sound.YmVolumeMixing = YM_MODEL_MIXING;
! 184: else
1.1.1.9 root 185: if (sounddlg[DLGSOUND_TABLE].state & SG_SELECTED)
186: ConfigureParams.Sound.YmVolumeMixing = YM_TABLE_MIXING;
187: else
188: ConfigureParams.Sound.YmVolumeMixing = YM_LINEAR_MIXING;
1.1 root 189: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.