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