亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? serialportdlg.cpp

?? 單片機ram下,pcm轉換為wav文件,對想了解pcm和wav文件關系的人有用.
?? CPP
字號:
// SerialPortDlg.cpp : implementation file
//

#include "stdafx.h"
#include "wave.h"
#include "SerialPortDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define INDEX_OF_PERSON  1
#define INDEX_OF_COMMAND 1
/////////////////////////////////////////////////////////////////////////////
// CSerialPortDlg dialog

CSerialPortDlg::~CSerialPortDlg()
{
	delete []rcvdArray;
}

CSerialPortDlg::CSerialPortDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSerialPortDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSerialPortDlg)
	m_strReceiveData = _T("");
	m_strSendData = _T("");
	//}}AFX_DATA_INIT
	n_ReceiveLength = 0;
	rcvdArray = new char[2097152];//分配空間2M
	reversed = 0;

	person_index=INDEX_OF_PERSON;
	command_index=INDEX_OF_COMMAND;
	person_index2 = INDEX_OF_PERSON;
	command_index2 = INDEX_OF_COMMAND;
}


void CSerialPortDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSerialPortDlg)
	DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
	DDX_Text(pDX, IDC_EDIT_RECEIVE, m_strReceiveData);
	DDX_Text(pDX, IDC_EDIT_SEND, m_strSendData);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSerialPortDlg, CDialog)
	//{{AFX_MSG_MAP(CSerialPortDlg)
	ON_BN_CLICKED(IDC_BUTTON_OpenPort, OnBUTTONOpenPort)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
	ON_BN_CLICKED(IDC_BUTTON_SAVEPCM, OnButtonSavepcm)
	ON_BN_CLICKED(IDC_BUTTON_SAVEWAV, OnButtonSavewav)
	ON_BN_CLICKED(IDC_BUTTON_MANUALSEND, OnButtonManualsend)
	ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
	ON_BN_CLICKED(IDC_BUTTON_ZANTING, OnButtonZanting)
	ON_BN_CLICKED(IDC_BUTTON_CONTINUE, OnButtonContinue)
	ON_BN_CLICKED(IDC_BUTTON_STOP, OnButtonStop)
	ON_BN_CLICKED(IDC_BUTTON_RESTART, OnButtonRestart)
	ON_BN_CLICKED(IDC_BUTTON_READFILEBTN, OnButtonReadfilebtn)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSerialPortDlg message handlers

int CSerialPortDlg::DoModal() 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::DoModal();
}

BEGIN_EVENTSINK_MAP(CSerialPortDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CSerialPortDlg)
	ON_EVENT(CSerialPortDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

//SerialPortDIALOG初始化
BOOL CSerialPortDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	n_ReceiveLength = 0;
	reversed = 0;

	
//	person_index=INDEX_OF_PERSON;
//	command_index=INDEX_OF_COMMAND;
//	person_index2 = INDEX_OF_PERSON;
//	command_index2 = INDEX_OF_COMMAND;

	GetModuleFileName(NULL,path.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
	path.ReleaseBuffer ();
	int nPos;
	nPos=path.ReverseFind ('\\');
	path=path.Left (nPos);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//串口接收數據并顯示在編輯框
void CSerialPortDlg::OnComm() 
{
	// TODO: Add your control notification handler code here
	VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048]; //設置BYTE數組 An 8-bit integerthat is not signed.
	for(k=0;k<2048;k++)
	{
		rxdata[k] = '0'; 
	}

    CString strtemp;
    if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩沖區內有字符
    {             ////////以下你可以根據自己的通信協議加入處理代碼
        variant_inp=m_ctrlComm.GetInput(); //讀緩沖區
        safearray_inp=variant_inp; //VARIANT型變量轉換為ColeSafeArray型變量
        len=safearray_inp.GetOneDimSize(); //得到有效數據長度
		
        for(k=0;k<len;k++)
		{
            safearray_inp.GetElement(&k,rxdata+k);//轉換為BYTE型數組
		}

        for(k=0;k<len;k++) //將數組轉換為Cstring型變量
        {
            BYTE bt=*(char*)(rxdata + k); //字符型
			*(rcvdArray + n_ReceiveLength + k) = bt;//rxdata[k];
            strtemp.Format("%c",bt); //將字符送入臨時變量strtemp存放
			if(m_strReceiveData.GetLength() < 1024)
				m_strReceiveData += "*";//strtemp; //加入接收編輯框對應字符串 
			else
				m_strReceiveData = "";
        }
		n_ReceiveLength += len;
    }
    UpdateData(FALSE); //更新編輯框內容
}

//打開端口
void CSerialPortDlg::OnBUTTONOpenPort() 
{
	// TODO: Add your control notification handler code here
	m_ctrlComm.SetInBufferSize(1024);
	m_ctrlComm.SetOutBufferSize(1024);
	m_ctrlComm.SetCommPort(4); //選擇com4

	if(m_ctrlComm.GetPortOpen())
		m_ctrlComm.SetPortOpen(FALSE);

	
	if( !m_ctrlComm.GetPortOpen())
	{
		m_ctrlComm.SetPortOpen(TRUE);//打開串口
		::AfxMessageBox("串口打開成功!");
	}
	else
		AfxMessageBox("cannot open serial port");

	m_ctrlComm.SetSettings("115200,n,8,1"); //波特率115200,無校驗,8個數據位,1個停止位 

	m_ctrlComm.SetInputMode(1); //1:表示以二進制方式檢取數據
	m_ctrlComm.SetRThreshold(1); 
	//參數1表示每當串口接收緩沖區中有多于或等于1個字符時將引發一個接收數據的OnComm事件
	m_ctrlComm.SetInputLen(0); //設置當前接收區數據長度為0
	m_ctrlComm.GetInput();//先預讀緩沖區以清除殘留數據
}

//清空接收區
void CSerialPortDlg::OnButtonClear() 
{
	// TODO: Add your control notification handler code here
	n_ReceiveLength = 0;
	m_strReceiveData = "";
	reversed = 0;
	UpdateData(FALSE); //更新編輯框內容
	m_ctrlComm.GetInput();
}

//保存為PCM文件
void CSerialPortDlg::OnButtonSavepcm() 
{
	// TODO: Add your control notification handler code here
	if(n_ReceiveLength == 0)
	{
		::AfxMessageBox("尚未接收數據");
		return;
	}
	
	CString ss1,ss2,pcmpath;
    ss1.Format("%d",person_index);
	ss2.Format("%d",command_index);

	//為了讓保存wav文件時的文件名同保存pcm文件時的文件名一致
	person_index2 = person_index;
	command_index2 = command_index;

	if(command_index==4){command_index=1;person_index++;}
	else {command_index++;}
    //command_index++;

	CString pcmName = ss1 + "_" + ss2 + ".pcm";
	LPCSTR	lpszPath = "C:\\record\\";
	SetCurrentDirectory( lpszPath );
	static char BASED_CODE szFilter[] = "PCM文件(*.pcm)|*.pcm|所有文件(*.*)|*.*||";

	CFileDialog FileDlg( FALSE, "pcm", pcmName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		 szFilter );
	FileDlg.m_ofn.lpstrInitialDir = lpszPath ;

	if( FileDlg.DoModal() ==IDOK )
	{

		CString strFileName = FileDlg.GetFileName();
		CString strFileExt = FileDlg.GetFileExt();
		CString lpstrName =  FileDlg.GetPathName();

		pcmFile.Open(lpstrName, CFile::modeCreate | CFile::modeWrite, NULL);

		//MSB轉LSB
		if(0 == reversed)//尚未轉成LSB
		{
			for(int i=1;i<n_ReceiveLength;i+=2)
			{
				BYTE temp = *(rcvdArray+i);
				*(rcvdArray+i) = *(rcvdArray+i-1);
				*(rcvdArray+i-1) = temp;
			}
			reversed = 1;
		}

		pcmFile.Write((BYTE *)rcvdArray,n_ReceiveLength);
		pcmFile.Close();
	}



//	pcmpath="C:\\record\\pcm\\boy\\a";
//	CString pcmName = pcmpath + ss1 + "_" + ss2 + ".pcm";
//	pcmFile.Open(pcmName,CFile::modeCreate|CFile::modeWrite,NULL);

}


//保存為wav文件
void CSerialPortDlg::OnButtonSavewav() 
{
	// TODO: Add your control notification handler code here
	if(n_ReceiveLength == 0)
	{
		::AfxMessageBox("尚未接收數據");
		return ;
	}

	CString ss1,ss2,pcmpath;
    ss1.Format("%d",person_index2);
	ss2.Format("%d",command_index2);

	CString waveName = ss1 + "_" + ss2 + ".wav";
	LPCSTR	lpszPath = "C:\\record\\";
	SetCurrentDirectory( lpszPath );
	static char BASED_CODE szFilter[] = "WAVE文件(*.wav)|*.wav|所有文件(*.*)|*.*||";

	CFileDialog FileDlg( FALSE, "wav", waveName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		 szFilter );
	FileDlg.m_ofn.lpstrInitialDir = lpszPath ;

	if( FileDlg.DoModal() ==IDOK )
	{
		CString strFileName = FileDlg.GetFileName();
		CString strFileExt = FileDlg.GetFileExt();
		CString lpstrName =  FileDlg.GetPathName();

		waveFile.Open(lpstrName,CFile::modeCreate|CFile::modeWrite,NULL);

		//加wav頭
		char RIFF[4] = {'R','I','F','F'};
		int size = n_ReceiveLength + 36;
		char WAVE[4] = {'W','A','V','E'};
		char fmt[4] = {'f','m','t',' '};
		int size1 = 16;
		short audioFormat = 1;
		short channels = 1;
		int sampleRate = 8000;
		int byteRate = 16000;
		short blockAlign = 2;
		short bitPerSample = 16;
		char data[4] = {'d','a','t','a'};
		int size2 = n_ReceiveLength;

		char head[44];
		::memcpy(head,RIFF,4);
		::memcpy(head+4,&size,4);
		::memcpy(head+8,WAVE,4);
		::memcpy(head+12,fmt,4);
		::memcpy(head+16,&size1,4);
		::memcpy(head+20,&audioFormat,2);
		::memcpy(head+22,&channels,2);
		::memcpy(head+24,&sampleRate,4);
		::memcpy(head+28,&byteRate,4);
		::memcpy(head+32,&blockAlign,2);
		::memcpy(head+34,&bitPerSample,2);
		::memcpy(head+36,data,4);
		::memcpy(head+40,&size2,4);

		waveFile.SeekToBegin();
		waveFile.Write((char*)head,44);

		//MSB轉LSB
		if(0 == reversed)//尚未轉成LSB
		{
			for(int i=1;i<n_ReceiveLength;i+=2)
			{
				BYTE temp = *(rcvdArray+i);
				*(rcvdArray+i) = *(rcvdArray+i-1);
				*(rcvdArray+i-1) = temp;
			}
			reversed = 1;
		}

		waveFile.Write((char*)rcvdArray,n_ReceiveLength);
		waveFile.Close();
	}

	//清空接收數據
	n_ReceiveLength = 0;
	m_strReceiveData = "";
	reversed = 0;
	UpdateData(FALSE); //更新編輯框內容
	m_ctrlComm.GetInput();

}

//發送編輯框里的內容
void CSerialPortDlg::OnButtonManualsend() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE); //讀取編輯框內容
	m_ctrlComm.SetOutput(COleVariant(m_strSendData));//發送數據
}

//讀文件發送文件內容并顯示在發送框
void CSerialPortDlg::OnButtonReadfilebtn() 
{
	// TODO: Add your control notification handler code here
	LPCSTR	lpszPath = "C:\\";
	SetCurrentDirectory( lpszPath );
	static char BASED_CODE szFilter[] = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";

	CFileDialog FileDlg( TRUE,  NULL,  NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		 szFilter );
	FileDlg.m_ofn.lpstrInitialDir = lpszPath ;

	if( FileDlg.DoModal() ==IDOK )
	{

		CString strFileName = FileDlg.GetFileName( );
		CString strFileExt = FileDlg.GetFileExt( );
		CString lpstrName =  FileDlg.GetPathName( );

		CFile f;
		CString str;
		f.Open(lpstrName, CFile::modeRead);
		
		int length = f.GetLength();
		TCHAR* pBuff = new TCHAR[length+1];
		f.Read(pBuff,length);
		pBuff[length] = '\0';//pBuff結束符標志

		m_strSendData = pBuff;//用于編輯框顯示文本
		UpdateData(FALSE);
		f.Close();
		pBuff = NULL;
		CSerialPortDlg::OnButtonManualsend();
	}
}


//錄音開始
void CSerialPortDlg::OnButtonStart() 
{
	// TODO: Add your control notification handler code here
	m_ctrlComm.SetInBufferCount(0);
	m_strSendData = "000000000000000000000000000000";//30個0
	m_ctrlComm.SetOutput(COleVariant(m_strSendData));//發送數據
}

//錄音暫停
void CSerialPortDlg::OnButtonZanting() 
{
	// TODO: Add your control notification handler code here
	m_strSendData = "111111111111111111111111111111";//30個1
	m_ctrlComm.SetOutput(COleVariant(m_strSendData));//發送數據
}

//錄音繼續
void CSerialPortDlg::OnButtonContinue() 
{
	// TODO: Add your control notification handler code here
//	m_strSendData = "10";
//	m_ctrlComm.SetOutput(COleVariant(m_strSendData));//發送數據
}

//錄音停止
void CSerialPortDlg::OnButtonStop() 
{
	// TODO: Add your control notification handler code here
//	m_strSendData = "11";
//	m_ctrlComm.SetOutput(COleVariant(m_strSendData));//發送數據
}

//FPGA重新啟動
void CSerialPortDlg::OnButtonRestart() 
{
	// TODO: Add your control notification handler code here
//	m_strSendData = "111";
//	m_ctrlComm.SetOutput(COleVariant(m_strSendData));//發送數據
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品一区二区天天拍小说| 国产一区二区三区综合| 久久久久久久久久久久久夜| 91精品国产色综合久久久蜜香臀| 欧美性欧美巨大黑白大战| 91视视频在线直接观看在线看网页在线看| 国产精品羞羞答答xxdd| 国产精品自在在线| 国产伦精一区二区三区| 91在线丨porny丨国产| 99久久精品一区| 色88888久久久久久影院野外| 日韩免费视频一区| www国产成人| 国产精品视频一二三区| 国产精品久久久久久户外露出 | 欧美久久高跟鞋激| 欧美三电影在线| 日韩欧美在线1卡| 久久久精品综合| 国产精品卡一卡二| 夜夜夜精品看看| 精品一区二区精品| 成人avav影音| 欧美日韩国产123区| 精品国产精品一区二区夜夜嗨| 久久精品亚洲国产奇米99 | 国产91露脸合集magnet| av电影在线观看不卡| 精品视频1区2区3区| 欧美精品一区二区三区很污很色的 | 国产精品美女久久久久久久久 | 中文字幕中文在线不卡住| 亚洲精品欧美激情| 另类小说视频一区二区| 国产成人av自拍| 精品污污网站免费看| 国产人成亚洲第一网站在线播放| 亚洲天堂免费看| 麻豆91精品91久久久的内涵| 成人黄色小视频| 欧美一卡在线观看| 中文字幕人成不卡一区| 免费在线观看一区二区三区| 91影院在线免费观看| 91精品国产乱| 亚洲综合激情另类小说区| 国产真实乱偷精品视频免| 91国产成人在线| 国产日韩欧美精品综合| 蜜桃视频免费观看一区| 欧美中文字幕一区二区三区亚洲| 久久免费电影网| 日本亚洲视频在线| 91国偷自产一区二区三区成为亚洲经典 | 欧美激情艳妇裸体舞| 日本成人在线不卡视频| 91色|porny| 亚洲免费电影在线| 国产白丝网站精品污在线入口 | 国模冰冰炮一区二区| 欧美蜜桃一区二区三区| 亚洲日本免费电影| 成人一区二区三区视频 | 久久久精品综合| 蜜桃视频在线一区| 欧美一区二区三区小说| 偷拍日韩校园综合在线| 在线视频欧美区| 亚洲男人的天堂在线aⅴ视频| 成人性色生活片| 国产婷婷色一区二区三区| 美国三级日本三级久久99| 欧美一区二视频| 日本不卡123| 91麻豆精品国产自产在线 | 日韩手机在线导航| 免费高清在线一区| 日韩欧美激情一区| 精品一区二区免费视频| 久久影音资源网| 成人深夜福利app| 国产精品国产a| 色婷婷亚洲一区二区三区| 亚洲激情在线激情| 欧美视频一区在线| 日韩成人伦理电影在线观看| 日韩一区二区三区免费看| 蜜臀精品一区二区三区在线观看 | 国产精品亚洲а∨天堂免在线| 久久久精品日韩欧美| 国产成人亚洲精品狼色在线| 欧美高清在线精品一区| 99re这里只有精品首页| 一区二区三区电影在线播| 欧美日韩成人综合天天影院| 青青青爽久久午夜综合久久午夜| 精品免费国产一区二区三区四区| 国产成人亚洲综合a∨猫咪| 国产精品三级av| 日本乱人伦aⅴ精品| 日韩激情中文字幕| 久久久精品中文字幕麻豆发布| av电影天堂一区二区在线| 亚洲男人电影天堂| 日韩三级免费观看| 国产精品一区二区不卡| 亚洲欧洲综合另类| 日韩一区二区三区在线观看| 国产激情视频一区二区三区欧美| 亚洲欧美色一区| 欧美一级理论片| 99久久99精品久久久久久| 婷婷开心久久网| 国产精品嫩草影院av蜜臀| 欧美日韩精品电影| 成人网页在线观看| 丝袜美腿一区二区三区| 亚洲成a人片在线观看中文| 欧美成人免费网站| 色中色一区二区| 久久成人免费网| 亚洲成av人片在线| 自拍偷拍欧美激情| 欧美电视剧在线观看完整版| 色综合久久综合网97色综合| 裸体在线国模精品偷拍| 亚洲永久免费视频| 日本一区二区久久| 日韩精品一区二区三区在线| 日本精品视频一区二区| 国产成人一区在线| 男男成人高潮片免费网站| 日韩美女啊v在线免费观看| 久久蜜臀精品av| 日韩欧美精品三级| 欧美日韩午夜影院| 在线免费观看一区| a级高清视频欧美日韩| 国产成人无遮挡在线视频| 美腿丝袜亚洲一区| 日韩电影在线免费看| 亚洲v中文字幕| 亚洲香肠在线观看| 尤物在线观看一区| 一区二区三区高清不卡| 国产精品久久毛片av大全日韩| 久久亚洲精品国产精品紫薇| 日韩欧美一级精品久久| 欧美一级一区二区| 91精品麻豆日日躁夜夜躁| 欧美日韩免费视频| 欧美男同性恋视频网站| 欧美丝袜丝nylons| 欧美午夜精品久久久| 欧美男人的天堂一二区| 欧美日韩另类国产亚洲欧美一级| 欧洲精品一区二区| 26uuu国产一区二区三区| 精品区一区二区| 久久色中文字幕| 国产精品欧美久久久久无广告| 国产欧美精品日韩区二区麻豆天美| 久久久久高清精品| 中文字幕精品一区二区精品绿巨人| 国产视频一区在线播放| 国产精品欧美一区喷水| 亚洲男同性视频| 亚洲成av人片| 久久91精品久久久久久秒播| 国产福利不卡视频| 99久久精品国产一区二区三区| 色综合色狠狠综合色| 欧美日韩国产一级| 精品日韩一区二区| 国产精品入口麻豆九色| 亚洲日本一区二区| 日韩成人av影视| 大胆亚洲人体视频| 欧美中文字幕一区| 欧美精品一区二区精品网| 国产精品乱子久久久久| 亚洲国产成人精品视频| 美女视频一区在线观看| 成人av免费网站| 欧美久久一二三四区| 久久久不卡网国产精品一区| 国产精品国产a| 琪琪一区二区三区| 高清视频一区二区| 欧美精品xxxxbbbb| 中文字幕精品一区二区三区精品| 亚洲精品久久久蜜桃| 美洲天堂一区二卡三卡四卡视频 | 一本久道久久综合中文字幕| 欧美一级片在线| 自拍偷拍亚洲激情| 久久99精品国产.久久久久久 | 欧美日本乱大交xxxxx| 国产女人18毛片水真多成人如厕|