五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

同學整活系列:C++版《青花瓷》留給音樂區(qū)的樂器不多了

2023-08-16 16:17 作者:桃某桃不卷  | 我要投稿

#pragma once

#ifndef _PMUSIC_

#define _PMUSIC_

#endif


#include <windows.h>

#include <math.h>

#include <vector>

#include <string>

#include <stdio.h>

#include <fstream>


struct note

{

???float scale;

???float time;

};


class music

{

???public:

??????std::vector <note> score;


??????music()

??????{

??????}


??????music(const std::vector <note> && base)

??????{

?????????this->score = base;

??????}


??????void clear()

??????{

?????????this->score.clear();

??????}


??????void read(const float && pitch, const float && unit, std::string str)

??????{

?????????size_t cnt = 0;

?????????float base = 0, scale = 0;

?????????bool rest = false;


?????????while(true)

?????????{

????????????const size_t && length = str.size();

????????????size_t && begin = ~0ul, end = length;


????????????for(size_t i = 0; i ^ length; ++ i)

???????????????if(!isspace(str[i]))

???????????????{

??????????????????begin = i;

??????????????????break;

???????????????}


????????????if(begin == ~0ul)

???????????????break;


????????????for(size_t i = begin; i ^ length; ++ i)

???????????????if(isspace(str[i]))

???????????????{

??????????????????end = i;

??????????????????break;

???????????????}?????????


????????????if(cnt % 3 == 0)

????????????{

???????????????base = stof(str.substr(begin, end - begin));

????????????}

????????????else if(cnt % 3 == 1)

????????????{

???????????????const std::string && temp = str.substr(begin, end - begin);


???????????????if(temp == "do")

??????????????????scale = 0.0f;

???????????????else if(temp == "do#")

??????????????????scale = 1.0f;

???????????????else if(temp == "re")

??????????????????scale = 2.0f;

???????????????else if(temp == "re#")

??????????????????scale = 3.0f;

???????????????else if(temp == "mi")

??????????????????scale = 4.0f;

???????????????else if(temp == "fa")

??????????????????scale = 5.0f;

???????????????else if(temp == "fa#")

??????????????????scale = 6.0f;

???????????????else if(temp == "sol" || temp == "so")

??????????????????scale = 7.0f;

???????????????else if(temp == "sol#" || temp == "so#")

??????????????????scale = 8.0f;

???????????????else if(temp == "la")

??????????????????scale = 9.0f;

???????????????else if(temp == "la#")

??????????????????scale = 10.0f;

???????????????else if(temp == "si" || temp == "ti")

??????????????????scale = 11.0f;

???????????????else if(temp == "rest")

??????????????????rest = true;

???????????????else

??????????????????scale = stof(temp);

????????????}

????????????else

????????????{????????????

???????????????if(rest)

??????????????????this->score.push_back({0, unit * stof(str.substr(begin, end - begin))});

???????????????else

??????????????????this->score.push_back({base * 12.0f + scale - 9.0f + pitch, unit * stof(str.substr(begin, end - begin))});


???????????????base = 0;

???????????????scale = 0;

???????????????rest = false;

????????????}


????????????++ cnt;

????????????str.erase(0, end);

?????????}

??????}


??????void read(const float && pitch, const float && unit, std::ifstream & stream)

??????{

?????????std::string str;


?????????size_t cnt = 0;

?????????float base = 0, scale = 0;

?????????bool rest = false;


?????????while(true)

?????????{

????????????stream >> str;??????


????????????if(stream.eof() || str == "end")

???????????????break;


????????????if(cnt % 3 == 0)

????????????{

???????????????base = stof(str);

????????????}

????????????else if(cnt % 3 == 1)

????????????{

???????????????if(str == "do")

??????????????????scale = 0.0f;

???????????????else if(str == "do#")

??????????????????scale = 1.0f;

???????????????else if(str == "re")

??????????????????scale = 2.0f;

???????????????else if(str == "re#")

??????????????????scale = 3.0f;

???????????????else if(str == "mi")

??????????????????scale = 4.0f;

???????????????else if(str == "fa")

??????????????????scale = 5.0f;

???????????????else if(str == "fa#")

??????????????????scale = 6.0f;

???????????????else if(str == "sol" || str == "so")

??????????????????scale = 7.0f;

???????????????else if(str == "sol#" || str == "so#")

??????????????????scale = 8.0f;

???????????????else if(str == "la")

??????????????????scale = 9.0f;

???????????????else if(str == "la#")

??????????????????scale = 10.0f;

???????????????else if(str == "si" || str == "ti")

??????????????????scale = 11.0f;

???????????????else if(str == "rest")

??????????????????rest = true;

???????????????else

??????????????????scale = stof(str);????????????

????????????}

????????????else

????????????{

???????????????if(rest)

??????????????????this->score.push_back({0, unit * stof(str)});

???????????????else

??????????????????this->score.push_back({frequency(base * 12.0f + scale - 9.0f + pitch), unit * stof(str)});


???????????????base = 0;

???????????????scale = 0;

???????????????rest = false;???????????????

????????????}


????????????++ cnt;

?????????}

??????}


??????void run()

??????{

?????????for(const note & i : this->score)

?????????{

????????????//printf("frequency : %f time : %f\n", frequency(i.scale), i.time);


????????????Beep(i.scale, i.time);

?????????}

??????}


???protected:

??????inline static float frequency(const float & scale)

??????{

?????????return 27.5f * powf(2.0f, (scale + 48.0f) / 12.0f);

??????}

};

同學整活系列:C++版《青花瓷》留給音樂區(qū)的樂器不多了的評論 (共 條)

分享到微博請遵守國家法律
泌阳县| 西城区| 安平县| 茶陵县| 平和县| 九龙坡区| 海淀区| 秦安县| 东乌珠穆沁旗| 新营市| 平邑县| 江达县| 鄂托克旗| 长葛市| 雷山县| 互助| 铜山县| 廊坊市| 杨浦区| 兴安县| 广河县| 康保县| 海伦市| 禹州市| 昌黎县| 克什克腾旗| 湛江市| 广安市| 兴仁县| 噶尔县| 太白县| 阿克苏市| 石景山区| 隆化县| 临汾市| 泽州县| 临漳县| 天水市| 澎湖县| 且末县| 普格县|