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

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.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: }

unix.superglobalmegacorp.com

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