SFML - Mettre en pause un enregistrement audio
Résolu
MemeTech
Messages postés
90
Statut
Membre
-
MemeTech Messages postés 90 Statut Membre -
MemeTech Messages postés 90 Statut Membre -
Bonjour !
Tout est dans le titre, je souhaite proposer à l'utilisateur de mon enregistreur audio de mettre en pause l'enregistrement et de le reprendre quand il le souhaite.
La doc ne semble pas proposer de fonction pause () à la classe sf::SoundBufferRecorder, peut être il y a-t-il une autre solution ?
Merci d'avance !
Tout est dans le titre, je souhaite proposer à l'utilisateur de mon enregistreur audio de mettre en pause l'enregistrement et de le reprendre quand il le souhaite.
La doc ne semble pas proposer de fonction pause () à la classe sf::SoundBufferRecorder, peut être il y a-t-il une autre solution ?
Merci d'avance !
4 réponses
-
'lut,
la pause n'est pas souvent une fonctionnalité dispo sur les APIs d'enregistrement, donc rien d'exceptionnel de la part de la SFML.
Une solution (parmi d'autres) consiste à arrêter l'enregistrement (stop()
) quand on veut mettre en pause, et garder les buffers résultat quelque part (mémoire, disque, ...) tant qu'on arrête pas complètement l'enregistrement. Quand on a fini, on prend les buffers et les combine (en sortant les données des buffers avecSoundBuffer::getSamples
, les copiant dans un conteneur tel questd::vector<Int16>
, et les rechargeant avecSoundBuffer::loadFromSamples
).
Sinon j'ai rapidement regardé le code des classes d'enregistrement de la SFML et, bien que pas testé, il me semble que l'on peut faire start/stop plusieurs fois sur un mêmeSoundBufferRecorder
, permettant de mettre en pause. Ce n'est documenté nulle part, ceci dit, donc à vérifier. -
Merci pour m'avoir aidé si vite !
Pour mettre en pause avec start () / stop (), j ai déjà essayé, ça ne fonctionne pas.
En revanche, j'imagine que les std::vector doivent fonctionner, mais je ne sais pas comment faire, je ne connais pas le fonctionnement de ces échantillons audio.
Pourriez-vous m'éclairer à ce sujet ? -
Up !
Voilà plusieurs jours que je galère avec ces tableaux de samples et je commence à sécher...
J'ai fait une fonction pause () appelée quand l'utilisateur veut suspendre son enregistrement qui ajoute au un tableau d'échantillons l'enregistrement juste arrêté.
Souci, Code::Blocks me dit :
error: invalid conversion from 'const Int16*' {aka 'const short int*'} to 'sf::Int16*' {aka 'short int*'} [-fpermissive]|
Voilà un petit extrait de mon code :
void MRecorder::pause () { sBackground.setTexture (tPaused); // Change l'image de fond de l'appli recorder.stop (); // Arrête l'enregistreur (logique... :-D) Int16* nextRecording = recorder.getBuffer ().getSamples (); // Initialise le buffer unsigned long int const MAX_INDEX = recorder.getBuffer ().getSampleCount (); // Le nombre de samples dans le dernier enregistrement for (unsigned int i = 0 ; i != MAX_INDEX ; i++) // Boucle qui ajoute à recording le dernier enregistrement recording.push_back (nextRecording[i]); }
Merci pour votre aide ! -
En fait, il suffisait de déclarer nextRecording en const, je ne comprend pas bien pourquoi, mais ça a fonctionné.
Donc, ça y est, mon enregistreur audio peut se mettre en pause !
Sujet résolu, merci encore ElementW !