Advertisement
Neveles

© 2020 Neveles. All rights reserved.

May 22nd, 2020
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.13 KB | None | 0 0
  1. #include <conio.h>
  2. #include <windows.h>
  3. #include <iostream>
  4. #include "inc\fmod.hpp"
  5. #include "inc\fmod.h"
  6. #include "inc\fmod_errors.h"
  7.  
  8. #pragma comment(lib, "fmodex_vc.lib")
  9.  
  10. void ERRCHECK(FMOD_RESULT result)
  11. {
  12.   if (result != FMOD_OK)
  13.   {
  14.     printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result));
  15.     exit(-1);
  16.   }
  17. }
  18.  
  19. int main()
  20. {
  21.   setlocale(LC_ALL, "rus");
  22.  
  23.   // Создаём главный системный объект
  24.   FMOD::System *system = nullptr;
  25.  
  26.   FMOD_RESULT result = FMOD::System_Create(&system);
  27.   ERRCHECK(result);
  28.  
  29.   result = system->init(16, FMOD_INIT_NORMAL, 0);
  30.   ERRCHECK(result);
  31.  
  32.   FMOD::Sound *sound = nullptr; // Звук
  33.   result = system->createStream("Кино - Кончится лето.mp3", FMOD_3D | FMOD_LOOP_OFF, 0, &sound); // Создаём звук с параметрами 3D звучания без зацикливания
  34.   ERRCHECK(result);
  35.  
  36.   std::cout << "Playing at 10% volume" << '\n';
  37.  
  38.   // --------------------- Начинаем проигрывание
  39.   FMOD::Channel *channel = nullptr; // Звуковой канал
  40.   result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel); // Проигрываем звук (направляем его в канал)
  41.   channel->setVolume(0.1f);
  42.  
  43.   // --------------------- Меняем громкость
  44.   for (int i = 2; i <= 10; i++)
  45.   {
  46.     _getch();
  47.     channel->setVolume(0.1f * i);
  48.     std::cout << "Volume increased to " << i << "0%" << '\n';
  49.   }
  50.   std::cout << "\n";
  51.   for (int i = 9; i >= 3; i--)
  52.   {
  53.     _getch();
  54.     channel->setVolume(0.1f * i);
  55.     std::cout << "Volume decreased to " << i << "0%" << '\n';
  56.   }
  57.  
  58.   // --------------------- Пауза/проигрывание
  59.   std::cout << "\nPress any key to pause...\n";
  60.   _getch();
  61.  
  62.   channel->setPaused(true);
  63.   ERRCHECK(result);
  64.  
  65.   std::cout << "\nPress any key to unpause...\n";
  66.   _getch();
  67.  
  68.   channel->setPaused(false);
  69.  
  70.   // --------------------- Проигрывание с 3D эффектом
  71.   std::cout << "\nPress any key to enable 3D...\n";
  72.   _getch();
  73.   channel->setVolume(10);
  74.  
  75.   // Назначаем минимальное и максимальное слышимое расстояние источника звука
  76.   result = sound->set3DMinMaxDistance(1.0f, 100.0f);
  77.   result = system->update();
  78.  
  79.   // Настраиваем параметры слушателя
  80.   result = system->set3DListenerAttributes(0, new FMOD_VECTOR{ -10.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 1.0f, 1.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 1.0f });
  81.   ERRCHECK(result);
  82.   result = system->update();
  83.  
  84.   for (int c = 0; c < 2; c++) {
  85.     int i = 0;
  86.     for (; i < 20; i++) {
  87.       Sleep(200);
  88.       result = channel->set3DAttributes(new FMOD_VECTOR{ 1.0f * -i, 0.0f, -5.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 0.0f });
  89.       ERRCHECK(result);
  90.       result = system->update();
  91.     }
  92.     for (; i > 0; i--) {
  93.       Sleep(200);
  94.       result = channel->set3DAttributes(new FMOD_VECTOR{ 1.0f * -i, 0.0f, -5.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 0.0f });
  95.       ERRCHECK(result);
  96.       result = system->update();
  97.     }
  98.     Sleep(1000);
  99.   }
  100.  
  101.   result = system->set3DListenerAttributes(0, new FMOD_VECTOR{ 0.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 1.0f, 1.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 1.0f });
  102.   ERRCHECK(result);
  103.   result = system->update();
  104.  
  105.   // --------------------- Проигрываем в одном ухе
  106.   std::cout << "\nPress any key to play music in right ear only...\n";
  107.   _getch();
  108.  
  109.   result = system->set3DListenerAttributes(0, new FMOD_VECTOR{ 20.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 1.0f, 1.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 1.0f });
  110.   ERRCHECK(result);
  111.   result = system->update();
  112.  
  113.   std::cout << "\nPress any key to play music in left ear only...\n";
  114.   _getch();
  115.  
  116.   result = system->set3DListenerAttributes(0, new FMOD_VECTOR{ -20.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 1.0f, 1.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 1.0f });
  117.   ERRCHECK(result);
  118.   result = system->update();
  119.  
  120.   // --------------------- Добавляем эффект Допплера путём увеличения скорости источника
  121.   std::cout << "\nPress any key to begin changing velocity...\n";
  122.   _getch();
  123.  
  124.   result = channel->set3DSpread(180);
  125.   ERRCHECK(result);
  126.   result = system->update();
  127.  
  128.   result = channel->set3DAttributes(new FMOD_VECTOR{ -2.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 100.0f, 0.0f, 0.0f });
  129.   ERRCHECK(result);
  130.   result = system->update();
  131.   std::cout << "\nVelocity is set to -100%...\n";
  132.  
  133.   for (int i = 9; i >= -10; i--)
  134.   {
  135.     _getch();
  136.     result = channel->set3DAttributes(new FMOD_VECTOR{ -2.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 10.0f * i, 0.0f, 0.0f });
  137.     ERRCHECK(result);
  138.     result = system->update();
  139.     std::cout << "Velocity increased to " << -i << "0%\n";
  140.   }
  141.  
  142.   std::cout << "\nPress any key to return velocity to normal...\n";
  143.   _getch();
  144.   result = channel->set3DAttributes(new FMOD_VECTOR{ -2.0f, 0.0f, 0.0f }, new FMOD_VECTOR{ 0.0f, 0.0f, 0.0f });
  145.   ERRCHECK(result);
  146.   result = system->update();
  147.  
  148.   std::cout << "\nPress any key to stop playing...";
  149.   _getch();
  150.  
  151.   return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement