⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sndulaw.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
// --------------------------------------------------------------------------// Name: sndulaw.cpp// Purpose:// Date: 08/11/1999// Author: Guilhem Lavaux <lavaux@easynet.fr> (C) 1999// CVSID: $Id: sndulaw.cpp,v 1.5 2005/09/23 12:47:52 MR Exp $// wxWindows licence// --------------------------------------------------------------------------#include "wx/wxprec.h"#ifndef WX_PRECOMP    #include "wx/defs.h"#endif#ifdef __BORLANDC__    #pragma hdrstop#endif#include "wx/mmedia/sndbase.h"#include "wx/mmedia/sndfile.h"#include "wx/mmedia/sndpcm.h"#include "wx/mmedia/sndulaw.h"#include "wx/mmedia/internal/g72x.h"// --------------------------------------------------------------------------// wxSoundFormatUlaw// --------------------------------------------------------------------------wxSoundFormatUlaw::wxSoundFormatUlaw()        : m_srate(22050), m_channels(1){}wxSoundFormatUlaw::~wxSoundFormatUlaw(){}void wxSoundFormatUlaw::SetSampleRate(wxUint32 srate){    m_srate = srate;}wxUint32 wxSoundFormatUlaw::GetSampleRate() const{    return m_srate;}wxUint8 wxSoundFormatUlaw::GetChannels() const{    return m_channels;}void wxSoundFormatUlaw::SetChannels(wxUint8 nchannels){    m_channels = nchannels;}wxSoundFormatBase *wxSoundFormatUlaw::Clone() const{    wxSoundFormatUlaw *ulaw = new wxSoundFormatUlaw();        ulaw->m_srate = m_srate;    ulaw->m_channels = m_channels;    return ulaw;}wxUint32 wxSoundFormatUlaw::GetTimeFromBytes(wxUint32 bytes) const{    return (bytes / m_srate);}wxUint32 wxSoundFormatUlaw::GetBytesFromTime(wxUint32 time) const{    return time * m_srate;}bool wxSoundFormatUlaw::operator !=(const wxSoundFormatBase& frmt2) const{    wxSoundFormatUlaw *ulaw = (wxSoundFormatUlaw *)&frmt2;        if (frmt2.GetType() != wxSOUND_ULAW)        return true;        return (ulaw->m_srate != m_srate);}// --------------------------------------------------------------------------// wxSoundStreamUlaw// --------------------------------------------------------------------------wxSoundStreamUlaw::wxSoundStreamUlaw(wxSoundStream& sndio) : wxSoundStreamCodec(sndio){  // PCM converter  m_router = new wxSoundRouterStream(sndio);}wxSoundStreamUlaw::~wxSoundStreamUlaw(){  delete m_router;}wxSoundStream& wxSoundStreamUlaw::Read(void *buffer, wxUint32 len){    wxUint16 *old_linear;    register wxUint16 *linear_buffer;    register const wxUint8 *ulaw_buffer;    register wxUint32 countdown;    old_linear = linear_buffer = new wxUint16[len*2];    ulaw_buffer = (const wxUint8 *)buffer;        m_router->Read(linear_buffer, len * 2);        m_lastcount = countdown = m_router->GetLastAccess() / 2;    m_snderror  = m_router->GetError();    if (m_snderror != wxSOUND_NOERROR)        return *this;        while (countdown > 0) {        *linear_buffer++ = ulaw2linear(*ulaw_buffer++);        countdown--;    }        delete[] old_linear;        return *m_router;    }wxSoundStream& wxSoundStreamUlaw::Write(const void *buffer, wxUint32 len){    wxUint16 *old_linear;    register wxUint16 *linear_buffer;    register const wxUint8 *ulaw_buffer;    register wxUint32 countdown = len;        old_linear = linear_buffer = new wxUint16[len*2];    ulaw_buffer = (const wxUint8 *)buffer;        while (countdown > 0) {        *linear_buffer++ = ulaw2linear(*ulaw_buffer++);        countdown--;    }        m_router->Write(old_linear, len * 2);        delete[] old_linear;        return *m_router;}wxUint32 wxSoundStreamUlaw::GetBestSize() const{    return m_sndio->GetBestSize() / 2;}bool wxSoundStreamUlaw::SetSoundFormat(const wxSoundFormatBase& format){    if (format.GetType() != wxSOUND_ULAW) {        m_snderror = wxSOUND_INVFRMT;        return false;    }        // As the codec only support 16 bits, Mono we must use a wxSoundRouter    // to filter the data and to translate them to a format supported    // by the sound card.        wxSoundFormatPcm pcm;    wxSoundFormatUlaw *ulaw;        wxSoundStreamCodec::SetSoundFormat(format);        ulaw = (wxSoundFormatUlaw *)m_sndformat;        pcm.SetSampleRate(ulaw->GetSampleRate());    pcm.SetBPS(16);    pcm.SetChannels(ulaw->GetChannels());    pcm.Signed(true);    pcm.SetOrder(wxBYTE_ORDER);        m_router->SetSoundFormat(pcm);        return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -