手滑把稿子发了,删了补档下
代码核心是两个函数:Beep函数和Sleep函数
先放代码(Tips:这是我半年前写的,有些内容的实现有更好的方法,如果想了解请继续往下看~)
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
#define fa0 174.61411571650194
#define la0 220.0
#define do1 261.6255653005986
#define re1 293.66476791740763
#define mi1 329.62755691286986
#define fa1 349.22823143300394
#define so1 391.9954359817492
#define la1 440.0
#define jsi1 466.163761518098
#define si1 493.88330125612424
#define do2 523.2511306011972
#define re2 587.3295358348153
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cout<<"《别让我担心》"<<endl;
Sleep(1145.14);
cout<<"演唱:派蒙——多多poi"<<endl;
Sleep(1145.14);
cout<<"词曲、音乐制作:ChiliChill"<<endl;
Sleep(1145.14);
cout<<"编曲:頼暐哲、ChiliChill"<<endl;
Sleep(1145.14);
cout<<"MV:KKOMDA and Frank"<<endl;
Sleep(1145.14);
cout<<"天气晴 风平浪静 沙滩上混乱的脚印"<<endl;
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(fa1,562.5);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(fa1,562.5);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(so1,375);
Beep(fa1,750);
Beep(do1,375);
Beep(do1,1500);
cout<<"钓鱼竿 两份孤单 会飞的落汤鸡"<<endl;
Beep(do1,187.5);
Beep(re1,187.5);
Beep(fa1,562.5);
Beep(fa1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,562.5);
Beep(la1,187.5);
Beep(re2,187.5);
Beep(do2,187.5);
Beep(la1,375);
Beep(so1,375);
Beep(fa1,987.5);
Sleep(375);
cout<<"是故事的开局"<<endl;
Beep(la1,187.5);
Beep(do2,187.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(fa1,375);
Beep(fa1,562.5);
cout<<"青橙紫绿 留影机塞满了回忆"<<endl;
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(fa1,562.5);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(so1,375);
Beep(fa1,750);
Beep(do1,375);
Beep(do1,562.5);
Beep(re1,187.5);
Beep(fa1,562.5);
cout<<"可我却 无比思念"<<endl;
Beep(do1,187.5);
Beep(re1,187.5);
Beep(fa1,562.5);
Beep(fa1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,562.5);
cout<<"遇见你的那一集"<<endl;
Beep(la1,187.5);
Beep(re2,187.5);
Beep(do2,187.5);
Beep(la1,375);
Beep(so1,187.5);
Beep(fa1,187.5);
Beep(fa1,1687.5);
Sleep(1875);
cout<<"才发现 我们早已 走了很远很远"<<endl;
Beep(re2,187.5);
Beep(do2,375);
Beep(do1,750);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(la1,375);
Beep(la1,1312.5);
Beep(fa1,187.5);
Beep(mi1,562.5);
Beep(re1,187.5);
Beep(mi1,562.5);
Beep(fa1,187.5);
Beep(fa1,562.5);
Sleep(375);
cout<<"多少遍 四目相对 感叹幸亏幸亏"<<endl;
Beep(re2,187.5);
Beep(do2,375);
Beep(do1,750);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(la1,375);
Beep(la1,1312.5);
Beep(do1,187.5);
Beep(re1,562.5);
Beep(do1,187.5);
Beep(re1,562.5);
Beep(do1,187.5);
Beep(do1,562.5);
Sleep(2625);
cout<<"我想起一句花语"<<endl;
Beep(do1,375);
Beep(do1,562.5);
Beep(do1,187.5);
Beep(re1,375);
Beep(do1,375);
Beep(la0,375);
Beep(fa0,375);
Sleep(3375);
cout<<"突然想送给你"<<endl;
Beep(do1,375);
Beep(do1,187.5);
Beep(la0,187.5);
Beep(do1,375);
Beep(re1,375);
Beep(do1,375);
Sleep(562.5);
cout<<"摘一朵纯白色的花"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,375);
cout<<"塞西莉亚 塞西莉亚"<<endl;
Beep(do2,187.5);
Beep(re2,375);
Beep(do2,375);
Beep(la1,562.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(la1,375);
Beep(do1,750);
cout<<"盛开在起风的地方"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,562.5);
cout<<"沐浴九月的骄阳"<<endl;
Beep(fa1,187.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(fa1,375);
Beep(so1,375);
Beep(la1,375);
Beep(so1,750);
Sleep(375);
cout<<"偷偷放在你的身上"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,562.5);
cout<<"替我传达 我不敢说的话"<<endl;
Beep(do2,187.5);
Beep(re2,375);
Beep(do2,375);
Beep(la1,562.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(la1,375);
Beep(do1,375);
Beep(mi1,375);
Beep(re1,750);
cout<<"在流浪的路上"<<endl;
Beep(la1,375);
Beep(do1,375);
Beep(re1,750);
Beep(la1,375);
Beep(fa1,375);
Beep(so1,750);
Sleep(187.5);
cout<<"你是我唯一牵挂"<<endl;
Beep(mi1,187.5);
Beep(re1,187.5);
Beep(mi1,375);
Beep(re1,187.5);
Beep(mi1,375);
Beep(fa1,375);
Beep(fa1,937.5);
Sleep(3375);
cout<<"你是我唯一牵挂"<<endl;
Beep(mi1,187.5);
Beep(re1,187.5);
Beep(mi1,375);
Beep(re1,187.5);
Beep(mi1,375);
Beep(fa1,375);
Beep(fa1,937.5);
Sleep(3000);
cout<<"所以别让我担心啊"<<endl;
Beep(mi1,187.5);
Beep(re1,187.5);
Beep(re1,187.5);
Beep(mi1,375);
Beep(re1,187.5);
Beep(mi1,375);
Beep(fa1,375);
Beep(fa1,937.5);
Sleep(10687.5);
cout<<"抱歉我 那么懦弱 总是爱躲在你身后"<<endl;
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(fa1,562.5);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(fa1,562.5);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(so1,375);
Beep(fa1,750);
Beep(do1,375);
Beep(do1,1500);
cout<<"有太多 聒噪笨拙 多谢你的包容"<<endl;
Beep(do1,187.5);
Beep(re1,187.5);
Beep(fa1,562.5);
Beep(fa1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,562.5);
Beep(la1,187.5);
Beep(re2,187.5);
Beep(do2,187.5);
Beep(la1,375);
Beep(so1,375);
Beep(fa1,987.5);
cout<<"啊~认识你这么久"<<endl;
Beep(la1,562.5);
Beep(la1,187.5);
Beep(la1,187.5);
Beep(jsi1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(fa1,562.5);
cout<<"我学会了 一点点勇敢和温柔"<<endl;
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(fa1,562.5);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(so1,375);
Beep(fa1,750);
Beep(do1,375);
Beep(do1,562.5);
Beep(re1,187.5);
Beep(fa1,562.5);
cout<<"拉勾勾 关键时候"<<endl;
Beep(do1,187.5);
Beep(re1,187.5);
Beep(fa1,562.5);
Beep(fa1,187.5);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,562.5);
cout<<"我不会再退缩"<<endl;
Beep(la1,187.5);
Beep(re2,187.5);
Beep(do2,187.5);
Beep(la1,375);
Beep(so1,375);
Beep(fa1,1687.5);
Sleep(1875);
cout<<"星空也 猜不出 你要去的方向"<<endl;
Beep(re2,187.5);
Beep(do2,375);
Beep(do1,937.5);
Beep(fa1,187.5);
Beep(la1,375);
Beep(la1,1312.5);
Beep(fa1,187.5);
Beep(mi1,562.5);
Beep(re1,187.5);
Beep(mi1,562.5);
Beep(fa1,187.5);
Beep(fa1,562.5);
Sleep(187.5);
cout<<"我许愿 能一直尝 你做的甜甜酿"<<endl;
Beep(re2,187.5);
Beep(do2,375);
Beep(do1,750);
Beep(do1,187.5);
Beep(fa1,187.5);
Beep(la1,375);
Beep(la1,1312.5);
Beep(do1,187.5);
Beep(re1,562.5);
Beep(do1,187.5);
Beep(re1,562.5);
Beep(do1,187.5);
Beep(do1,562.5);
Sleep(3000);
cout<<"其实你也会累吧"<<endl;
Beep(do1,375);
Beep(do1,562.5);
Beep(do1,187.5);
Beep(re1,375);
Beep(do1,375);
Beep(la0,375);
Beep(fa0,375);
Sleep(3375);
cout<<"也有会痛的伤"<<endl;
Beep(do1,375);
Beep(do1,187.5);
Beep(la0,187.5);
Beep(do1,375);
Beep(re1,375);
Beep(do1,375);
Sleep(562.5);
cout<<"摘一朵纯白色的花"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,375);
cout<<"塞西莉亚 塞西莉亚"<<endl;
Beep(do2,187.5);
Beep(re2,375);
Beep(do2,375);
Beep(la1,562.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(la1,375);
Beep(do1,750);
cout<<"没有人见过它枯黄"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,562.5);
cout<<"就像你纯粹坚强"<<endl;
Beep(fa1,187.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(fa1,375);
Beep(so1,375);
Beep(la1,375);
Beep(so1,750);
Sleep(375);
cout<<"我回看那座摘星崖"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,562.5);
cout<<"当初眺望 的碧海和山峦"<<endl;
Beep(do2,187.5);
Beep(re2,375);
Beep(do2,375);
Beep(la1,562.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(la1,375);
Beep(do1,375);
Beep(mi1,375);
Beep(re1,375);
cout<<"你的答案 还在远方"<<endl;
Beep(re1,187.5);
Beep(la1,375);
Beep(do1,375);
Beep(re1,562.5);
Beep(re1,187.5);
Beep(la1,375);
Beep(fa1,375);
Beep(do2,750);
Sleep(750);
cout<<"抵达之前"<<endl;
Beep(la1,375);
Beep(la1,375);
Beep(la1,375);
Beep(fa1,375);
cout<<"送给你纯白色的花"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,375);
cout<<"塞西莉亚 塞西莉亚"<<endl;
Beep(do2,187.5);
Beep(re2,375);
Beep(do2,375);
Beep(la1,562.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(la1,375);
Beep(do1,750);
cout<<"盛开在起风的地方"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,562.5);
cout<<"沐浴九月的骄阳"<<endl;
Beep(fa1,187.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(fa1,375);
Beep(so1,375);
Beep(la1,375);
Beep(so1,750);
Sleep(375);
cout<<"偷偷放在你的身上"<<endl;
Beep(la1,562.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(fa1,187.5);
Beep(so1,187.5);
Beep(la1,375);
Beep(do2,375);
Beep(la1,562.5);
cout<<"替我传达 我不敢说的话"<<endl;
Beep(do2,187.5);
Beep(re2,375);
Beep(do2,375);
Beep(la1,562.5);
Beep(la1,187.5);
Beep(so1,375);
Beep(la1,375);
Beep(do1,375);
Beep(mi1,375);
Beep(re1,750);
cout<<"在流浪的路上"<<endl;
Beep(la1,375);
Beep(do1,375);
Beep(re1,750);
Beep(la1,375);
Beep(fa1,375);
Beep(so1,750);
Sleep(187.5);
cout<<"你是我唯一牵挂"<<endl;
Beep(mi1,187.5);
Beep(re1,187.5);
Beep(mi1,375);
Beep(re1,187.5);
Beep(mi1,375);
Beep(fa1,375);
Beep(fa1,937.5);
Sleep(3375);
cout<<"无尽海上的星光"<<endl;
Beep(mi1,187.5);
Beep(re1,187.5);
Beep(mi1,375);
Beep(re1,187.5);
Beep(mi1,375);
Beep(fa1,375);
Beep(fa1,937.5);
Sleep(3000);
cout<<"所以别让我担心啊"<<endl;
Beep(mi1,187.5);
Beep(re1,187.5);
Beep(re1,187.5);
Beep(mi1,375);
Beep(re1,187.5);
Beep(mi1,375);
Beep(fa1,375);
Beep(fa1,937.5);
Sleep(9375);
cout<<"所以别让我担心啊"<<endl;
Beep(mi1,125);
Beep(re1,125);
Beep(re1,125);
Beep(mi1,375);
Beep(re1,187.5);
Beep(mi1,375);
Beep(fa1,375);
Beep(fa1,937.5);
return 0;
}
文件: 别让我担心.rar - 蓝奏云 (lanzoub.com)
视频版:【C++】爆肝527行只为这首《别让我担心》!_哔哩哔哩_bilibili
接下来正式开始教学
- 普普通通的头文件&框架
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int main()
{
return 0;
}
不要忘记#include <windows.h>
否则Beep函数和Sleep函数都会报错
- 音高赋值
在Beep函数中,音高的单位是赫兹
但是几乎每个音的音高(单位用赫兹)都是浮点数,你总不能每次打一长串浮点数吧
所以有了如下的改进方法
h[360]=440.0;
int cnt=110;
for(int i=0;i<=128;i++){
if(cnt/10%10==8){
cnt+=30;
continue;
}
if(cnt%100==35||cnt%100==75){
cnt+=5;
continue;
}
h[cnt]=(h[360]/32.0)*pow(2,(i-9.0)/12.0);
//cout<<cnt<<" "<<h[cnt]<<"\n";
cnt+=5;
}
i的界限可以随便定(当然别超过int类型的范围)
cnt用来遍历h数组的下标
h数组的下标是音高
个位表示是否为半音
对,就是你(不太)经常看到的‘#’号(划掉)
但是,3-mi和7-si没有半音,所以就cnt+=5然后continue掉
十位分别表示do re mi fa sol la si,然而我们用的是十进制,所以当便历到80时cnt+=30再continue掉就好了
百位:一般的曲子最高音最低音至少会差一个八度,这个百位用来记录八度,具体记录第几个八度没有硬性要求
其他:h[360]=440.0 这是整数,方便计算
h[cnt]=(h[360]/32.0)*pow(2,(i-9.0)/12.0); 频率计算公式,这个与乐理有关,在C++论坛上就不多说了哈(可以问度娘)
注释部分可用于调试,可对照下面这幅图
- 重点-演奏部分
Beep(114,514);
Beep函数,后接两个参数,第一个表示音高,单位是赫兹,后一个表示音长,单位是毫秒,在代码中充当音符
上述代码运行时,将会发出一个高114赫兹,长514毫秒的音
Sleep(1919.810);
Sleep函数,后接一个参数,表示停止的时长,单位是毫秒,在代码中充当休止符
上述代码运行时,将会停止1919.810毫秒
懂得这两个函数后,你就可以找到简谱/五线谱,一个一个对着音符/休止符写代码了(当然具体音符/休止符的时长计算我不教,因为这是C++论坛啊喂)
还有,一个四分音符的音长=60/速度*1000
并不具体的代码:
Beep(h[310],a);
Beep(h[320],a);
Beep(h[330],a);
Beep(h[340],a);
Beep(h[350],a);
Beep(h[360],a);
Beep(h[370],a);
Beep(h[410],a);
Sleep(a);
Beep(h[410],a);
Beep(h[370],a);
Beep(h[360],a);
Beep(h[350],a);
Beep(h[340],a);
Beep(h[330],a);
Beep(h[320],a);
Beep(h[310],a*2);
当然如果你想做一整首曲子的话肯定有优化方法,但只适用于伴奏或纯音乐
一般一整首音乐可分为A1段 B1段……
然后A1段再现了!
通俗点说,就是写几个函数,有重复出现的乐段就调用
框架就像这样:
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
void A1(){
//...
}
void B1(){
//...
}
int main()
{
A1();
B1();
return 0;
}
4.细节增加
比如在演奏前输出作者等信息(建议用Sleep函数等待一两秒)
和输出每一句的歌词
如果你写了下面两行代码:
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
关流可能会导致歌词输出与乐句演奏不同步,如果出现上述情况要删掉
以上。
(话说C++小游戏之类的帖子都没被封,我这种总不至于关闭吧qwq)