Advertisement
yukisaw

(C++) murka.mp3 xD

Dec 6th, 2015
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.48 KB | None | 0 0
  1. #include <windows.h>
  2. #include <string.h>
  3.  
  4. #define _AUTO_FREQ(_NAME, _FREQ, _A1, _A2, _A3, _A4, _A5, _A6, _A7, _A8) \
  5. if (*(_NAME + 1) && *(_NAME + 1) > '0' && *(_NAME + 1) < '9') \
  6. { \
  7. ++_NAME; switch(*_NAME) { \
  8.     case '1': _FREQ = _A1; break; \
  9.     case '2': _FREQ = _A2; break; \
  10.     case '3': _FREQ = _A3; break; \
  11.     case '4': _FREQ = _A4; break; \
  12.     case '5': _FREQ = _A5; break; \
  13.     case '6': _FREQ = _A6; break; \
  14.     case '7': _FREQ = _A7; break; \
  15.     case '8': _FREQ = _A8; break; \
  16.     }\
  17.  \
  18. } else _FREQ = _A4;
  19.  
  20. DWORD getDuration(const char*& str)
  21. {
  22.     ++str;
  23.     const char* next = strchr(str, ')');
  24.     if (!next)
  25.     {
  26.         ++str;
  27.         return 200;
  28.     }
  29.     auto size = next - str;
  30.     char* inner = new char[size+1];
  31.     memcpy(inner, str, size+1);
  32.     inner[size] = 0;
  33.     DWORD result = atoi(inner) * 50;
  34.     str = next;
  35.     delete[] inner;
  36.     return result;
  37. }
  38.  
  39.  
  40. void noteParser(const char* format)
  41. {
  42.     const char* cur = format;
  43.     DWORD freq;
  44.     DWORD dur;
  45.     while (*cur)
  46.     {
  47.         if (!strchr("CDEFGAH ", *cur)) continue;
  48.         dur = 200;
  49.         switch (*cur)
  50.         {
  51.         case 'C':
  52.             if (*(cur + 1) == '#')
  53.             {
  54.                 ++cur;
  55.                 _AUTO_FREQ(cur, freq, 35, 69, 139, 277, 554, 1109, 2217, 4435);
  56.             }
  57.             else if (*(cur + 1) == 'b')
  58.             {
  59.                 ++cur;
  60.                 _AUTO_FREQ(cur, freq, 31, 62, 123, 247, 494, 988, 1975, 3951);
  61.             }
  62.             else
  63.             {
  64.                 _AUTO_FREQ(cur, freq, 33, 65, 131, 262, 523, 1046, 2093, 4186);
  65.             }
  66.             if (*(cur + 1) == '(')
  67.             {
  68.                 ++cur;
  69.                 dur = getDuration(cur);
  70.             }
  71.             break;
  72.         case 'D':
  73.             if (*(cur + 1) == '#')
  74.             {
  75.                 ++cur;
  76.                 _AUTO_FREQ(cur, freq, 39, 78, 156, 311, 622, 1244, 2489, 4978);
  77.             }
  78.             else if (*(cur + 1) == 'b')
  79.             {
  80.                 ++cur;
  81.                 _AUTO_FREQ(cur, freq, 35, 69, 139, 277, 554, 1109, 2217, 4435);
  82.             }
  83.             else
  84.             {
  85.                 _AUTO_FREQ(cur, freq, 37, 74, 148, 294, 587, 1175, 2349, 4698);
  86.             }
  87.             if (*(cur + 1) == '(')
  88.             {
  89.                 ++cur;
  90.                 dur = getDuration(cur);
  91.             }
  92.             break;
  93.         case 'E':
  94.             if (*(cur + 1) == '#')
  95.             {
  96.                 ++cur;
  97.                 _AUTO_FREQ(cur, freq, 44, 87, 175, 349, 698, 1397, 2794, 22);
  98.             }
  99.             else if (*(cur + 1) == 'b')
  100.             {
  101.                 ++cur;
  102.                 _AUTO_FREQ(cur, freq, 39, 78, 156, 311, 622, 1244, 2489, 4978);
  103.             }
  104.             else
  105.             {
  106.                 _AUTO_FREQ(cur, freq, 41, 82, 165, 330, 660, 1318, 2637, 5274);
  107.             }
  108.             if (*(cur + 1) == '(')
  109.             {
  110.                 ++cur;
  111.                 dur = getDuration(cur);
  112.             }
  113.             break;
  114.         case 'F':
  115.             if (*(cur + 1) == '#')
  116.             {
  117.                 ++cur;
  118.                 _AUTO_FREQ(cur, freq, 46, 92, 185, 370, 740, 1480, 2960, 23);
  119.             }
  120.             else if (*(cur + 1) == 'b')
  121.             {
  122.                 ++cur;
  123.                 _AUTO_FREQ(cur, freq, 41, 82, 165, 330, 659, 1318, 2637, 5274);
  124.             }
  125.             else
  126.             {
  127.                 _AUTO_FREQ(cur, freq, 44, 87, 175, 349, 698, 1397, 2740, 22);
  128.             }
  129.             if (*(cur + 1) == '(')
  130.             {
  131.                 ++cur;
  132.                 dur = getDuration(cur);
  133.             }
  134.             break;
  135.         case 'G':
  136.             if (*(cur + 1) == '#')
  137.             {
  138.                 ++cur;
  139.                 _AUTO_FREQ(cur, freq, 520, 1040, 207, 415, 831, 1661, 3332, 260);
  140.             }
  141.             else if (*(cur + 1) == 'b')
  142.             {
  143.                 ++cur;
  144.                 _AUTO_FREQ(cur, freq, 46, 92, 185, 370, 740, 1480, 2960, 23);
  145.             }
  146.             else
  147.             {
  148.                 _AUTO_FREQ(cur, freq, 49, 98, 196, 392, 784, 1568, 3136, 24);
  149.             }
  150.             if (*(cur + 1) == '(')
  151.             {
  152.                 ++cur;
  153.                 dur = getDuration(cur);
  154.             }
  155.             break;
  156.         case 'A':
  157.             if (*(cur + 1) == '#')
  158.             {
  159.                 ++cur;
  160.                 _AUTO_FREQ(cur, freq, 58, 116, 233, 466, 932, 1865, 3729, 29);
  161.             }
  162.             else if (*(cur + 1) == 'b')
  163.             {
  164.                 ++cur;
  165.                 _AUTO_FREQ(cur, freq, 49, 98, 196, 392, 784, 1568, 3136, 24);
  166.             }
  167.             else
  168.             {
  169.                 _AUTO_FREQ(cur, freq, 55, 110, 220, 440, 880, 1720, 3440, 27);
  170.             }
  171.             dur = 1;
  172.             if (*(cur + 1) == '(')
  173.             {
  174.                 ++cur;
  175.                 dur = getDuration(cur);
  176.             }
  177.             break;
  178.         case 'H':
  179.             if (*(cur + 1) == '#')
  180.             {
  181.                 ++cur;
  182.                 _AUTO_FREQ(cur, freq, 65, 131, 262, 523, 1046, 2093, 4186, 33);
  183.             }
  184.             else if (*(cur + 1) == 'b')
  185.             {
  186.                 ++cur;
  187.                 _AUTO_FREQ(cur, freq, 58, 116, 233, 466, 932, 1865, 3729, 29);
  188.             }
  189.             else
  190.             {
  191.                 _AUTO_FREQ(cur, freq, 62, 123, 247, 494, 988, 1975, 3951, 31);
  192.             }
  193.             if (*(cur + 1) == '(')
  194.             {
  195.                 ++cur;
  196.                 dur = getDuration(cur);
  197.             }
  198.             break;
  199.         case ' ':
  200.             if (*(cur + 1) == '(')
  201.             {
  202.                 ++cur;
  203.                 dur = getDuration(cur);
  204.             }
  205.             Sleep(dur);
  206.             ++cur;
  207.             continue;
  208.         }
  209.         ++cur;
  210.         Beep(freq, dur);
  211.     }
  212. }
  213.  
  214. int main(int argc, char* argv[])
  215. {  
  216.     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)"
  217.         "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)");
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement