bool wxSoundFileStream::Stop() { if (m_state == wxSOUND_FILE_STOPPED) return false; if (!StopProduction()) return false; m_prepared = false; if (m_state == wxSOUND_FILE_RECORDING) if (!FinishRecording()) { m_state = wxSOUND_FILE_STOPPED; return false; } if (m_input) m_input->SeekI(0, wxFromStart); if (m_output) m_output->SeekO(0, wxFromStart); m_state = wxSOUND_FILE_STOPPED; return true; }
wxSoundStreamESD::~wxSoundStreamESD() { #ifdef HAVE_ESD_H if (!m_esd_stop) StopProduction(); #endif // defined HAVE_ESD_H }
bool wxSoundFileStream::Pause() { if (m_state == wxSOUND_FILE_PAUSED || m_state == wxSOUND_FILE_STOPPED) return false; if (!StopProduction()) return false; m_oldstate = m_state; m_state = wxSOUND_FILE_PAUSED; return true; }
// -------------------------------------------------------------------------- // StartProduction(): see wxSoundStream // -------------------------------------------------------------------------- bool wxSoundStreamESD::StartProduction(int evt) { #ifndef HAVE_ESD_H m_snderror = wxSOUND_INVDEV; return false; #else wxSoundFormatPcm *pcm; int flag = 0; if (!m_esd_ok) { m_snderror = wxSOUND_INVDEV; return false; } if (!m_esd_stop) StopProduction(); pcm = (wxSoundFormatPcm *)m_sndformat; flag |= (pcm->GetBPS() == 16) ? ESD_BITS16 : ESD_BITS8; flag |= (pcm->GetChannels() == 2) ? ESD_STEREO : ESD_MONO; if ((evt & wxSOUND_OUTPUT) != 0) { flag |= ESD_PLAY | ESD_STREAM; m_fd_output = esd_play_stream(flag, pcm->GetSampleRate(), NULL, MY_ESD_NAME); } if ((evt & wxSOUND_INPUT) != 0) { flag |= ESD_RECORD | ESD_STREAM; m_fd_input = esd_record_stream(flag, pcm->GetSampleRate(), NULL, MY_ESD_NAME); } #ifdef __WXGTK__ if ((evt & wxSOUND_OUTPUT) != 0) { m_tag_output = gdk_input_add(m_fd_output, GDK_INPUT_WRITE, _wxSound_OSS_CBack, (gpointer)this); } if ((evt & wxSOUND_INPUT) != 0) { m_tag_input = gdk_input_add(m_fd_input, GDK_INPUT_READ, _wxSound_OSS_CBack, (gpointer)this); } #endif m_esd_stop = false; m_q_filled = false; return true; #endif // defined HAVE_ESD_H }
bool wxSoundStreamOSS::StartProduction(int evt) { wxSoundFormatBase *old_frmt; if (!m_oss_stop) StopProduction(); old_frmt = m_sndformat->Clone(); if (!old_frmt) { m_snderror = wxSOUND_MEMERROR; return false; } if (evt == wxSOUND_OUTPUT) m_fd = open(m_devname.mb_str(), O_WRONLY); else if (evt == wxSOUND_INPUT) m_fd = open(m_devname.mb_str(), O_RDONLY); if (m_fd == -1) { m_snderror = wxSOUND_INVDEV; return false; } SetSoundFormat(*old_frmt); delete old_frmt; int trig; if (evt == wxSOUND_OUTPUT) { #ifdef __WXGTK__ m_tag = gdk_input_add(m_fd, GDK_INPUT_WRITE, _wxSound_OSS_CBack, (gpointer)this); #endif trig = PCM_ENABLE_OUTPUT; } else { #ifdef __WXGTK__ m_tag = gdk_input_add(m_fd, GDK_INPUT_READ, _wxSound_OSS_CBack, (gpointer)this); #endif trig = PCM_ENABLE_INPUT; } ioctl(m_fd, SNDCTL_DSP_SETTRIGGER, &trig); m_oss_stop = false; m_q_filled = false; return true; }