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