【C语言】【windows】--录音器编写
erbi_lucifer吧
全部回复
仅看楼主
level 10
堕erbi 楼主

光影的世界……吾为光为影?



2012年02月20日 10点02分 1
level 10
堕erbi 楼主
程序名称:录音器
编译器:vs2010(其它也可以……)
程序大小:65K
文件包括:进制转换器.exe,skinh.she,SkinH.dll,msvcr100.dll
程序界面:

2012年02月20日 10点02分 2
level 10
堕erbi 楼主
/**************************************************************
综述。
**************************************************************/
这个程序主要的函数就一个:mciSendString
头文件:#include<mmsystem.h>
连接库:#pragma comment(lib,"winmm.lib")
这个函数可以播放AVI视频,可以播放音乐,可以开关光驱,可以录音……
用处很大的……
皮肤+dialog对话框+按钮+图片框(那个音乐符号)+标签(显示文字)
界面自己DIY,这不重要.你可以在本吧的其它帖子看到使用方法。
/**************************************************************
录音之前要设置参数:
mciSendStringA("set wave bitpersample 8","",0,0); //设置为8位
mciSendStringA("set wave samplespersec 11025","",0,0); //设置为11025Hz
mciSendStringA("set wave channels 2","",0,0);//2是立体声,1是单声道
mciSendStringA("set wave format tag pcm","",0,0);//设置PCM格式,不一定正确
**************************************************************/
1. 音频的位,8位,16位还是24位……位数高精确度也就越好
2. 设置Hz,一般人类所听的声音以11025Hz位标准
3. 设置录音时是否是立体声(双音道)
4. 设置PCM格式(Pulse Code Modulation 脉码调制录音),是数字信号,比模拟信号的质量好
/**************************************************************
接下来认识一下操作的编写:
mciSendStringA("open new type WAVEAudio alias movie","",0,0);//新的wav文件
mciSendStringA("record movie","",0,0);//开始录音
mciSendStringA("save movie 路径名","",0,0); //保存录音
mciSendStringA("stop movie","",0,0);//暂停录音
mciSendStringA("close movie","",0,0); //关闭文件
**************************************************************/
open new type WAVEAudio alias movie:
打开(创建)一个新的wav格式文件,并用movie代表这个文件的……
之后我们就可以直接用movie这个词来操作,如close movie
好了,以上是这个程序的重点操作
下面是程序的源代码,其中,一个保存函数和一个播放函数

2012年02月20日 11点02分 3
level 10
堕erbi 楼主
/**************************************************************
保存对话框,头文件#include <commdlg.h>
**************************************************************/
C 语言中声明一个结构体变
量之后,在使用这个变量之前要首先用memset 来把各个位清零。使用C 语言内
置的函数memset 来完成:
memset(&s1,sizeof(s1),0);
在这里我们使用ZeroMemory“函数”,ZeroMemory 其实并不是函数,其实
是memset 的宏定义
ZeroMemory 其实就是memset
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH];
ZeroMemory(&ofn,sizeof(ofn));
以下设置属性
ofn.lStructSize = sizeof(ofn); // 指定这个结构的大小,以字节为单位。
ofn.lpstrFile = szFile;//指向包含初始化文件名编辑控件使用的文件名的数组。
ofn.lpstrFile[0] = TEXT('\0');//指向一对以空字符结束的过滤字符串的一个字符。
ofn.nMaxFile = sizeof(szFile);//数组的大小
ofn.lpstrFilter = TEXT("ALL\0*.*\0WAV\0*.wav\0");//用“\0”分割出几
个段,每两段是一组过滤器,每组的第一个段代表过滤器的显示的值,而第二段
表示真正的过滤器
ofn.nFilterIndex = 2; //默认选择第几个过滤器,是1 开始的,不是0.这也是试验出来的。
ofn.lpstrFileTitle = NULL;//指向默认的文件名(不带路径信息)。可以是NULL
ofn.nMaxFileTitle = 0;//默认文件名的大小
ofn.lpstrInitialDir = NULL;//指定初始目录
ofn.hwndOwner = hwnd;//窗体句柄
ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
//01.指出任何打开或另存为对话框使用新的Explorer风格的用户化模块。
//02. 指定用户仅能输入的路径和文件名。如果这个标记被使用并且用户在文件名输入字段中键入了一个用效的路径和文件名,对话框函数显示一个等待消息。
//03.指定用户仅可以在文件名登录字段中输入已存在的文件的名字。如果这个标记被指定的并且用户输入了一个无效的名字,对话框程序显示一个等待消息框。如果这个标记被指定,OFN_PATHMUSTEXIST标记也被使用。 这个在这里没什么用……
if (GetSaveFileName(&ofn))
{
//执行成功时, szFile就是保存的文件的路径+文件名
}

2012年02月20日 11点02分 5
level 10
堕erbi 楼主
2楼文件包括错误,4楼代码被吞……[拍砖]
2012年02月21日 04点02分 6
1