⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdafx.cpp

📁 一个更为先进的嵌入式操作系统.采用RMS线程调度算法,具有信号量等同步对象.亦包括GUI. 通过该系统您可以极大知道Windows的内部秘密.
💻 CPP
字号:
// stdafx.cpp : 只包括标准包含文件的源文件
// WinGOS.pch 将成为预编译头
// stdafx.obj 将包含预编译类型信息

#include "stdafx.h"

// TODO: 在 STDAFX.H 中
//引用任何所需的附加头文件,而不是在此文件中引用

WinAudioWave g_AW;

void CALLBACK WinAudioWave::WaveInProc(HWAVEIN hwi,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
	PWAVEHDR pHdr;
	switch(uMsg)
	{
	case MM_WIM_DATA:
		if(!g_AW.m_hWI)
			break;
		pHdr=(PWAVEHDR)dwParam1;
		WriteFile(g_AW.m_hFile,pHdr->lpData,pHdr->dwBufferLength,&dwParam1,NULL);
		waveInAddBuffer(hwi,pHdr,sizeof(WAVEHDR));
		break;
	}
}

void CALLBACK WinAudioWave::WaveOutProc(HWAVEOUT hwo,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
	PWAVEHDR pHdr;
	switch(uMsg)
	{
	case MM_WOM_DONE:
		if(!g_AW.m_hWO)
			break;
		pHdr=(PWAVEHDR)dwParam1;
		ReadFile(g_AW.m_hFile,pHdr->lpData,pHdr->dwBufferLength,&dwParam1,NULL);
		if(!dwParam1)
			SetFilePointer(g_AW.m_hFile,0,NULL,FILE_BEGIN);
		waveOutWrite(hwo,pHdr,sizeof(WAVEHDR));
		break;
	}
}

BOOL WinAudioWave::Msg(MMRESULT s)
{
	if(s!=MMSYSERR_NOERROR)
	{
		int nCnt=256;
		TCHAR szText[256];
		::waveInGetErrorText(s,szText,nCnt);
		MessageBox(NULL,szText,NULL,MB_OK);
		return TRUE;
	}
	return FALSE;
}

void WinAudioWave::InitARG()
{
	ZeroMemory(this,sizeof(WinAudioWave));
	m_wh1.lpData=(LPSTR)m_aBuf1;
	m_wh1.dwBufferLength=sizeof(m_aBuf1);
	m_wh1.dwLoops=1;
	m_wh2.lpData=(LPSTR)m_aBuf2;
	m_wh2.dwBufferLength=sizeof(m_aBuf2);
	m_wh2.dwLoops=1;
	
	m_wf.wFormatTag=WAVE_FORMAT_PCM;
	m_wf.wBitsPerSample=16;
	m_wf.nSamplesPerSec=WaveSamplesPerSec;
	m_wf.nChannels=2;
	m_wf.nBlockAlign=m_wf.nChannels*m_wf.wBitsPerSample/8;
	m_wf.nAvgBytesPerSec=m_wf.nSamplesPerSec*m_wf.nBlockAlign;
}

BOOL WinAudioWave::Record(LPCTSTR pszFile)
{
	MMRESULT s;
	InitARG();
	m_hFile = CreateFile(pszFile,GENERIC_WRITE,
		0,NULL,CREATE_ALWAYS,0,NULL);
	if(m_hFile==INVALID_HANDLE_VALUE)
		return FALSE;
	s=waveInOpen(&m_hWI,WAVE_MAPPER,&m_wf,(DWORD)WaveInProc,NULL,CALLBACK_FUNCTION);
	if(Msg(s))return FALSE;
	s=waveInPrepareHeader(m_hWI,&m_wh1,sizeof(WAVEHDR));
	s=waveInPrepareHeader(m_hWI,&m_wh2,sizeof(WAVEHDR));
	s=waveInAddBuffer(m_hWI,&m_wh1,sizeof(WAVEHDR));
	s=waveInAddBuffer(m_hWI,&m_wh2,sizeof(WAVEHDR));
	s=waveInStart(m_hWI);
	return TRUE;
}

BOOL WinAudioWave::Play(LPCTSTR pszFile)
{
	MMRESULT s;
	DWORD nSize;
	InitARG();
	m_hFile = CreateFile(pszFile,GENERIC_READ,
		0,NULL,OPEN_EXISTING,0,NULL);
	if(m_hFile==INVALID_HANDLE_VALUE)
		return FALSE;
	s=waveOutOpen(&m_hWO,WAVE_MAPPER,&m_wf,(DWORD)WaveOutProc,NULL,CALLBACK_FUNCTION);
	if(Msg(s))return FALSE;
	s=waveOutPrepareHeader(m_hWO,&m_wh1,sizeof(WAVEHDR));
	s=waveOutPrepareHeader(m_hWO,&m_wh2,sizeof(WAVEHDR));
	nSize=m_wh1.dwBufferLength;
	ReadFile(m_hFile,m_wh1.lpData,nSize,&nSize,NULL);
	s=waveOutWrite(m_hWO,&m_wh1,sizeof(WAVEHDR));
	nSize=m_wh2.dwBufferLength;
	ReadFile(m_hFile,m_wh2.lpData,nSize,&nSize,NULL);
	s=waveOutWrite(m_hWO,&m_wh2,sizeof(WAVEHDR));
	return TRUE;
}

void WinAudioWave::StopRecord()
{
	if(m_hWI)
	{
		HWAVEIN h=m_hWI;
		m_hWI=NULL;
		waveInReset(h);
	}
	if(m_hFile && m_hFile!=INVALID_HANDLE_VALUE)
	{
		CloseHandle(m_hFile);
	}
}

void WinAudioWave::StopPlay()
{
	if(m_hWO)
	{
		HWAVEOUT h=m_hWO;
		m_hWO=NULL;
		waveOutReset(h);
	}
	if(m_hFile && m_hFile!=INVALID_HANDLE_VALUE)
	{
		CloseHandle(m_hFile);
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -