win10控制台播放声音c++

2014-02-18 14:58:12 u010105970 阅读数 4145

看过我的博客的人都知道,在C语言中调用几个API函数就可以播放音乐了,而我在博客中也写过Windows图形界面编程中做过一些与音乐有关的程序,如 音乐播放器   音乐贺卡  等 ,可是如果要你在控制台中自己制造音乐,怎么做呢(不是播放音乐文件),

建立Win32控制台程序,在程序中添加下面的代码

#include <stdio.h>
#include <conio.h>
#include <Windows.h>

/*定义1/8时间长度为225ms,中速*/
const unsigned PER = 225;

/*定义音阶:低音*/
enum {Do = 262,Re = 294,Mi = 330,Fa = 349,So = 392,La = 440,Xi = 494};
/*定义播放一节音符的函数
f--表示音符,其值为上述定义的枚举型
a--	表示音高,其值为1(低音)、2(中音)、3(高音)
*/

void Play(int f,int a,int t)
{
	int i = 0;
	Beep((unsigned )(f*a),t*PER);
}

/*定义休止函数*/
void Stop(int t)
{
	Sleep(t*PER);
}

int main()
{
	while(1)
	{
		/*欢乐颂,第一段*/
		/*第一节:3 3 4 5*/
		Play(Mi,2,2); Play(Mi,2,2); Play(Fa,2,2); Play(So,2,2);

		/*第二节:5 4 3 2*/
		Play(So,2,2); Play(Fa,2,2); Play(Mi,2,2); Play(Re,2,2);

		/*第三节:1 1 2 3*/
		Play(Do,2,2); Play(Do,2,2); Play(Re,2,2); Play(Mi,2,2);

		/*第四节:3 2 2 -*/
		Play(Mi,2,2); Play(Re,2,2); Play(Re,2,4); 
    
		/*欢乐颂第二段*/
		/*第一节:3 3 4 5*/
		Play(Mi,2,2); Play(Mi,2,2); Play(Fa,2,2); Play(So,2,2);

		/*第二节:5 4 3 2*/
		Play(So,2,2); Play(Fa,2,2); Play(Mi,2,2); Play(Re,2,2);

		/*第三节:1 1 2 3*/
		Play(Do,2,2); Play(Do,2,2); Play(Re,2,2); Play(Mi,2,2);

		/*第四节:2 1 1 -*/
		Play(Re,2,2); Play(Do,2,2); Play(Do,2,2); 
	}

	Stop(0);
	
	return 0;
}

从上面的代码和解释中我们可以看出这是播放贝多芬的名曲《欢乐颂》


执行结果:循环播放贝多芬的名曲《欢乐颂》并且会出现一个DOS窗口(控制台程序的特点)


点击下载程序



2015-09-22 15:34:25 lucky51222 阅读数 61084

原配的Visual Studio 2015专业版不像之前的版本,在新建项目里面是找不到Win32模板的,那么怎么才能新建Win32项目和Win32控制台应用程序呢?今天我就带大家做一简单介绍。

 先看如下图所示:

解决:

1、添加的办法是点击上图所示的新建项目界面的Visual C++下面的Windows,再点击右边的“安装通用Windows平台工具”,弹出如下对话框,点击“安装”:

2、如果当前Visual Studio 2015正打开,会提示将其关闭以减少资源的利用,点击继续:

3、如下图所示,勾选所有安装的功能组件,建议将其全部勾选,并点击“下一步”:

4、点击“更新”

5、选择第三个单选按钮,并定位到安装包所在位置:

...\cn_visual_studio_professional_2015_x86_x64_dvd_6846645\packages\vcRedistD14\debug\x86\vc_runtimeDebug_x86.msi,点击重试,如下图:

6、安装过程:

7、安装完成后,新建项目→Visual C++→WIn32→Win32控制台应用程序:

8、程序向导:

9、选择控制台应用程序+空项目:

10、菜单栏项目→添加新项→Visual C++→C++文件(.cpp),如果添加C文件,只需要将后缀名改为.c即可:


刘一哥GIS:专注GIS教育,探索GIS奥秘,分享GIS价值!

2016-11-24 22:57:30 banzhuan133 阅读数 574

最近做上机作业经常碰到一个错误:LNK2019 无法解析的外部符号 _WinMain@16,该符号在函数 "int __cdecl invoke_main。

        因为开始时对win32项目和win32控制台项目比较茫然,基本上课本上让我新建啥我就建啥项目,没去深究。在三番两次遇见这个

错误之后,终于下决心把这两个东西搞一遍。

        首先是解决办法:

        将新建的win32项目改为win32控制台项目,属性--链接器--系统--子系统。


        二者的主要区别还是在入口上,因此当选择错误的入口时,程序会报错。

Win32控制台程序:初始代码模版以main为程序入口,默认情况下,只链接C++运行时库和一些核心的win32库,链接器subsystem

参数console类型,所以编译出来的程序会有黑色的控制台窗口作为呈现标准输入(stdin)和标准输出(stdout)。

        Win32工程:初始代码模版实现一个简单的windows窗口,以WinMain作为程序入口,引用了win32Api头文件和库,链接器
subsystem参数为windows,所以生成的程序不带黑色的控制台,直接使用标准输入和标准输出,看不到效果。
        所以每次在新建项目时一定要先搞清楚目的再去新建项目。

2017-08-26 18:47:48 xiaoge2030 阅读数 41879

1、文件->新建项目,弹出新建项目对话框,选择已安装->Windows桌面->Windows桌面向导程序


2、弹出Windows桌面项目对话框,应用程序类型选择:控制台应用程序,其他选项中选择:空项目。这项就会建立我们熟悉的Win32控制台程序项目了。

                                   


                

2015-08-21 09:37:54 yunhaiC 阅读数 5963

win32程序启用控制台(控制台文件名:conout$,conin$,conerr$)  

2010-07-23 13:55:40|  分类: c++|字号 订阅

一个寻找很久,却得来全不费功夫的事情。
做win32窗口程序的时候,有时还是希望在控制台下输入输出一些信息。
特别是VC的TRACE()宏虽然不错,但是输出在VC的debug窗口下。
里面有些杂乱的信息,看起来还是很不爽。
1。最原始的分配控制台,获得句柄,再输出
    AllocConsole() ;
    HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE) ;
    WriteConsole(hd , "hello hplonline" , sizeof("hello hplonline") , NULL , NULL );
    CloseHandle(hd) ;
这个方法是我最早知道的,但毕竟不直观。
每次都要调用一个WriteConsole才搞定。
自己写个函数来包装他的话,虽然做新的项目可以。
但是想要利用一些以前已经做好的控制台下的东西就囧了。
如果有个方法能够让我们还是方便地使用printf这样的函数就完美了。
win32程序启用控制台(控制台文件名:conout,conin,conerr) - blizmax - 废品代码回收
2。对stdin,stdout,stderr重新打开
    AllocConsole();
    freopen("conout$","w",stdout) ;
    printf("hello hplonline!-_-\n") ;
    std::cout<<"i'm cout"<<std::endl;
    freopen("conout$","w",stderr) ;
    std::cerr<<"i'm cerr"<<std::endl;
win32程序启用控制台(控制台文件名:conout,conin,conerr) - blizmax - 废品代码回收
这个用起来就很方便了,昨天在论坛上看到的。
另外就是三个特殊的文件名:
conout$,conin$,conerr$
我想他们的意思已经在他们的名字里的。结合上面的例子就很显然的。
3。修改subsystem
这个方法我就没试过了。
上学期做AISnake的时候就在想,选手调试起来很不方便。
但是不知道怎么把控制台搞出来,只有建议大家用文件输出。
后来看到xsjs的改造版,问之,说直接改subsystem。
不过他改的那个版本在我这里也是没法输出东西,不知道怎么回事。
谁去试一下,记得来说说这方法哈,