Changed size_t to wxUint32 Added support for G72X WAV format multi-codec handling git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3508 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			136 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// --------------------------------------------------------------------------
 | 
						|
// Name: sndulaw.cpp
 | 
						|
// Purpose:
 | 
						|
// Date: 08/11/1999
 | 
						|
// Author: Guilhem Lavaux <lavaux@easynet.fr> (C) 1999
 | 
						|
// CVSID: $Id$
 | 
						|
// --------------------------------------------------------------------------
 | 
						|
#ifdef __GNUG__
 | 
						|
#pragma implementation "sndulaw.cpp"
 | 
						|
#endif
 | 
						|
 | 
						|
#include <wx/wxprec.h>
 | 
						|
#include "sndbase.h"
 | 
						|
#include "sndfile.h"
 | 
						|
#include "sndpcm.h"
 | 
						|
#include "sndulaw.h"
 | 
						|
#include "g72x.h"
 | 
						|
 | 
						|
// --------------------------------------------------------------------------
 | 
						|
// wxSoundFormatUlaw
 | 
						|
// --------------------------------------------------------------------------
 | 
						|
 | 
						|
wxSoundFormatUlaw::wxSoundFormatUlaw()
 | 
						|
  : m_srate(22050)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
wxSoundFormatUlaw::~wxSoundFormatUlaw()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
void wxSoundFormatUlaw::SetSampleRate(wxUint32 srate)
 | 
						|
{
 | 
						|
  m_srate = srate;
 | 
						|
}
 | 
						|
 | 
						|
wxUint32 wxSoundFormatUlaw::GetSampleRate() const
 | 
						|
{
 | 
						|
  return m_srate;
 | 
						|
}
 | 
						|
 | 
						|
wxSoundFormatBase *wxSoundFormatUlaw::Clone() const
 | 
						|
{
 | 
						|
  wxSoundFormatUlaw *ulaw = new wxSoundFormatUlaw();
 | 
						|
 | 
						|
  ulaw->m_srate = m_srate;
 | 
						|
  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)
 | 
						|
{
 | 
						|
  return *this;
 | 
						|
}
 | 
						|
 | 
						|
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;
 | 
						|
}
 | 
						|
 | 
						|
bool wxSoundStreamUlaw::SetSoundFormat(const wxSoundFormatBase& format)
 | 
						|
{
 | 
						|
  if (format.GetType() != wxSOUND_ULAW) {
 | 
						|
    m_snderror = wxSOUND_INVFRMT;
 | 
						|
    return FALSE;
 | 
						|
  }
 | 
						|
 | 
						|
  wxSoundFormatPcm pcm;
 | 
						|
  wxSoundFormatUlaw *ulaw;
 | 
						|
 | 
						|
  wxSoundStreamCodec::SetSoundFormat(format);
 | 
						|
 | 
						|
  ulaw = (wxSoundFormatUlaw *)m_sndformat;
 | 
						|
 | 
						|
  pcm.SetSampleRate(ulaw->GetSampleRate());
 | 
						|
  pcm.SetBPS(16);
 | 
						|
  pcm.SetChannels(1);
 | 
						|
  pcm.Signed(TRUE);
 | 
						|
  pcm.SetOrder(wxBYTE_ORDER);
 | 
						|
 | 
						|
  m_router->SetSoundFormat(pcm);
 | 
						|
 | 
						|
  return TRUE;
 | 
						|
}
 |