www.pudn.com > Adpcm2.zip > ADPCMDlg.cpp
// ADPCMDlg.cpp : implementation file
//
#include "stdafx.h"
#include "ADPCM.h"
#include "ADPCMDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static int indexTable[16] =
{
-1, -1, -1, -1, 2, 4, 6, 8,
-1, -1, -1, -1, 2, 4, 6, 8,
};
static int stepsizeTable[89] =
{
7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
};
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CADPCMDlg dialog
CADPCMDlg::CADPCMDlg(CWnd* pParent /*=NULL*/)
: CDialog(CADPCMDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CADPCMDlg)
m_dbuf0 = _T("");
m_dbuf1 = _T("");
m_dbuf2 = _T("");
m_dbuf3 = _T("");
m_dbuf4 = _T("");
m_dbuf5 = _T("");
m_dbuf6 = _T("");
m_dbuf7 = _T("");
m_delta0 = _T("");
m_delta1 = _T("");
m_delta2 = _T("");
m_delta3 = _T("");
m_delta4 = _T("");
m_delta5 = _T("");
m_delta6 = _T("");
m_delta7 = _T("");
m_diff0 = _T("");
m_diff1 = _T("");
m_diff2 = _T("");
m_diff3 = _T("");
m_diff4 = _T("");
m_diff5 = _T("");
m_diff6 = _T("");
m_diff7 = _T("");
m_din0 = _T("");
m_din1 = _T("");
m_din2 = _T("");
m_din3 = _T("");
m_din4 = _T("");
m_din5 = _T("");
m_din6 = _T("");
m_din7 = _T("");
m_dout0 = _T("");
m_dout1 = _T("");
m_dout2 = _T("");
m_dout3 = _T("");
m_dout4 = _T("");
m_dout5 = _T("");
m_dout6 = _T("");
m_dout7 = _T("");
m_hl40 = _T("");
m_hl41 = _T("");
m_hl42 = _T("");
m_hl43 = _T("");
m_hl44 = _T("");
m_hl45 = _T("");
m_hl46 = _T("");
m_hl47 = _T("");
m_index0 = _T("");
m_index1 = _T("");
m_index2 = _T("");
m_index3 = _T("");
m_index4 = _T("");
m_index5 = _T("");
m_index6 = _T("");
m_index7 = _T("");
m_pred0 = _T("");
m_pred1 = _T("");
m_pred2 = _T("");
m_pred3 = _T("");
m_pred4 = _T("");
m_pred5 = _T("");
m_pred6 = _T("");
m_pred7 = _T("");
m_sign0 = _T("");
m_sign1 = _T("");
m_sign2 = _T("");
m_sign3 = _T("");
m_sign4 = _T("");
m_sign5 = _T("");
m_sign6 = _T("");
m_sign7 = _T("");
m_step0 = _T("");
m_step1 = _T("");
m_step2 = _T("");
m_step3 = _T("");
m_step4 = _T("");
m_step5 = _T("");
m_step6 = _T("");
m_step7 = _T("");
m_vpdiff0 = _T("");
m_vpdiff1 = _T("");
m_vpdiff2 = _T("");
m_vpdiff3 = _T("");
m_vpdiff4 = _T("");
m_vpdiff5 = _T("");
m_vpdiff6 = _T("");
m_vpdiff7 = _T("");
m_din = 0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
HexDec=FALSE;
}
void CADPCMDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CADPCMDlg)
DDX_Text(pDX, IDC_DBUF0, m_dbuf0);
DDX_Text(pDX, IDC_DBUF1, m_dbuf1);
DDX_Text(pDX, IDC_DBUF2, m_dbuf2);
DDX_Text(pDX, IDC_DBUF3, m_dbuf3);
DDX_Text(pDX, IDC_DBUF4, m_dbuf4);
DDX_Text(pDX, IDC_DBUF5, m_dbuf5);
DDX_Text(pDX, IDC_DBUF6, m_dbuf6);
DDX_Text(pDX, IDC_DBUF7, m_dbuf7);
DDX_Text(pDX, IDC_DELTA0, m_delta0);
DDX_Text(pDX, IDC_DELTA1, m_delta1);
DDX_Text(pDX, IDC_DELTA2, m_delta2);
DDX_Text(pDX, IDC_DELTA3, m_delta3);
DDX_Text(pDX, IDC_DELTA4, m_delta4);
DDX_Text(pDX, IDC_DELTA5, m_delta5);
DDX_Text(pDX, IDC_DELTA6, m_delta6);
DDX_Text(pDX, IDC_DELTA7, m_delta7);
DDX_Text(pDX, IDC_DIFF0, m_diff0);
DDX_Text(pDX, IDC_DIFF1, m_diff1);
DDX_Text(pDX, IDC_DIFF2, m_diff2);
DDX_Text(pDX, IDC_DIFF3, m_diff3);
DDX_Text(pDX, IDC_DIFF4, m_diff4);
DDX_Text(pDX, IDC_DIFF5, m_diff5);
DDX_Text(pDX, IDC_DIFF6, m_diff6);
DDX_Text(pDX, IDC_DIFF7, m_diff7);
DDX_Text(pDX, IDC_DIN0, m_din0);
DDX_Text(pDX, IDC_DIN1, m_din1);
DDX_Text(pDX, IDC_DIN2, m_din2);
DDX_Text(pDX, IDC_DIN3, m_din3);
DDX_Text(pDX, IDC_DIN4, m_din4);
DDX_Text(pDX, IDC_DIN5, m_din5);
DDX_Text(pDX, IDC_DIN6, m_din6);
DDX_Text(pDX, IDC_DIN7, m_din7);
DDX_Text(pDX, IDC_DOUT0, m_dout0);
DDX_Text(pDX, IDC_DOUT1, m_dout1);
DDX_Text(pDX, IDC_DOUT2, m_dout2);
DDX_Text(pDX, IDC_DOUT3, m_dout3);
DDX_Text(pDX, IDC_DOUT4, m_dout4);
DDX_Text(pDX, IDC_DOUT5, m_dout5);
DDX_Text(pDX, IDC_DOUT6, m_dout6);
DDX_Text(pDX, IDC_DOUT7, m_dout7);
DDX_Text(pDX, IDC_HL40, m_hl40);
DDX_Text(pDX, IDC_HL41, m_hl41);
DDX_Text(pDX, IDC_HL42, m_hl42);
DDX_Text(pDX, IDC_HL43, m_hl43);
DDX_Text(pDX, IDC_HL44, m_hl44);
DDX_Text(pDX, IDC_HL45, m_hl45);
DDX_Text(pDX, IDC_HL46, m_hl46);
DDX_Text(pDX, IDC_HL47, m_hl47);
DDX_Text(pDX, IDC_INDEX0, m_index0);
DDX_Text(pDX, IDC_INDEX1, m_index1);
DDX_Text(pDX, IDC_INDEX2, m_index2);
DDX_Text(pDX, IDC_INDEX3, m_index3);
DDX_Text(pDX, IDC_INDEX4, m_index4);
DDX_Text(pDX, IDC_INDEX5, m_index5);
DDX_Text(pDX, IDC_INDEX6, m_index6);
DDX_Text(pDX, IDC_INDEX7, m_index7);
DDX_Text(pDX, IDC_PRED0, m_pred0);
DDX_Text(pDX, IDC_PRED1, m_pred1);
DDX_Text(pDX, IDC_PRED2, m_pred2);
DDX_Text(pDX, IDC_PRED3, m_pred3);
DDX_Text(pDX, IDC_PRED4, m_pred4);
DDX_Text(pDX, IDC_PRED5, m_pred5);
DDX_Text(pDX, IDC_PRED6, m_pred6);
DDX_Text(pDX, IDC_PRED7, m_pred7);
DDX_Text(pDX, IDC_SIGN0, m_sign0);
DDX_Text(pDX, IDC_SIGN1, m_sign1);
DDX_Text(pDX, IDC_SIGN2, m_sign2);
DDX_Text(pDX, IDC_SIGN3, m_sign3);
DDX_Text(pDX, IDC_SIGN4, m_sign4);
DDX_Text(pDX, IDC_SIGN5, m_sign5);
DDX_Text(pDX, IDC_SIGN6, m_sign6);
DDX_Text(pDX, IDC_SIGN7, m_sign7);
DDX_Text(pDX, IDC_STEP0, m_step0);
DDX_Text(pDX, IDC_STEP1, m_step1);
DDX_Text(pDX, IDC_STEP2, m_step2);
DDX_Text(pDX, IDC_STEP3, m_step3);
DDX_Text(pDX, IDC_STEP4, m_step4);
DDX_Text(pDX, IDC_STEP5, m_step5);
DDX_Text(pDX, IDC_STEP6, m_step6);
DDX_Text(pDX, IDC_STEP7, m_step7);
DDX_Text(pDX, IDC_VPDIFF0, m_vpdiff0);
DDX_Text(pDX, IDC_VPDIFF1, m_vpdiff1);
DDX_Text(pDX, IDC_VPDIFF2, m_vpdiff2);
DDX_Text(pDX, IDC_VPDIFF3, m_vpdiff3);
DDX_Text(pDX, IDC_VPDIFF4, m_vpdiff4);
DDX_Text(pDX, IDC_VPDIFF5, m_vpdiff5);
DDX_Text(pDX, IDC_VPDIFF6, m_vpdiff6);
DDX_Text(pDX, IDC_VPDIFF7, m_vpdiff7);
DDX_Text(pDX, IDC_DIN, m_din);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CADPCMDlg, CDialog)
//{{AFX_MSG_MAP(CADPCMDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(ID_COUNT, OnCount)
ON_BN_CLICKED(IDC_CHECK, OnCheck)
ON_BN_CLICKED(IDC_RANDOM, OnRandom)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CADPCMDlg message handlers
BOOL CADPCMDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
DataInit();
return TRUE; // return TRUE unless you set the focus to a control
}
void CADPCMDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CADPCMDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CADPCMDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CADPCMDlg::OnCount()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_din>1023) m_din=1023;
else if(m_din<0) m_din=0;
m_dbuf0=m_dbuf1;
m_dbuf1=m_dbuf2;
m_dbuf2=m_dbuf3;
m_dbuf3=m_dbuf4;
m_dbuf4=m_dbuf5;
m_dbuf5=m_dbuf6;
m_dbuf6=m_dbuf7;
m_delta0=m_delta1;
m_delta1=m_delta2;
m_delta2=m_delta3;
m_delta3=m_delta4;
m_delta4=m_delta5;
m_delta5=m_delta6;
m_delta6=m_delta7;
m_diff0=m_diff1;
m_diff1=m_diff2;
m_diff2=m_diff3;
m_diff3=m_diff4;
m_diff4=m_diff5;
m_diff5=m_diff6;
m_diff6=m_diff7;
m_din0=m_din1;
m_din1=m_din2;
m_din2=m_din3;
m_din3=m_din4;
m_din4=m_din5;
m_din5=m_din6;
m_din6=m_din7;
m_dout0=m_dout1;
m_dout1=m_dout2;
m_dout2=m_dout3;
m_dout3=m_dout4;
m_dout4=m_dout5;
m_dout5=m_dout6;
m_dout6=m_dout7;
m_hl40=m_hl41;
m_hl41=m_hl42;
m_hl42=m_hl43;
m_hl43=m_hl44;
m_hl44=m_hl45;
m_hl45=m_hl46;
m_hl46=m_hl47;
m_index0=m_index1;
m_index1=m_index2;
m_index2=m_index3;
m_index3=m_index4;
m_index4=m_index5;
m_index5=m_index6;
m_index6=m_index7;
m_pred0=m_pred1;
m_pred1=m_pred2;
m_pred2=m_pred3;
m_pred3=m_pred4;
m_pred4=m_pred5;
m_pred5=m_pred6;
m_pred6=m_pred7;
m_sign0=m_sign1;
m_sign1=m_sign2;
m_sign2=m_sign3;
m_sign3=m_sign4;
m_sign4=m_sign5;
m_sign5=m_sign6;
m_sign6=m_sign7;
m_step0=m_step1;
m_step1=m_step2;
m_step2=m_step3;
m_step3=m_step4;
m_step4=m_step5;
m_step5=m_step6;
m_step6=m_step7;
m_vpdiff0=m_vpdiff1;
m_vpdiff1=m_vpdiff2;
m_vpdiff2=m_vpdiff3;
m_vpdiff3=m_vpdiff4;
m_vpdiff4=m_vpdiff5;
m_vpdiff5=m_vpdiff6;
m_vpdiff6=m_vpdiff7;
int i;
for(i=0;i<7;i++)
{
mm_dbuf[i]=mm_dbuf[i+1];
mm_delta[i]=mm_delta[i+1];
mm_diff[i]=mm_diff[i+1];
mm_din[i]=mm_din[i+1];
mm_dout[i]=mm_dout[i+1];
mm_hl4[i]=mm_hl4[i+1];
mm_index[i]=mm_index[i+1];
mm_pred[i]=mm_pred[i+1];
mm_sign[i]=mm_sign[i+1];
mm_step[i]=mm_step[i+1];
mm_vpdiff[i]=mm_vpdiff[i+1];
}
mm_din[7]=m_din;
AdpcmEncode();
CButton *check;
check=(CButton *)GetDlgItem(IDC_CHECK);
HexDec=check->GetCheck();
//->GetWindowText(tt);
if(HexDec==TRUE)
{
m_dbuf7=DecToChar(mm_dbuf[7]);
m_delta7=DecToChar(mm_delta[7]);
m_diff7=DecToChar(mm_diff[7]);
m_din7=DecToChar(mm_din[7]);
m_dout7=DecToChar(mm_dout[7]);
m_hl47=DecToChar(mm_hl4[7]);
m_index7=DecToChar(mm_index[7]);
m_pred7=DecToChar(mm_pred[7]);
m_sign7=DecToChar(mm_sign[7]);
m_step7=DecToChar(mm_step[7]);
m_vpdiff7=DecToChar(mm_vpdiff[7]);
}
else
{
m_dbuf7=DecToHex(mm_dbuf[7]);
m_delta7=DecToHex(mm_delta[7]);
m_diff7=DecToHex(mm_diff[7]);
m_din7=DecToHex(mm_din[7]);
m_dout7=DecToHex(mm_dout[7]);
m_hl47=DecToHex(mm_hl4[7]);
m_index7=DecToHex(mm_index[7]);
m_pred7=DecToHex(mm_pred[7]);
m_sign7=DecToHex(mm_sign[7]);
m_step7=DecToHex(mm_step[7]);
m_vpdiff7=DecToHex(mm_vpdiff[7]);
}
UpdateData(FALSE);
}
void CADPCMDlg::OnCheck()
{
// TODO: Add your control notification handler code here
CButton *check;
check=(CButton *)GetDlgItem(IDC_CHECK);
HexDec=check->GetCheck();
//->GetWindowText(tt);
if(HexDec==TRUE)
{
check->SetWindowText("DEC");
m_dbuf0=DecToChar(mm_dbuf[0]);
m_dbuf1=DecToChar(mm_dbuf[1]);
m_dbuf2=DecToChar(mm_dbuf[2]);
m_dbuf3=DecToChar(mm_dbuf[3]);
m_dbuf4=DecToChar(mm_dbuf[4]);
m_dbuf5=DecToChar(mm_dbuf[5]);
m_dbuf6=DecToChar(mm_dbuf[6]);
m_dbuf7=DecToChar(mm_dbuf[7]);
m_delta0=DecToChar(mm_delta[0]);
m_delta1=DecToChar(mm_delta[1]);
m_delta2=DecToChar(mm_delta[2]);
m_delta3=DecToChar(mm_delta[3]);
m_delta4=DecToChar(mm_delta[4]);
m_delta5=DecToChar(mm_delta[5]);
m_delta6=DecToChar(mm_delta[6]);
m_delta7=DecToChar(mm_delta[7]);
m_diff0=DecToChar(mm_diff[0]);
m_diff1=DecToChar(mm_diff[0]);
m_diff2=DecToChar(mm_diff[0]);
m_diff3=DecToChar(mm_diff[0]);
m_diff4=DecToChar(mm_diff[0]);
m_diff5=DecToChar(mm_diff[0]);
m_diff6=DecToChar(mm_diff[0]);
m_diff7=DecToChar(mm_diff[0]);
m_din=m_din%1024;
m_din0=DecToChar(mm_din[0]);
m_din1=DecToChar(mm_din[1]);
m_din2=DecToChar(mm_din[2]);
m_din3=DecToChar(mm_din[3]);
m_din4=DecToChar(mm_din[4]);
m_din5=DecToChar(mm_din[5]);
m_din6=DecToChar(mm_din[6]);
m_din7=DecToChar(mm_din[7]);
m_dout0=DecToChar(mm_dout[0]);
m_dout1=DecToChar(mm_dout[1]);
m_dout2=DecToChar(mm_dout[2]);
m_dout3=DecToChar(mm_dout[3]);
m_dout4=DecToChar(mm_dout[4]);
m_dout5=DecToChar(mm_dout[5]);
m_dout6=DecToChar(mm_dout[6]);
m_dout7=DecToChar(mm_dout[7]);
m_hl40=DecToChar(mm_hl4[0]);
m_hl41=DecToChar(mm_hl4[1]);
m_hl42=DecToChar(mm_hl4[2]);
m_hl43=DecToChar(mm_hl4[3]);
m_hl44=DecToChar(mm_hl4[4]);
m_hl45=DecToChar(mm_hl4[5]);
m_hl46=DecToChar(mm_hl4[6]);
m_hl47=DecToChar(mm_hl4[7]);
m_index0=DecToChar(mm_index[0]);
m_index1=DecToChar(mm_index[1]);
m_index2=DecToChar(mm_index[2]);
m_index3=DecToChar(mm_index[3]);
m_index4=DecToChar(mm_index[4]);
m_index5=DecToChar(mm_index[5]);
m_index6=DecToChar(mm_index[6]);
m_index7=DecToChar(mm_index[7]);
m_pred0=DecToChar(mm_pred[0]);
m_pred1=DecToChar(mm_pred[1]);
m_pred2=DecToChar(mm_pred[2]);
m_pred3=DecToChar(mm_pred[3]);
m_pred4=DecToChar(mm_pred[4]);
m_pred5=DecToChar(mm_pred[5]);
m_pred6=DecToChar(mm_pred[6]);
m_pred7=DecToChar(mm_pred[7]);
m_sign0=DecToChar(mm_sign[0]);
m_sign1=DecToChar(mm_sign[1]);
m_sign2=DecToChar(mm_sign[2]);
m_sign3=DecToChar(mm_sign[3]);
m_sign4=DecToChar(mm_sign[4]);
m_sign5=DecToChar(mm_sign[5]);
m_sign6=DecToChar(mm_sign[6]);
m_sign7=DecToChar(mm_sign[7]);
m_step0=DecToChar(mm_step[0]);
m_step1=DecToChar(mm_step[1]);
m_step2=DecToChar(mm_step[2]);
m_step3=DecToChar(mm_step[3]);
m_step4=DecToChar(mm_step[4]);
m_step5=DecToChar(mm_step[5]);
m_step6=DecToChar(mm_step[6]);
m_step7=DecToChar(mm_step[7]);
m_vpdiff0=DecToChar(mm_vpdiff[0]);
m_vpdiff1=DecToChar(mm_vpdiff[1]);
m_vpdiff2=DecToChar(mm_vpdiff[2]);
m_vpdiff3=DecToChar(mm_vpdiff[3]);
m_vpdiff4=DecToChar(mm_vpdiff[4]);
m_vpdiff5=DecToChar(mm_vpdiff[5]);
m_vpdiff6=DecToChar(mm_vpdiff[6]);
m_vpdiff7=DecToChar(mm_vpdiff[7]);
UpdateData(FALSE);
}
else
{
check->SetWindowText("HEX");
m_dbuf0=DecToHex(mm_dbuf[0]);
m_dbuf1=DecToHex(mm_dbuf[1]);
m_dbuf2=DecToHex(mm_dbuf[2]);
m_dbuf3=DecToHex(mm_dbuf[3]);
m_dbuf4=DecToHex(mm_dbuf[4]);
m_dbuf5=DecToHex(mm_dbuf[5]);
m_dbuf6=DecToHex(mm_dbuf[6]);
m_dbuf7=DecToHex(mm_dbuf[7]);
m_delta0=DecToHex(mm_delta[0]);
m_delta1=DecToHex(mm_delta[1]);
m_delta2=DecToHex(mm_delta[2]);
m_delta3=DecToHex(mm_delta[3]);
m_delta4=DecToHex(mm_delta[4]);
m_delta5=DecToHex(mm_delta[5]);
m_delta6=DecToHex(mm_delta[6]);
m_delta7=DecToHex(mm_delta[7]);
m_diff0=DecToHex(mm_diff[0]);
m_diff1=DecToHex(mm_diff[0]);
m_diff2=DecToHex(mm_diff[0]);
m_diff3=DecToHex(mm_diff[0]);
m_diff4=DecToHex(mm_diff[0]);
m_diff5=DecToHex(mm_diff[0]);
m_diff6=DecToHex(mm_diff[0]);
m_diff7=DecToHex(mm_diff[0]);
m_din=m_din%1024;
m_din0=DecToHex(mm_din[0]);
m_din1=DecToHex(mm_din[1]);
m_din2=DecToHex(mm_din[2]);
m_din3=DecToHex(mm_din[3]);
m_din4=DecToHex(mm_din[4]);
m_din5=DecToHex(mm_din[5]);
m_din6=DecToHex(mm_din[6]);
m_din7=DecToHex(mm_din[7]);
m_dout0=DecToHex(mm_dout[0]);
m_dout1=DecToHex(mm_dout[1]);
m_dout2=DecToHex(mm_dout[2]);
m_dout3=DecToHex(mm_dout[3]);
m_dout4=DecToHex(mm_dout[4]);
m_dout5=DecToHex(mm_dout[5]);
m_dout6=DecToHex(mm_dout[6]);
m_dout7=DecToHex(mm_dout[7]);
m_hl40=DecToHex(mm_hl4[0]);
m_hl41=DecToHex(mm_hl4[1]);
m_hl42=DecToHex(mm_hl4[2]);
m_hl43=DecToHex(mm_hl4[3]);
m_hl44=DecToHex(mm_hl4[4]);
m_hl45=DecToHex(mm_hl4[5]);
m_hl46=DecToHex(mm_hl4[6]);
m_hl47=DecToHex(mm_hl4[7]);
m_index0=DecToHex(mm_index[0]);
m_index1=DecToHex(mm_index[1]);
m_index2=DecToHex(mm_index[2]);
m_index3=DecToHex(mm_index[3]);
m_index4=DecToHex(mm_index[4]);
m_index5=DecToHex(mm_index[5]);
m_index6=DecToHex(mm_index[6]);
m_index7=DecToHex(mm_index[7]);
m_pred0=DecToHex(mm_pred[0]);
m_pred1=DecToHex(mm_pred[1]);
m_pred2=DecToHex(mm_pred[2]);
m_pred3=DecToHex(mm_pred[3]);
m_pred4=DecToHex(mm_pred[4]);
m_pred5=DecToHex(mm_pred[5]);
m_pred6=DecToHex(mm_pred[6]);
m_pred7=DecToHex(mm_pred[7]);
m_sign0=DecToHex(mm_sign[0]);
m_sign1=DecToHex(mm_sign[1]);
m_sign2=DecToHex(mm_sign[2]);
m_sign3=DecToHex(mm_sign[3]);
m_sign4=DecToHex(mm_sign[4]);
m_sign5=DecToHex(mm_sign[5]);
m_sign6=DecToHex(mm_sign[6]);
m_sign7=DecToHex(mm_sign[7]);
m_step0=DecToHex(mm_step[0]);
m_step1=DecToHex(mm_step[1]);
m_step2=DecToHex(mm_step[2]);
m_step3=DecToHex(mm_step[3]);
m_step4=DecToHex(mm_step[4]);
m_step5=DecToHex(mm_step[5]);
m_step6=DecToHex(mm_step[6]);
m_step7=DecToHex(mm_step[7]);
m_vpdiff0=DecToHex(mm_vpdiff[0]);
m_vpdiff1=DecToHex(mm_vpdiff[1]);
m_vpdiff2=DecToHex(mm_vpdiff[2]);
m_vpdiff3=DecToHex(mm_vpdiff[3]);
m_vpdiff4=DecToHex(mm_vpdiff[4]);
m_vpdiff5=DecToHex(mm_vpdiff[5]);
m_vpdiff6=DecToHex(mm_vpdiff[6]);
m_vpdiff7=DecToHex(mm_vpdiff[7]);
UpdateData(FALSE);
}
}
void CADPCMDlg::OnRandom()
{
// TODO: Add your control notification handler code here
m_din=rand()%1024;
UpdateData(FALSE);
OnCount();
}
void CADPCMDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
void CADPCMDlg::DataInit()
{
int i;
for(i=0;i<8;i++)
{
mm_dbuf[i]=0;
mm_delta[i]=0;
mm_diff[i]=0;
mm_din[i]=0;
mm_dout[i]=0;
mm_hl4[i]=0;
mm_index[i]=0;
mm_pred[i]=0;
mm_sign[i]=0;
mm_step[i]=7;
mm_vpdiff[i]=0;
}
m_din=0;
m_dbuf0=DecToHex(mm_dbuf[0]);
m_dbuf1=DecToHex(mm_dbuf[1]);
m_dbuf2=DecToHex(mm_dbuf[2]);
m_dbuf3=DecToHex(mm_dbuf[3]);
m_dbuf4=DecToHex(mm_dbuf[4]);
m_dbuf5=DecToHex(mm_dbuf[5]);
m_dbuf6=DecToHex(mm_dbuf[6]);
m_dbuf7=DecToHex(mm_dbuf[7]);
m_delta0=DecToHex(mm_delta[0]);
m_delta1=DecToHex(mm_delta[1]);
m_delta2=DecToHex(mm_delta[2]);
m_delta3=DecToHex(mm_delta[3]);
m_delta4=DecToHex(mm_delta[4]);
m_delta5=DecToHex(mm_delta[5]);
m_delta6=DecToHex(mm_delta[6]);
m_delta7=DecToHex(mm_delta[7]);
m_diff0=DecToHex(mm_diff[0]);
m_diff1=DecToHex(mm_diff[0]);
m_diff2=DecToHex(mm_diff[0]);
m_diff3=DecToHex(mm_diff[0]);
m_diff4=DecToHex(mm_diff[0]);
m_diff5=DecToHex(mm_diff[0]);
m_diff6=DecToHex(mm_diff[0]);
m_diff7=DecToHex(mm_diff[0]);
m_din=m_din%1024;
m_din0=DecToHex(mm_din[0]);
m_din1=DecToHex(mm_din[1]);
m_din2=DecToHex(mm_din[2]);
m_din3=DecToHex(mm_din[3]);
m_din4=DecToHex(mm_din[4]);
m_din5=DecToHex(mm_din[5]);
m_din6=DecToHex(mm_din[6]);
m_din7=DecToHex(mm_din[7]);
m_dout0=DecToHex(mm_dout[0]);
m_dout1=DecToHex(mm_dout[1]);
m_dout2=DecToHex(mm_dout[2]);
m_dout3=DecToHex(mm_dout[3]);
m_dout4=DecToHex(mm_dout[4]);
m_dout5=DecToHex(mm_dout[5]);
m_dout6=DecToHex(mm_dout[6]);
m_dout7=DecToHex(mm_dout[7]);
m_hl40=DecToHex(mm_hl4[0]);
m_hl41=DecToHex(mm_hl4[1]);
m_hl42=DecToHex(mm_hl4[2]);
m_hl43=DecToHex(mm_hl4[3]);
m_hl44=DecToHex(mm_hl4[4]);
m_hl45=DecToHex(mm_hl4[5]);
m_hl46=DecToHex(mm_hl4[6]);
m_hl47=DecToHex(mm_hl4[7]);
m_index0=DecToHex(mm_index[0]);
m_index1=DecToHex(mm_index[1]);
m_index2=DecToHex(mm_index[2]);
m_index3=DecToHex(mm_index[3]);
m_index4=DecToHex(mm_index[4]);
m_index5=DecToHex(mm_index[5]);
m_index6=DecToHex(mm_index[6]);
m_index7=DecToHex(mm_index[7]);
m_pred0=DecToHex(mm_pred[0]);
m_pred1=DecToHex(mm_pred[1]);
m_pred2=DecToHex(mm_pred[2]);
m_pred3=DecToHex(mm_pred[3]);
m_pred4=DecToHex(mm_pred[4]);
m_pred5=DecToHex(mm_pred[5]);
m_pred6=DecToHex(mm_pred[6]);
m_pred7=DecToHex(mm_pred[7]);
m_sign0=DecToHex(mm_sign[0]);
m_sign1=DecToHex(mm_sign[1]);
m_sign2=DecToHex(mm_sign[2]);
m_sign3=DecToHex(mm_sign[3]);
m_sign4=DecToHex(mm_sign[4]);
m_sign5=DecToHex(mm_sign[5]);
m_sign6=DecToHex(mm_sign[6]);
m_sign7=DecToHex(mm_sign[7]);
m_step0=DecToHex(mm_step[0]);
m_step1=DecToHex(mm_step[1]);
m_step2=DecToHex(mm_step[2]);
m_step3=DecToHex(mm_step[3]);
m_step4=DecToHex(mm_step[4]);
m_step5=DecToHex(mm_step[5]);
m_step6=DecToHex(mm_step[6]);
m_step7=DecToHex(mm_step[7]);
m_vpdiff0=DecToHex(mm_vpdiff[0]);
m_vpdiff1=DecToHex(mm_vpdiff[1]);
m_vpdiff2=DecToHex(mm_vpdiff[2]);
m_vpdiff3=DecToHex(mm_vpdiff[3]);
m_vpdiff4=DecToHex(mm_vpdiff[4]);
m_vpdiff5=DecToHex(mm_vpdiff[5]);
m_vpdiff6=DecToHex(mm_vpdiff[6]);
m_vpdiff7=DecToHex(mm_vpdiff[7]);
UpdateData(FALSE);
}
CString CADPCMDlg::DecToHex(int din)
{
CString tts;
char ttc[5];
int m;
ttc[4]=0;
m=din/4096;
if(m>=0&&m<10) ttc[0]=m+48;
else ttc[0]=m+55;
din=din%4096;
m=din/256;
if(m>=0&&m<10) ttc[1]=m+48;
else ttc[1]=m+55;
din=din%256;
m=din/16;
if(m>=0&&m<10) ttc[2]=m+48;
else ttc[2]=m+55;
din=din%16;
m=din;
if(m>=0&&m<10) ttc[3]=m+48;
else ttc[3]=m+55;
tts=ttc;
return tts;
}
CString CADPCMDlg::DecToChar(int din)
{
CString tts;
char ttc[5];
int m;
ttc[4]=0;
m=din/1000;
if(m>=10) m=9;
ttc[0]=m+48;
din=din%1000;
m=din/100;
ttc[1]=m+48;
din=din%100;
m=din/10;
ttc[2]=m+48;
din=din%10;
m=din;
ttc[3]=m+48;
tts=ttc;
return tts;
}
void CADPCMDlg::AdpcmEncode()
{
// Step 1 - 计算与前一数据之差
mm_diff[7] = m_din - mm_pred[7];
mm_sign[7] = (mm_diff[7]<0)?8:0;
if ( mm_sign[7] ) mm_diff[7] = (-mm_diff[7]); //求绝对值
/* Step 2 - Divide and clamp */
mm_delta[7] = 0;
mm_vpdiff[7] = (mm_step[7] >> 3);
if ( mm_diff[7] >= mm_step[7] )
{
mm_delta[7] = 4;
mm_diff[7] -= mm_step[7];
mm_vpdiff[7] += mm_step[7];
}
mm_step[7] >>= 1;
if ( mm_diff[7] >= mm_step[7] )
{
mm_delta[7] |= 2;
mm_diff[7] -= mm_step[7];
mm_vpdiff[7] += mm_step[7];
}
mm_step[7] >>= 1;
if ( mm_diff[7] >= mm_step[7] )
{
mm_delta[7] |= 1;
mm_vpdiff[7] += mm_step[7];
}
/* step 3 - 更新前一数据 */
if ( mm_sign[7] ) mm_pred[7] -= mm_vpdiff[7];
else mm_pred[7] += mm_vpdiff[7];
/* step 4 - 限制前一数据范围 */
if ( mm_pred[7] > 1023 ) mm_pred[7] = 1023;
else if ( mm_pred[7] < 0 ) mm_pred[7] = 0;
/* Step 5 - Assemble value, 更新index和step值 */
mm_delta[7] |= mm_sign[7];
mm_index[7] += indexTable[mm_delta[7]];
if ( mm_index[7] < 0 ) mm_index[7] = 0;
if ( mm_index[7] > 52 ) mm_index[7] = 52;
mm_step[7] = stepsizeTable[mm_index[7]];
/* Step 6 - 输出4 bit数据 */
//高4位
if ( mm_hl4[7]==0 ) mm_dbuf[7] = (mm_delta[7] << 4) & 0xf0;
//低4位
else mm_dout[7] = mm_dbuf[7] = (mm_delta[7] & 0x0f) | mm_dbuf[7];
mm_hl4[7] = !mm_hl4[7];
}