Простой пример воспроизведения '.wav' aud ios одновременно с alsa-lib в c ++? - PullRequest
0 голосов
/ 01 мая 2020

Я создаю пианино на клавиатуре компьютера, и мне нужно одновременно воспроизводить аудио в формате .wav.

Мне удалось сделать это идеально с помощью библиотек SFML / Audio.hpp и SDL2 / SDL_mixer.h. , но функция PlayAudio :: play () приведенного ниже кода для воспроизведения звука занимает несколько миллисекунд, однако задержка почти незаметна, но когда пианино играет на высокой скорости, я замечаю небольшую задержку, которая существует.

Пример:

#include <SFML / Audio.hpp>
#include <SDL2 / SDL_mixer.h>
#include "PlayAudio.h"

sf :: SoundBuffer buffer [10];
sf :: Sound pad [10];

void PlayAudio :: loadBank () {
  buffer [0] .loadFromFile ("src / audiosExa / a1.wav");
  pad [0] .setBuffer (buffer [0]);

  buffer [1] .loadFromFile ("src / audiosExa / a2.wav");
  pad [1] .setBuffer (buffer [1]);

  buffer [2] .loadFromFile ("src / audiosExa / a3.wav");
  pad [2] .setBuffer (buffer [2]);

   buffer [3] .loadFromFile ("src / audiosExa / a4.wav");
   pad [3] .setBuffer (buffer [3]);
};

void PlayAudio :: play (int i) {
  pad [i] .play ();
};

Итак, я подумал о том же процессе, но с использованием alsa-lib, который казался быстрее, но мне удалось издавать по одному звуку за раз, и я могу ' Одновременно испускают aud ios. Я пытался использовать потоки, но звук издается только после окончания другого звука.

...