Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: [C++] Lecture d'un flux audio Dim 17 Mai 2015 - 18:17 | |
| Salut, Je cherche à lire proprement un flux audio. A l'heure actuelle mon soft reçoit l'audio par paquets de ~48ms qu'il décode (no soucis) et lit à la suite. Le problème est que lors de la lecture, il y a un petit "jeu" entre deux séries de samples que je ne parviens pas à réduire, et qui est perceptible à l'oreille, en plus de décaller petit à petit le flux. Donc, comment est-il possible de lire un flux audio en c++ ? Je ne parle pas de l'aspect réseau mais de comment lire des samples qui arrivent régulièrement, à la suite. Merci de votre aide |
|
arthuro Utilisateur confirmé: Rang ****
Messages : 1483 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: [C++] Lecture d'un flux audio Dim 17 Mai 2015 - 20:12 | |
| Je ne sais pas. Par contre, tu peux sûrement te baser sur la classe abstraite SoundStream. Sûrement que le code source de la SFML pourrait te donner ta réponse. Cette classe possède une implémentation pour un flux venant d'un fichier du disque dur. : MusicIl n'y a pas d'implémentation pour un flux réseau. Il donne un petit exemple pour faire une spécialisation custom : - Spoiler:
- Code:
-
class CustomStream : public sf::SoundStream { public: bool open(const std::string& location) { // Open the source and get audio settings ... unsigned int channelCount = ...; unsigned int sampleRate = ...; // Initialize the stream -- important! initialize(channelCount, sampleRate); } private: virtual bool onGetData(Chunk& data) { // Fill the chunk with audio data from the stream source // (note: must not be empty if you want to continue playing) data.samples = ...; data.sampleCount = ...; // Return true to continue playing return true; } virtual void onSeek(Uint32 timeOffset) { // Change the current position in the stream source ... } } // Usage CustomStream stream; stream.open("path/to/stream"); stream.play();
J'espère que cela pourra t'aider. Si tu en sais plus sur l'origine de ce "jeu", n'hésite pas à en parler ici. Cela pourrait m'être utile dans le futur. |
|
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [C++] Lecture d'un flux audio Dim 17 Mai 2015 - 22:23 | |
| Je crois qu'il utilise déjà ça vu qu'il est sous la SFML.
Mais le soucis ouai c'est que si y a un petit lag a un moment, la queue va continuer de se remplir petit a petit et va y avoir accumulation du lag...
Je pense que le plus efficace est juste de carrément supprimer certains paquets de la queue qui va être envoyée a openal, si le lag est trop important. Ou encore d’accélérer vite fais l'audio jusqu’à que ça rattrape le lag (mais le rendu risque d'être un peu spécial :p). |
|
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: [C++] Lecture d'un flux audio Dim 17 Mai 2015 - 22:32 | |
| Non effectivement j'ignorais l'existence de cette classe, alors que j'utilise la SFML A l'heure actuelle je charge les sounds de 48ms en mémoire, et je les lis à la suite. Je suppose que le jeu est dû au fait que chaque lecture d'un sound implique la création d'un thread, ce qui est coûteux en ressources. Du coup je vais essayer cette méthode |
|
arthuro Utilisateur confirmé: Rang ****
Messages : 1483 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: [C++] Lecture d'un flux audio Dim 17 Mai 2015 - 23:08 | |
| - Mass a écrit:
- Non effectivement j'ignorais l'existence de cette classe, alors que j'utilise la SFML
, je n'aurais jamais pensé être aussi pertinent dans ma réponse. Je ne savais pas que t'utilisais la SFML. C'est parfait alors, je pense que ton problème va très vite être réglé. |
|
Contenu sponsorisé
| Sujet: Re: [C++] Lecture d'un flux audio | |
| |
|