|
|
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: char DlgSound_rcsid[] = "Hatari $Id: dlgSound.c,v 1.3 2003/12/25 14:19:39 thothy Exp $";
8:
9: #include "main.h"
10: #include "configuration.h"
11: #include "dialog.h"
12: #include "memAlloc.h"
13: #include "sdlgui.h"
14: #include "file.h"
15: #include "sound.h"
16:
17:
18: #define DLGSOUND_ENABLE 3
19: #define DLGSOUND_LOW 5
20: #define DLGSOUND_MEDIUM 6
21: #define DLGSOUND_HIGH 7
22: #define DLGSOUND_RECNAME 11
23: #define DLGSOUND_RECBROWSE 12
24: #define DLGSOUND_RECORD 13
25: #define DLGSOUND_EXIT 14
26:
27:
28: static char dlgRecordName[35];
29:
30:
31: /* The sound dialog: */
32: SGOBJ sounddlg[] =
33: {
34: { SGBOX, 0, 0, 0,0, 38,24, NULL },
35: { SGBOX, 0, 0, 1,1, 36,11, NULL },
36: { SGTEXT, 0, 0, 13,2, 13,1, "Sound options" },
37: { SGCHECKBOX, 0, 0, 12,4, 14,1, "Enable sound" },
38: { SGTEXT, 0, 0, 11,6, 14,1, "Playback quality:" },
39: { SGRADIOBUT, 0, 0, 12,8, 15,1, "Low (11kHz)" },
40: { SGRADIOBUT, 0, 0, 12,9, 19,1, "Medium (22kHz)" },
41: { SGRADIOBUT, 0, 0, 12,10, 14,1, "High (44kHz)" },
42: { SGBOX, 0, 0, 1,13, 36,8, NULL },
43: { SGTEXT, 0, 0, 13,14, 14,1, "Capture YM/WAV" },
44: { SGTEXT, 0, 0, 2,16, 26,1, "File name (*.wav or *.ym):" },
45: { SGTEXT, 0, 0, 2,17, 34,1, dlgRecordName },
46: { SGBUTTON, 0, 0, 30,16, 6,1, "Browse" },
47: { SGBUTTON, 0, 0, 12,19, 16,1, NULL },
48: { SGBUTTON, 0, 0, 10,22, 20,1, "Back to main menu" },
49: { -1, 0, 0, 0,0, 0,0, NULL }
50: };
51:
52:
53: /*-----------------------------------------------------------------------*/
54: /*
55: Show and process the sound dialog.
56: */
57: void Dialog_SoundDlg(void)
58: {
59: int but;
60: char *tmpname;
61:
62: /* Allocate memory for tmpname: */
63: tmpname = Memory_Alloc(FILENAME_MAX);
64:
65: SDLGui_CenterDlg(sounddlg);
66:
67: /* Set up dialog from actual values: */
68:
69: if( DialogParams.Sound.bEnableSound )
70: sounddlg[DLGSOUND_ENABLE].state |= SG_SELECTED;
71: else
72: sounddlg[DLGSOUND_ENABLE].state &= ~SG_SELECTED;
73:
74: sounddlg[DLGSOUND_LOW].state &= ~SG_SELECTED;
75: sounddlg[DLGSOUND_MEDIUM].state &= ~SG_SELECTED;
76: sounddlg[DLGSOUND_HIGH].state &= ~SG_SELECTED;
77: if(DialogParams.Sound.nPlaybackQuality == PLAYBACK_LOW)
78: sounddlg[DLGSOUND_LOW].state |= SG_SELECTED;
79: else if(DialogParams.Sound.nPlaybackQuality == PLAYBACK_MEDIUM)
80: sounddlg[DLGSOUND_MEDIUM].state |= SG_SELECTED;
81: else
82: sounddlg[DLGSOUND_HIGH].state |= SG_SELECTED;
83:
84: File_ShrinkName(dlgRecordName, DialogParams.Sound.szYMCaptureFileName, sounddlg[DLGSOUND_RECNAME].w);
85:
86: if( Sound_AreWeRecording() )
87: sounddlg[DLGSOUND_RECORD].txt = "Stop recording";
88: else
89: sounddlg[DLGSOUND_RECORD].txt = "Record sound";
90:
91: /* The sound dialog main loop */
92: do
93: {
94: but = SDLGui_DoDialog(sounddlg);
95: switch(but)
96: {
97: case DLGSOUND_RECBROWSE: /* Choose a new record file */
98: strcpy(tmpname, DialogParams.Sound.szYMCaptureFileName);
99: if( SDLGui_FileSelect(tmpname, NULL, TRUE) )
100: {
101: if( !File_DoesFileNameEndWithSlash(tmpname) )
102: {
103: strcpy(DialogParams.Sound.szYMCaptureFileName, tmpname);
104: File_ShrinkName(dlgRecordName, tmpname, sounddlg[DLGSOUND_RECNAME].w);
105: }
106: }
107: break;
108: case DLGSOUND_RECORD:
109: if(Sound_AreWeRecording())
110: {
111: sounddlg[DLGSOUND_RECORD].txt = "Record sound";
112: Sound_EndRecording();
113: }
114: else
115: {
116: /* make sure that we have a valid file name... */
117: if(strlen(DialogParams.Sound.szYMCaptureFileName) < 4)
118: {
119: strcpy(DialogParams.Sound.szYMCaptureFileName, "./hatari.wav");
120: }
121: sounddlg[DLGSOUND_RECORD].txt = "Stop recording";
122: Sound_BeginRecording(DialogParams.Sound.szYMCaptureFileName);
123: }
124: break;
125: }
126: }
127: while( but!=DLGSOUND_EXIT && !bQuitProgram );
128:
129: /* Read values from dialog */
130: DialogParams.Sound.bEnableSound = (sounddlg[DLGSOUND_ENABLE].state & SG_SELECTED);
131: if( sounddlg[DLGSOUND_LOW].state & SG_SELECTED )
132: DialogParams.Sound.nPlaybackQuality = PLAYBACK_LOW;
133: else if( sounddlg[DLGSOUND_MEDIUM].state & SG_SELECTED )
134: DialogParams.Sound.nPlaybackQuality = PLAYBACK_MEDIUM;
135: else
136: DialogParams.Sound.nPlaybackQuality = PLAYBACK_HIGH;
137:
138: Memory_Free(tmpname);
139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.