Другие языки программирования и технологии

дополнение кода c++ sfml

Здравствуйте, кто понимает в sfml audio
Данный код записывает звук с микрофона и воспроизводит на 1 кнопку и зацикливает с помощью (sound.setLoop(true))
Необходимо сделать так, чтобы несколько звуков записывались с разных кнопок, сохранялись и на повторное нажатие останавливали этот звук
Заранее спасибо

#include
#include
#include
#include
int main()
{

sf::SoundBufferRecorder recorder;
sf::SoundBuffer buffer;
sf::SoundBuffer buffer2;
sf::Sound sound;

char ans;
while (!sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key(1)))
{
sf::Clock clock;
clock.restart();
recorder.start();
while (sf::Keyboard::isKeyPressed(sf::Keyboard::Key(1)))
{
std::cout << clock.getElapsedTime().asMilliseconds() << std::endl;
}
recorder.stop();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key(0)))
{
sf::Clock clock;
clock.restart();
recorder.start();
while (sf::Keyboard::isKeyPressed(sf::Keyboard::Key(0)))
{
std::cout << clock.getElapsedTime().asMilliseconds() << std::endl;
}
recorder.stop();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
{
sf::Clock clock;
clock.restart();
recorder.start();
while (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
{
std::cout << clock.getElapsedTime().asMilliseconds() << std::endl;
}
recorder.stop();
}

}

buffer = recorder.getBuffer();
sound.setBuffer(buffer);

sound.play();
if (sound.getStatus() == (sf::Sound::Status::Playing))
{
sound.setLoop(true);
}

while (sound.getStatus() == sf::Sound::Status::Playing) {}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
{
sound.getLoop();
}

system("pause");
return 0;
}
Набросал. Есть что подправить и сделать лучше в т. ч. статусы, но как пример более чем.
Запись/проигрывание 1-9, остановка записи - пробел.

#include < SFML/Graphics.hpp >
#include < SFML/Audio.hpp >

//#include < iostream >
#include < string >

int main() {
const std::string status[] = {
"Idle. Press a number to play/record...",
" : recording. Press Space to stop..."
};

sf::Font font;
//Linux path for font. Try to DejaVuSans.ttf/Ariial.ttf and etc. without path
if (!font.loadFromFile("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf")) {
//std::cerr << "Error loading font" << std::endl;
return 1;
}

sf::SoundBufferRecorder recorder;
if (!recorder.isAvailable) {
//std::cerr << "No capture device detected" << std::endl;
return 2;
}

sf::Text statusText;
statusText.setString(status[0]);
statusText.setFont(font);
statusText.setCharacterSize(24);

sf::SoundBuffer buffer[9];
sf::Sound sound;

sf::RenderWindow window(sf::VideoMode(1024, 768), "SFML works!");

size_t currentBuffer = 0;
bool isRecording = false;

while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
switch(event.type) {
case sf::Event::Closed:
window.close();
break;
//exit if Escape pressed
case sf::Event::KeyPressed:
if (event.key.code == sf::Keyboard::Escape && !isRecording) {
window.close();
break;
}
if (event.key.code == sf::Keyboard::Space && isRecording) {
recorder.stop();
buffer[currentBuffer] = recorder.getBuffer();
isRecording = false;
statusText.setString(status[0]);
break;
}
if (event.key.code >= sf::Keyboard::Num1 && event.key.code <= sf::Keyboard::Num9) {
if (!isRecording) {
//Warning! Key code to index. Can be dangerous on some systems =)
currentBuffer = event.key.code - sf::Keyboard::Num0;
if (buffer[currentBuffer].getDuration() == sf::Time::Zero) {
sound.stop();
statusText.setString(std::to_string(currentBuffer) + status[1]);
recorder.start();
isRecording = true;
} else {
sound.setBuffer(buffer[currentBuffer]);
sound.play();
}
}
}
}
}

window.clear();
window.draw(statusText);
window.display();
}

return 0;
}

---
SFML тут вообще по сути не при чем. Речь идет об обычной организации массивов и организации взаимодействия..
Смотрите - Вы умеете опрашивать клавиши, умеете записывать звук, но не умеете организованно хранить информацию и работать с ней.
Может всё-таки стоило прежде чем лезть в "движки" научиться работать нормально стандартными "гаечными ключами", без которых ну никак?

Просто Вот сейчас подсказал, а дальше? Шаг вправо-влево от примера из Интерент и опять тупик?
Ни в коем разе не наезд =) У каждого свой стиль изучения.
Виталий Приймаков
Виталий Приймаков
84 764
Лучший ответ
Вася Кулик Спасибо, учту замечания!