1998-12-26 10:36:45 -05:00
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: sndmulaw.cpp
|
|
|
|
// Purpose: wxMMedia
|
|
|
|
// Author: Guilhem Lavaux
|
|
|
|
// Created: 1997
|
|
|
|
// Updated: December 1998
|
|
|
|
// Copyright: (C) 1997, 1998, Guilhem Lavaux
|
|
|
|
// License: wxWindows license
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
1998-11-09 13:37:38 -05:00
|
|
|
#ifdef __GNUG__
|
|
|
|
#pragma implementation "sndmulaw.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "sndsnd.h"
|
|
|
|
#include "sndfrmt.h"
|
|
|
|
#include "sndmulaw.h"
|
|
|
|
#include "adpcm/g72x.h"
|
|
|
|
|
|
|
|
wxSoundMulawCodec::wxSoundMulawCodec()
|
|
|
|
: wxSoundCodec()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
wxSoundMulawCodec::~wxSoundMulawCodec()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void wxSoundMulawCodec::Decode()
|
|
|
|
{
|
|
|
|
int smp;
|
|
|
|
wxSoundDataFormat pref_frmt;
|
|
|
|
|
|
|
|
pref_frmt = GetPreferredFormat(0);
|
|
|
|
if (m_io_format != pref_frmt)
|
|
|
|
ChainCodecAfter(pref_frmt);
|
|
|
|
|
|
|
|
InitMode(DECODING);
|
|
|
|
|
1998-12-23 13:16:19 -05:00
|
|
|
while (!StreamOk()) {
|
1998-11-09 13:37:38 -05:00
|
|
|
smp = ulaw2linear(m_in_sound->GetChar());
|
|
|
|
#ifdef USE_BE_MACH
|
|
|
|
m_out_sound->PutChar((smp & 0xff00) >> 8);
|
|
|
|
m_out_sound->PutChar(smp & 0xff);
|
|
|
|
#else
|
|
|
|
m_out_sound->PutChar(smp & 0xff);
|
|
|
|
m_out_sound->PutChar((smp & 0xff00) >> 8);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void wxSoundMulawCodec::Encode()
|
|
|
|
{
|
|
|
|
int smp;
|
|
|
|
wxSoundDataFormat pref_frmt;
|
|
|
|
|
|
|
|
pref_frmt = GetPreferredFormat(0);
|
|
|
|
if (m_io_format != pref_frmt)
|
|
|
|
ChainCodecBefore(pref_frmt);
|
|
|
|
|
|
|
|
InitMode(ENCODING);
|
|
|
|
|
1998-12-23 13:16:19 -05:00
|
|
|
while (!StreamOk()) {
|
1998-11-09 13:37:38 -05:00
|
|
|
#ifdef USE_BE_MACH
|
|
|
|
smp = ((unsigned short)m_in_sound->GetChar()) << 8;
|
|
|
|
smp |= m_in_sound->GetChar() & 0xff;
|
|
|
|
#else
|
|
|
|
smp = m_in_sound->GetChar() & 0xff;
|
|
|
|
smp |= ((unsigned short)m_in_sound->GetChar()) << 8;
|
|
|
|
#endif
|
|
|
|
m_out_sound->PutChar(linear2ulaw(smp));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
size_t wxSoundMulawCodec::GetByteRate() const
|
|
|
|
{
|
|
|
|
return m_srate;
|
|
|
|
}
|
|
|
|
|
|
|
|
wxSoundDataFormat wxSoundMulawCodec::GetPreferredFormat(int WXUNUSED(no)) const
|
|
|
|
{
|
|
|
|
wxSoundDataFormat format;
|
|
|
|
|
|
|
|
format.SetCodecNo(WXSOUND_PCM);
|
|
|
|
format.SetSampleRate(m_srate);
|
|
|
|
format.SetBps(16);
|
|
|
|
format.SetChannels(1);
|
|
|
|
format.SetSign(wxSND_SAMPLE_SIGNED);
|
|
|
|
#ifdef USE_BE_MACH
|
|
|
|
format.SetByteOrder(wxSND_SAMPLE_BE);
|
|
|
|
#else
|
|
|
|
format.SetByteOrder(wxSND_SAMPLE_LE);
|
|
|
|
#endif
|
|
|
|
return format;
|
|
|
|
}
|