最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

同學整活系列: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ū)的樂器不多了的評論 (共 條)

分享到微博請遵守國家法律
微博| 宁海县| 平原县| 北票市| 西畴县| 宜阳县| 许昌市| 昌邑市| 黎川县| 滕州市| 响水县| 绥滨县| 垣曲县| 山东省| 衡东县| 武清区| 新邵县| 鸡东县| 全椒县| 昌乐县| 绥棱县| 会泽县| 石景山区| 辽阳县| 晋宁县| 临夏县| 台安县| 司法| 成都市| 通海县| 汕头市| 青川县| 通化县| 禄丰县| 上蔡县| 云和县| 南丹县| 贵溪市| 广饶县| 永宁县| 赣榆县|