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]; 
}