|
|
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.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.9 root 45: { SGTEXT, 0,0, 4, 2, 13,1, "SOUND" },
1.1.1.11! root 46: { SGCHECKBOX, 0,0, 13, 2, 14,1, "Enabled" },
! 47: { SGCHECKBOX, 0,0, 25, 2, 14,1, "Synchronize" },
1.1.1.9 root 48:
49: { SGTEXT, 0,0, 4, 4, 14,1, "Playback quality:" },
50: { SGRADIOBUT, 0,0, 2, 6, 10,1, "11025 Hz" },
51: { SGRADIOBUT, 0,0, 2, 7, 10,1, "12517 Hz" },
52: { SGRADIOBUT, 0,0, 2, 8, 10,1, "16000 Hz" },
1.1.1.10 root 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, "48000 Hz" },
58: { SGRADIOBUT, 0,0, 28, 8, 10,1, "50066 Hz" },
59:
60: { SGTEXT, 0,0, 4,10, 10,1, "YM voices mixing:" },
61: { SGRADIOBUT, 0,0, 2,12, 10,1, "Math model" },
62: { SGRADIOBUT, 0,0, 15,12, 10,1, "ST table" },
63: { SGRADIOBUT, 0,0, 28,12, 10,1, "Linear" },
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 },
69: { SGBUTTON, 0,0, 28,17, 8,1, " Browse " },
70: { SGBUTTON, 0,0, 12,20, 16,1, NULL },
71: { SGBUTTON, SG_DEFAULT, 0, 10,23, 20,1, "Back to main menu" },
1.1.1.4 root 72: { -1, 0, 0, 0,0, 0,0, NULL }
1.1 root 73: };
74:
75:
1.1.1.7 root 76: static const int nSoundFreqs[] =
77: {
78: 11025,
79: 12517,
80: 16000,
81: 22050,
82: 25033,
83: 32000,
84: 44100,
85: 48000,
86: 50066
87: };
88:
89:
1.1 root 90: /*-----------------------------------------------------------------------*/
1.1.1.8 root 91: /**
92: * Show and process the sound dialog.
93: */
1.1 root 94: void Dialog_SoundDlg(void)
95: {
1.1.1.7 root 96: int but, i;
1.1 root 97:
1.1.1.4 root 98: SDLGui_CenterDlg(sounddlg);
1.1 root 99:
1.1.1.4 root 100: /* Set up dialog from actual values: */
101:
1.1.1.5 root 102: if (ConfigureParams.Sound.bEnableSound)
1.1.1.4 root 103: sounddlg[DLGSOUND_ENABLE].state |= SG_SELECTED;
104: else
105: sounddlg[DLGSOUND_ENABLE].state &= ~SG_SELECTED;
106:
1.1.1.11! root 107: if (ConfigureParams.Sound.bEnableSoundSync)
! 108: sounddlg[DLGSOUND_SYNC].state |= SG_SELECTED;
! 109: else
! 110: sounddlg[DLGSOUND_SYNC].state &= ~SG_SELECTED;
! 111:
1.1.1.7 root 112: for (i = DLGSOUND_11KHZ; i <= DLGSOUND_50KHZ; i++)
113: sounddlg[i].state &= ~SG_SELECTED;
114:
1.1.1.8 root 115: for (i = 0; i <= DLGSOUND_50KHZ-DLGSOUND_11KHZ; i++)
1.1.1.7 root 116: {
117: if (ConfigureParams.Sound.nPlaybackFreq > nSoundFreqs[i]-500
118: && ConfigureParams.Sound.nPlaybackFreq < nSoundFreqs[i]+500)
119: {
120: sounddlg[DLGSOUND_11KHZ + i].state |= SG_SELECTED;
121: break;
122: }
123: }
1.1.1.4 root 124:
1.1.1.10 root 125: sounddlg[DLGSOUND_MODEL].state &= ~SG_SELECTED;
1.1.1.9 root 126: sounddlg[DLGSOUND_TABLE].state &= ~SG_SELECTED;
127: sounddlg[DLGSOUND_LINEAR].state &= ~SG_SELECTED;
1.1.1.10 root 128: if (ConfigureParams.Sound.YmVolumeMixing == YM_MODEL_MIXING)
129: sounddlg[DLGSOUND_MODEL].state |= SG_SELECTED;
130: else
1.1.1.9 root 131: if (ConfigureParams.Sound.YmVolumeMixing == YM_TABLE_MIXING)
132: sounddlg[DLGSOUND_TABLE].state |= SG_SELECTED;
133: else
134: sounddlg[DLGSOUND_LINEAR].state |= SG_SELECTED;
135:
1.1.1.5 root 136: File_ShrinkName(dlgRecordName, ConfigureParams.Sound.szYMCaptureFileName, sounddlg[DLGSOUND_RECNAME].w);
1.1.1.4 root 137:
138: if ( Sound_AreWeRecording() )
139: sounddlg[DLGSOUND_RECORD].txt = "Stop recording";
140: else
141: sounddlg[DLGSOUND_RECORD].txt = "Record sound";
142:
143: /* The sound dialog main loop */
144: do
145: {
146: but = SDLGui_DoDialog(sounddlg, NULL);
147: switch (but)
148: {
149: case DLGSOUND_RECBROWSE: /* Choose a new record file */
150: SDLGui_FileConfSelect(dlgRecordName,
1.1.1.5 root 151: ConfigureParams.Sound.szYMCaptureFileName,
1.1.1.4 root 152: sounddlg[DLGSOUND_RECNAME].w,
1.1.1.7 root 153: true);
1.1.1.4 root 154: break;
155: case DLGSOUND_RECORD:
156: if (Sound_AreWeRecording())
157: {
158: sounddlg[DLGSOUND_RECORD].txt = "Record sound";
159: Sound_EndRecording();
160: }
161: else
162: {
163: /* make sure that we have a valid file name... */
1.1.1.5 root 164: if (strlen(ConfigureParams.Sound.szYMCaptureFileName) < 4)
1.1.1.4 root 165: {
1.1.1.5 root 166: strcpy(ConfigureParams.Sound.szYMCaptureFileName, "./hatari.wav");
1.1.1.4 root 167: }
168: sounddlg[DLGSOUND_RECORD].txt = "Stop recording";
1.1.1.5 root 169: Sound_BeginRecording(ConfigureParams.Sound.szYMCaptureFileName);
1.1.1.4 root 170: }
171: break;
172: }
173: }
174: while (but != DLGSOUND_EXIT && but != SDLGUI_QUIT
175: && but != SDLGUI_ERROR && !bQuitProgram );
176:
177: /* Read values from dialog */
1.1.1.5 root 178: ConfigureParams.Sound.bEnableSound = (sounddlg[DLGSOUND_ENABLE].state & SG_SELECTED);
1.1.1.7 root 179:
1.1.1.11! root 180: ConfigureParams.Sound.bEnableSoundSync = (sounddlg[DLGSOUND_SYNC].state & SG_SELECTED);
! 181:
1.1.1.7 root 182: for (i = DLGSOUND_11KHZ; i <= DLGSOUND_50KHZ; i++)
183: {
184: if (sounddlg[i].state & SG_SELECTED)
185: {
186: ConfigureParams.Sound.nPlaybackFreq = nSoundFreqs[i-DLGSOUND_11KHZ];
187: break;
188: }
189: }
1.1.1.9 root 190:
1.1.1.10 root 191: if (sounddlg[DLGSOUND_MODEL].state & SG_SELECTED)
192: ConfigureParams.Sound.YmVolumeMixing = YM_MODEL_MIXING;
193: else
1.1.1.9 root 194: if (sounddlg[DLGSOUND_TABLE].state & SG_SELECTED)
195: ConfigureParams.Sound.YmVolumeMixing = YM_TABLE_MIXING;
196: else
197: ConfigureParams.Sound.YmVolumeMixing = YM_LINEAR_MIXING;
1.1 root 198: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.