/** * Shortcut to sound on/off */ static void ShortCut_SoundOnOff(void) { /* Toggle sound on/off */ ConfigureParams.Sound.bEnableSound ^= true; /* And start/stop if need to */ if (!ConfigureParams.Sound.bEnableSound) { if (Sound_AreWeRecording()) Sound_EndRecording(); Audio_UnInit(); } else { Audio_Init(); } }
/** * Shortcut to toggle YM/WAV sound recording */ static void ShortCut_RecordSound(void) { /* Is working? */ if (bSoundWorking) { /* Are we currently recording? If so stop */ if (Sound_AreWeRecording()) { /* Stop, and save */ Sound_EndRecording(); } else { /* Begin recording */ Sound_BeginRecording(ConfigureParams.Sound.szYMCaptureFileName); } } }
/** * Show and process the sound dialog. */ void Dialog_SoundDlg(void) { int but, i; SDLGui_CenterDlg(sounddlg); /* Set up dialog from actual values: */ if (ConfigureParams.Sound.bEnableSound) sounddlg[DLGSOUND_ENABLE].state |= SG_SELECTED; else sounddlg[DLGSOUND_ENABLE].state &= ~SG_SELECTED; if (ConfigureParams.Sound.bEnableSoundSync) sounddlg[DLGSOUND_SYNC].state |= SG_SELECTED; else sounddlg[DLGSOUND_SYNC].state &= ~SG_SELECTED; for (i = DLGSOUND_11KHZ; i <= DLGSOUND_50KHZ; i++) sounddlg[i].state &= ~SG_SELECTED; for (i = 0; i <= DLGSOUND_50KHZ-DLGSOUND_11KHZ; i++) { if (ConfigureParams.Sound.nPlaybackFreq > nSoundFreqs[i]-500 && ConfigureParams.Sound.nPlaybackFreq < nSoundFreqs[i]+500) { sounddlg[DLGSOUND_11KHZ + i].state |= SG_SELECTED; break; } } sounddlg[DLGSOUND_MODEL].state &= ~SG_SELECTED; sounddlg[DLGSOUND_TABLE].state &= ~SG_SELECTED; sounddlg[DLGSOUND_LINEAR].state &= ~SG_SELECTED; if (ConfigureParams.Sound.YmVolumeMixing == YM_MODEL_MIXING) sounddlg[DLGSOUND_MODEL].state |= SG_SELECTED; else if (ConfigureParams.Sound.YmVolumeMixing == YM_TABLE_MIXING) sounddlg[DLGSOUND_TABLE].state |= SG_SELECTED; else sounddlg[DLGSOUND_LINEAR].state |= SG_SELECTED; File_ShrinkName(dlgRecordName, ConfigureParams.Sound.szYMCaptureFileName, sounddlg[DLGSOUND_RECNAME].w); if ( Sound_AreWeRecording() ) sounddlg[DLGSOUND_RECORD].txt = "Stop recording"; else sounddlg[DLGSOUND_RECORD].txt = "Record sound"; /* The sound dialog main loop */ do { but = SDLGui_DoDialog(sounddlg, NULL); switch (but) { case DLGSOUND_RECBROWSE: /* Choose a new record file */ SDLGui_FileConfSelect(dlgRecordName, ConfigureParams.Sound.szYMCaptureFileName, sounddlg[DLGSOUND_RECNAME].w, true); break; case DLGSOUND_RECORD: if (Sound_AreWeRecording()) { sounddlg[DLGSOUND_RECORD].txt = "Record sound"; Sound_EndRecording(); } else { /* make sure that we have a valid file name... */ if (strlen(ConfigureParams.Sound.szYMCaptureFileName) < 4) { strcpy(ConfigureParams.Sound.szYMCaptureFileName, "./hatari.wav"); } sounddlg[DLGSOUND_RECORD].txt = "Stop recording"; Sound_BeginRecording(ConfigureParams.Sound.szYMCaptureFileName); } break; } gui_poll_events(); } while (but != DLGSOUND_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram ); /* Read values from dialog */ ConfigureParams.Sound.bEnableSound = (sounddlg[DLGSOUND_ENABLE].state & SG_SELECTED); ConfigureParams.Sound.bEnableSoundSync = (sounddlg[DLGSOUND_SYNC].state & SG_SELECTED); for (i = DLGSOUND_11KHZ; i <= DLGSOUND_50KHZ; i++) { if (sounddlg[i].state & SG_SELECTED) { ConfigureParams.Sound.nPlaybackFreq = nSoundFreqs[i-DLGSOUND_11KHZ]; break; } } if (sounddlg[DLGSOUND_MODEL].state & SG_SELECTED) ConfigureParams.Sound.YmVolumeMixing = YM_MODEL_MIXING; else if (sounddlg[DLGSOUND_TABLE].state & SG_SELECTED) ConfigureParams.Sound.YmVolumeMixing = YM_TABLE_MIXING; else ConfigureParams.Sound.YmVolumeMixing = YM_LINEAR_MIXING; }