Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <string.h>
- #define _AUTO_FREQ(_NAME, _FREQ, _A1, _A2, _A3, _A4, _A5, _A6, _A7, _A8) \
- if (*(_NAME + 1) && *(_NAME + 1) > '0' && *(_NAME + 1) < '9') \
- { \
- ++_NAME; switch(*_NAME) { \
- case '1': _FREQ = _A1; break; \
- case '2': _FREQ = _A2; break; \
- case '3': _FREQ = _A3; break; \
- case '4': _FREQ = _A4; break; \
- case '5': _FREQ = _A5; break; \
- case '6': _FREQ = _A6; break; \
- case '7': _FREQ = _A7; break; \
- case '8': _FREQ = _A8; break; \
- }\
- \
- } else _FREQ = _A4;
- DWORD getDuration(const char*& str)
- {
- ++str;
- const char* next = strchr(str, ')');
- if (!next)
- {
- ++str;
- return 200;
- }
- auto size = next - str;
- char* inner = new char[size+1];
- memcpy(inner, str, size+1);
- inner[size] = 0;
- DWORD result = atoi(inner) * 50;
- str = next;
- delete[] inner;
- return result;
- }
- void noteParser(const char* format)
- {
- const char* cur = format;
- DWORD freq;
- DWORD dur;
- while (*cur)
- {
- if (!strchr("CDEFGAH ", *cur)) continue;
- dur = 200;
- switch (*cur)
- {
- case 'C':
- if (*(cur + 1) == '#')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 35, 69, 139, 277, 554, 1109, 2217, 4435);
- }
- else if (*(cur + 1) == 'b')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 31, 62, 123, 247, 494, 988, 1975, 3951);
- }
- else
- {
- _AUTO_FREQ(cur, freq, 33, 65, 131, 262, 523, 1046, 2093, 4186);
- }
- if (*(cur + 1) == '(')
- {
- ++cur;
- dur = getDuration(cur);
- }
- break;
- case 'D':
- if (*(cur + 1) == '#')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 39, 78, 156, 311, 622, 1244, 2489, 4978);
- }
- else if (*(cur + 1) == 'b')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 35, 69, 139, 277, 554, 1109, 2217, 4435);
- }
- else
- {
- _AUTO_FREQ(cur, freq, 37, 74, 148, 294, 587, 1175, 2349, 4698);
- }
- if (*(cur + 1) == '(')
- {
- ++cur;
- dur = getDuration(cur);
- }
- break;
- case 'E':
- if (*(cur + 1) == '#')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 44, 87, 175, 349, 698, 1397, 2794, 22);
- }
- else if (*(cur + 1) == 'b')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 39, 78, 156, 311, 622, 1244, 2489, 4978);
- }
- else
- {
- _AUTO_FREQ(cur, freq, 41, 82, 165, 330, 660, 1318, 2637, 5274);
- }
- if (*(cur + 1) == '(')
- {
- ++cur;
- dur = getDuration(cur);
- }
- break;
- case 'F':
- if (*(cur + 1) == '#')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 46, 92, 185, 370, 740, 1480, 2960, 23);
- }
- else if (*(cur + 1) == 'b')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 41, 82, 165, 330, 659, 1318, 2637, 5274);
- }
- else
- {
- _AUTO_FREQ(cur, freq, 44, 87, 175, 349, 698, 1397, 2740, 22);
- }
- if (*(cur + 1) == '(')
- {
- ++cur;
- dur = getDuration(cur);
- }
- break;
- case 'G':
- if (*(cur + 1) == '#')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 520, 1040, 207, 415, 831, 1661, 3332, 260);
- }
- else if (*(cur + 1) == 'b')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 46, 92, 185, 370, 740, 1480, 2960, 23);
- }
- else
- {
- _AUTO_FREQ(cur, freq, 49, 98, 196, 392, 784, 1568, 3136, 24);
- }
- if (*(cur + 1) == '(')
- {
- ++cur;
- dur = getDuration(cur);
- }
- break;
- case 'A':
- if (*(cur + 1) == '#')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 58, 116, 233, 466, 932, 1865, 3729, 29);
- }
- else if (*(cur + 1) == 'b')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 49, 98, 196, 392, 784, 1568, 3136, 24);
- }
- else
- {
- _AUTO_FREQ(cur, freq, 55, 110, 220, 440, 880, 1720, 3440, 27);
- }
- dur = 1;
- if (*(cur + 1) == '(')
- {
- ++cur;
- dur = getDuration(cur);
- }
- break;
- case 'H':
- if (*(cur + 1) == '#')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 65, 131, 262, 523, 1046, 2093, 4186, 33);
- }
- else if (*(cur + 1) == 'b')
- {
- ++cur;
- _AUTO_FREQ(cur, freq, 58, 116, 233, 466, 932, 1865, 3729, 29);
- }
- else
- {
- _AUTO_FREQ(cur, freq, 62, 123, 247, 494, 988, 1975, 3951, 31);
- }
- if (*(cur + 1) == '(')
- {
- ++cur;
- dur = getDuration(cur);
- }
- break;
- case ' ':
- if (*(cur + 1) == '(')
- {
- ++cur;
- dur = getDuration(cur);
- }
- Sleep(dur);
- ++cur;
- continue;
- }
- ++cur;
- Beep(freq, dur);
- }
- }
- int main(int argc, char* argv[])
- {
- noteParser("G5(4)G5(4)Gb5(4)G5(4)G#5(4)G5(8)D#5(4)D#5(4)D5(4)D#5(4)D5(4)C5(8)C6(4)C6(4)Cb6(4)C6(4)D6(4)C6(4)Cb6(4)C6(4)D6(14)"
- "D#6(4)D6(4)C6(4)Cb6(4)D6(8)C6(8)C6(4)Hb5(4)G#5(4)G5(4)Hb5(6)G#5(8)G5(4)G5(4)Gb5(4)G5(4)G#5(4)G5(4)D5(4)D#5(6)C5(8)");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement