Annotation of hatari/src/gui-sdl/dlgSound.c, revision 1.1.1.14

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.14! root       73:        { SGSTOP, 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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.