Я создаю пианино на клавиатуре компьютера, и мне нужно одновременно воспроизводить аудио в формате .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. Я пытался использовать потоки, но звук издается только после окончания другого звука.