网上搜索键盘钢琴,可以搜索到不少小游戏,最常玩的就是Flash小游戏,26个按键的

后来想用C语言自己实现一个,没有界面~~控制台的。。

原理很简单,先在控制台中获取按键事件,在按键事件中,开一个线程,这个线程就是专门用来播放键对应的音效mp3的。

为什么要用线程呢,因为直接按键播放的话,如果不把mp3播放完,就无法再播放同一mp3,用线程就没有这个问题了。

线程函数中,就是使用mciSendString函数,打开然后播放对应的mp3文件。

刚开始写完的时候很哈皮,可以弹奏了,从网上找了一些曲谱,弹的很开心,后来发现一个问题:

弹了一段时间后,再按键就没有声音了,几经周折,找到了问题的解决办法,在线程函数中,播放mp3后,Sleep一段时间,然后Close它。

因为每个key音都是3秒,所以Sleep时间就定为3000。

下面是代码:

#include <stdio.h>
#include <process.h>
#include <windows.h>
#include <Mmsystem.h>
#pragma comment ( lib, "Winmm.lib" )/*
* 隐藏控制台光标
*/
void HideTheCursor()
{CONSOLE_CURSOR_INFO cciCursor;HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {cciCursor.bVisible = FALSE;SetConsoleCursorInfo(hStdOut, &cciCursor);}
}/*
* 播放线程
*/
unsigned _stdcall thread_play(LPVOID lpParam)
{char sz_command[126] = {0};char sz_cur_play[32] = {0};/*打开mp3文件*/sprintf(sz_command, "open \"key\\%c.mp3\" alias key_%c", (WORD)lpParam, (WORD)lpParam);mciSendString(sz_command, 0, 0, 0 );sprintf(sz_cur_play, "key_%c", (WORD)lpParam);/*播放*/sprintf(sz_command, "play %s", sz_cur_play);mciSendString(sz_command, 0, 0, 0 );/*3秒后关闭*/Sleep(3000);sprintf(sz_command, "close %s", sz_cur_play);mciSendString(sz_command, 0, 0, 0);return 0;
}main()
{/*标准输入句柄*/HWND h_console_in;/*输入记录*/INPUT_RECORD input_rec;DWORD res;/*线程句柄*/HANDLE h_thread_play = INVALID_HANDLE_VALUE;unsigned id_thread_play;printf("欢迎来到键盘钢琴!!\n\n");HideTheCursor();/*获取标准输入句柄,并设置为接受输入*/h_console_in = GetStdHandle(STD_INPUT_HANDLE);SetConsoleMode(h_console_in, ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT);while (1){/*读取一个输入*/ReadConsoleInput(h_console_in, &input_rec, 1, &res);/*刷新输入缓冲区*/FlushConsoleInputBuffer(h_console_in);/*输入事件为按键输入,且按键按下时*/if (input_rec.EventType == KEY_EVENT && input_rec.Event.KeyEvent.bKeyDown == TRUE){/*输入的是A-Z之间的按键*/if (input_rec.Event.KeyEvent.wVirtualKeyCode >= 'A'&& input_rec.Event.KeyEvent.wVirtualKeyCode <= 'Z'){/*将当前按键作为参数,开线程*/h_thread_play = (HANDLE)_beginthreadex(NULL, 0, &thread_play, (void *)input_rec.Event.KeyEvent.wVirtualKeyCode, 0, &id_thread_play);}}}
}

用C语言编写钢琴小程序相关推荐

  1. 用c语言编写MIDI程序,使用C语言编写钢琴小程序

    网上搜索键盘钢琴,可以搜索到不少小游戏,最常玩的就是Flash小游戏,26个按键的. 后来想用C语言自己实现一个,没有界面--控制台的. 原理很简单,先在控制台中获取按键事件,在按键事件中,开一个线程 ...

  2. 钢琴软件c语言源代码,使用C语言编写钢琴小程序

    网上搜索键盘钢琴,可以搜索到不少小游戏,最常玩的就是Flash小游戏,26个按键的. 后来想用C语言自己实现一个,没有界面--控制台的. 原理很简单,先在控制台中获取按键事件,在按键事件中,开一个线程 ...

  3. 用C语言写钢琴小程序的代码,用C语言编写钢琴小程序

    网上搜索键盘钢琴,可以搜索到不少小游戏,最常玩的就是Flash小游戏,26个按键的 后来想用C语言自己实现一个,没有界面--控制台的.. 原理很简单,先在控制台中获取按键事件,在按键事件中,开一个线程 ...

  4. 用c++语言编写的小程序,利用C++编写一些有趣的小程序

    虽然说中学没有参加过信息学竞赛,但相对来说,我接触编程算是比较早的.和我同龄的人,若小学参加过计算机竞赛,大概还对PC-logo有点印象,这算是我对编程的最初体验,这里就不叙述.到了初中,便按着规定学 ...

  5. c语言判断一个月有多少天程序,【0320】C语言编写的小程序,算算自己已经活了多少天...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 // 测试你活了多少天.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include #i ...

  6. 易语言编写倒计时小程序

    本人为编程爱好者,非专业人员. 最近工作中需要用到编写倒计时软件,故有此篇. 软件功能: 1.时间倒计时 2.倒计时会有一个透明放大的标签显示时间 3.各窗口可隐藏 以下为软件运行界面: 代码: .版 ...

  7. 易语言编写登录小程序

    .程序集 窗口程序集_启动窗口.子程序 _按钮1_被单击.如果真 (编辑框1.内容 = "" 或 编辑框2.内容 = "")信息框 ("用户名或密码不 ...

  8. c语言编写数据存储的游戏,c语言经典小程序和c语言编写的小游戏带注释(自动保存的).doc...

    c语言经典小程序和c语言编写的小游戏带注释(自动保存的) 1.写一个定时?关机的小程?序,可以立即关?闭计算机,也可以一段?时间后关闭?计算机. #inclu?de #inclu?de #inclu? ...

  9. 抖音爱心c语言程序,抖音上用记事本编写爱心小程序教程

    本文实例为大家分享了抖音上用记事本编写爱心小程序的具体代码,供大家参考,具体内容如下 先上一波效果图: 一颗旋转的小心心 七夕的前一天晚上,当我满怀期待的把这颗"爱心"展示给我女朋 ...

最新文章

  1. python基础教程3-Python基础教程(三)
  2. 2021辽宁省大学生程序设计竞赛(热身赛)【完结】
  3. linux gnome启动命令,如何在Gnome Shell上自动启动程序
  4. virtualbox linux通用网卡,详解VirtualBox + CentOS 虚拟机网卡配置
  5. mosquitto常见问题及其解决办法
  6. linux的三大服务器,Linux三大重要事件
  7. 工作了一个星期各位一定累了吧,那我们一起来表单验证一番吧!
  8. AICreateMeeting-遇见未来
  9. 串口通信实验(通过串口控制LED、蜂鸣器)
  10. python输出闰年_python写闰年
  11. 成功解决ERROR: Command errored out with exit status 1:    command: 'f:\program files\python\python36\pyt
  12. android属性动画作用范围,Android属性动画的使用(上)
  13. mysql命令创库创表_创库+表的操作
  14. 2022年安全员-C证及安全员-C证作业考试题库
  15. 在世界球场一球成名:HMS 生态为游戏开发者送出的助攻
  16. 【Xgen UE】将Xgen制作好的毛发导入UE
  17. Typora使用技巧 | 各种跳转 【必备】
  18. 判断是否保持函数依赖
  19. JS——mouseover和mouseenter的区别
  20. 小程序云开发教程七:贴子的详情及评论功能

热门文章

  1. Android端与PC端同步绘画板(二)-适配手机和PC屏幕大小
  2. 安科瑞为数据中心提供动环监控能效管理解决方案
  3. 《乱世三国挂机游戏》隐私政策
  4. Unity3d LineRenderer画线
  5. 规划采购 VS 实施采购 VS 控制采购
  6. 210104-技术分享-漏洞复现-shiro
  7. 获取执行计划——EXPLAN PLAN
  8. Java异常面试题(总结最全面的面试题)
  9. Vue Vue cli
  10. 那个 16 岁盗走马化腾QQ、黑掉整个天涯论坛的少年,如今怎么样了?