Bonjour,
je vais commencer par les très traditionnelles excuses pour le cas où la réponse à ma question aurait échappé à mes (longues) recherches, et dans le cas où mon message serait mal placé.
Ceci fait, venons-en au problème en lui même.
Dans le cadre d'un projet étudiant, je souhaite réaliser un programme java qui travaillera en temps réel sur des données de type son. Plus précisément, je veux recevoir une musique via le micro et, entre autres, en détecter en temps réel les notes (fréquences des notes, durée).
Je ne viens bien évidemment pas demander qu'on me fasse le programme, mais je bloque sur un gros détail :
Sachant que je ne souhaite à aucun moment enregistrer le son sous la forme d'un fichier (sauf éventuellement à la toute fin), il me faut travailler directement dessus. Il y a plusieurs algorithmes à implémenter - détection d'enveloppe, transformées de Fourier et compagnie.
Ces algorithmes prennent idéalement en entrée un tableau de type temps-fréquence.
Voici donc le problème qui me préoccupe :
Je créé une ligne (TargetDataLine, du package javax.sound.sampled) qui stocke les échantillons de son envoyés par la carte son. Pour pouvoir travailler sur ces échantillons, j'utilise la fonction read pour transférer ces données dans un tableau.
Qu'ai je dans mon tableau ? Des octets.
Mais je n'ai aucune idée de ce que représentent concrètement ces octets, et donc aucune idée de ce que je dois faire pour les manipuler. Je n'ai rien trouvé sur google...
J'aimerais donc savoir comment sont "codés" ces octets, et comment il m'est possible à partir d'eux de récupérer les informations sur l'échantillon du son - disons l'amplitude et la fréquence du son (le temps étant toujours le même, le son étant échantillonné de façon régulière à des intervalles que j'ai défini).
Merci d'avance à toute personne qui pourra me débloquer, parce que là, je ne vois vraiment pas trop quoi faire.
Partager