[Java] Lire des donnees d'un fichier son .wav
warith
-
sepehr_gsfc Messages postés 9 Statut Membre -
sepehr_gsfc Messages postés 9 Statut Membre -
Bonjour a tous,
J'aimerai lire les donnees d'un fichier son .wav ou autre (.au, .aif ...) c'est-a-dire mettre le signal echantillonne dans un tableau de double (double []) et recueillir la frequence d'echantillonnage aussi dans un double.
Aujourd'hui, je passe par Matlab et une commande wavread et j'ecris le contenu dans un fichier .txt qui est ensuite lu par Java. Je suis a la recherche d'une methode plus directe : entre Java et le fichier sonore.
Merci d'avance
J'aimerai lire les donnees d'un fichier son .wav ou autre (.au, .aif ...) c'est-a-dire mettre le signal echantillonne dans un tableau de double (double []) et recueillir la frequence d'echantillonnage aussi dans un double.
Aujourd'hui, je passe par Matlab et une commande wavread et j'ecris le contenu dans un fichier .txt qui est ensuite lu par Java. Je suis a la recherche d'une methode plus directe : entre Java et le fichier sonore.
Merci d'avance
A voir également:
- Java wav
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
11 réponses
Dans ma jeunesse (genre ya deux ans) j'avais fait un petit player en C. Lire un wav n'est pas très compliqué du moment que tu as la structure du fichier (en gros un header et ensuite les trames).
Le header te donne l'échatillonage, le nombre de canaux etc... Tout ce qu'il te faut pour initialiser correctement la carte son avec des ioctl en C ;o). La première étape c'est donc de trouver ça (google est ton ami ;o) )
Ensuite une petite boucle for et tu récupères les trames une par une. Si la carte son est bien initialisée tu obtiens un truc audible au bout du compte ;o)
Je ne connais pas assez Java pour te dire si l'équivalent des ioctl existe, mais en tout cas en C c'est faisable et pas aussi compliqué qu'on pourrait le croire.
Le header te donne l'échatillonage, le nombre de canaux etc... Tout ce qu'il te faut pour initialiser correctement la carte son avec des ioctl en C ;o). La première étape c'est donc de trouver ça (google est ton ami ;o) )
Ensuite une petite boucle for et tu récupères les trames une par une. Si la carte son est bien initialisée tu obtiens un truc audible au bout du compte ;o)
Je ne connais pas assez Java pour te dire si l'équivalent des ioctl existe, mais en tout cas en C c'est faisable et pas aussi compliqué qu'on pourrait le croire.
Je crois que je commence a comprendre.
Il faut lire le fichier en mode binaire et non texte et ensuite extraire bit par bit ou mot par mot la totalite du fichier.
C est bien ca ??
Il faut lire le fichier en mode binaire et non texte et ensuite extraire bit par bit ou mot par mot la totalite du fichier.
C est bien ca ??
le format d'un fichier .wav est binaire (il y a bien une structure, c'est des fichiers à bases d'enregistrement de base RIFF)
tu ne peut pas trouver des donnees en texte, tu doit lire les donnees comme des nombres (en C on utilise fread( ) )
une remarque pourtant: les .wav contiennent seulement des echantiollons (la frequence d'echationnage est fixe pour un fichier donnée, et tu trouve l'information dans l'entete du fichier, pres du RIFF :) )
si tu as besoin du format de fichier (et tu as chercher, sans trouver) demande et je chercherais avec toi
tu ne peut pas trouver des donnees en texte, tu doit lire les donnees comme des nombres (en C on utilise fread( ) )
une remarque pourtant: les .wav contiennent seulement des echantiollons (la frequence d'echationnage est fixe pour un fichier donnée, et tu trouve l'information dans l'entete du fichier, pres du RIFF :) )
si tu as besoin du format de fichier (et tu as chercher, sans trouver) demande et je chercherais avec toi
Je suis vraiment navre apparemment j aurai du etre plus clair.
En fait, on me demande de faire un logiciel JAVA qui fait les partitions musicales a partir d un fichier .wav.
Pour cela j ai besoin de deux choses :
- frequence d echantillonnage sous la forme d un double
- le signal echantillonne sous la forme d un tableau de reels (double [])
Que tout le monde se rassure, j ai deja compris la theorie (qui n est pqs de moi : / ) qui est utilisee ensuite pour obtenir les partitions.
En fait, on me demande de faire un logiciel JAVA qui fait les partitions musicales a partir d un fichier .wav.
Pour cela j ai besoin de deux choses :
- frequence d echantillonnage sous la forme d un double
- le signal echantillonne sous la forme d un tableau de reels (double [])
Que tout le monde se rassure, j ai deja compris la theorie (qui n est pqs de moi : / ) qui est utilisee ensuite pour obtenir les partitions.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
le fichier WAV c'est ça en gros:
[ENTETE][ECHANTILLONS]
-L'entte contient la freq d'echant., la taille des echantiollons, leur nombre (entre autre)
- les donnees c'est un tableau (d'octets si c'est un fichier 8bits, mots si c'est un fichier 16bits) signés
[ENTETE][ECHANTILLONS]
-L'entte contient la freq d'echant., la taille des echantiollons, leur nombre (entre autre)
- les donnees c'est un tableau (d'octets si c'est un fichier 8bits, mots si c'est un fichier 16bits) signés
oui, dison octet par octet ou mot par mot
mais il ne faut pas oublier d'analyser l'entete en premier
mais il ne faut pas oublier d'analyser l'entete en premier
C'est ca warrith : tout fichier quel qu'il soit n'est qu'une suite de 0 et de 1. Après tu donnes à cette suite le sens que tu veux.
Dans un fichier wav, les premiers octets forment le fameux header wav (dont tu peux trouver le prototype sur google... ) Je crois même qu'un des liens que j'ai posté t'envoie direct à une page qui va bien.
Donc tu lis byte par byte ton fichier, tu remplis en conséquences un objet HeaderWav (par exemple) dont les attributs de classes sont les attributs caractérisant un wav. Ensuite, il ne te reste plus qu'à construire un liste d'objets "Trame" qui correspond à une partie de ton son (qq millisecondes, je n'ai plus le chiffre en tête).
Si ça t'interesse je dois pouvoir trouver chez moi un morceau de code qui lit un fichier wav (mais en C)...
Dans un fichier wav, les premiers octets forment le fameux header wav (dont tu peux trouver le prototype sur google... ) Je crois même qu'un des liens que j'ai posté t'envoie direct à une page qui va bien.
Donc tu lis byte par byte ton fichier, tu remplis en conséquences un objet HeaderWav (par exemple) dont les attributs de classes sont les attributs caractérisant un wav. Ensuite, il ne te reste plus qu'à construire un liste d'objets "Trame" qui correspond à une partie de ton son (qq millisecondes, je n'ai plus le chiffre en tête).
Si ça t'interesse je dois pouvoir trouver chez moi un morceau de code qui lit un fichier wav (mais en C)...
Salut,
Quelles sont les valeurs qui vont être utile pour créer un spectre du fichier wav? c'est a dire que représente les points qui sont sur la courbe du spectre??
Merciii
Quelles sont les valeurs qui vont être utile pour créer un spectre du fichier wav? c'est a dire que représente les points qui sont sur la courbe du spectre??
Merciii
Salut,
Je voudrais en gros la même chose : prendre un fichier wave et obtenir une courbe représentant le son.
Et je sais comment le faire.
Mais je voudrais savoir s'il n'y a pas des trucs déjà fait pour faire ça?
Parce que ça doit servir pour tellement de trucs (désolé pour les "trucs")...
Et j'ai pas envie de perdre mon temps à faire ça si c'est déjà fait vu que c'est pas le but final.
Sinon pour la structure des wav, j'ai trouvé ça qui est très bien : http://tuxy2885.free.fr/index.php?cat=tutorial&id=riffwave
Je voudrais en gros la même chose : prendre un fichier wave et obtenir une courbe représentant le son.
Et je sais comment le faire.
Mais je voudrais savoir s'il n'y a pas des trucs déjà fait pour faire ça?
Parce que ça doit servir pour tellement de trucs (désolé pour les "trucs")...
Et j'ai pas envie de perdre mon temps à faire ça si c'est déjà fait vu que c'est pas le but final.
Sinon pour la structure des wav, j'ai trouvé ça qui est très bien : http://tuxy2885.free.fr/index.php?cat=tutorial&id=riffwave
il faut utiliser JMF: https://www.oracle.com/java/technologies/javase/java-media-framework.html
Tu dois télécharger le JMF, l'installer et ajouter ses .jar à ton projet.
un bout de code que j'ai écrit :
File file = new File(fileName);
Player player = Manager.createRealizedPlayer(file.toURI().toURL());
player.start();
Tu dois télécharger le JMF, l'installer et ajouter ses .jar à ton projet.
un bout de code que j'ai écrit :
File file = new File(fileName);
Player player = Manager.createRealizedPlayer(file.toURI().toURL());
player.start();
Je me renseigne sur l equivalent de ioctl en Java.
Cependant :
- je ne comprends pas pourquoi il y a besoin de faire intervenir la carte son alors que je veux juste manipuler un fichier .wav sur mon disque dur...
- peut etre qu il faut analyser comment est constitue un fichier .wav pour ensuite savoir le "traduire".
J ai tente de forcer la lecture sur Notepad ou Wordpad et meme Java en considerant mon fichier .wav comme un .txt mais j obtiens n'importe quoi : RIFF.€*€€€€€€€uuu€u€d€€d€ etc
- N est-il pas possible d acceder directement au signal et la frequence d echantillonnage sur des formats sonores de Sun genre .au ? Je dis ca car Java Sound est cense etre fait pour le DSP (Digital Signal Processing)
Malheureusement ces reponses restent sans reponse malgre des heures passees sur Google.
Merci encore une fois du savoir que vous partagez et du temps que vous me consacrer. ;-)
Je me renseigne sur l equivalent de ioctl en Java.
Cependant :
- je ne comprends pas pourquoi il y a besoin de faire intervenir la carte son alors que je veux juste manipuler un fichier .wav sur mon disque dur...
--> Tu parlais de lire un wav. Moi j'ai compris lire dans le sens "jouer un son". Sous linux si tu fait un cat fichier.wav > /dev/dsp ca te donne un tuc inaudible car tu n'as pas passé d'ioctl pour initialiser correctement la carte son.
Car sinon un fichier wav se lit comme un fichier classique.
- peut etre qu il faut analyser comment est constitue un fichier .wav pour ensuite savoir le "traduire".
Pour voir comment lire un fichier bytes par bytes :
http://www.commentcamarche.net/forum/affich-1477971-%5Bjava%5D-lire-byte-par-byte-un-fichier
Pour la structure du header wav :
http://www.neurotraces.com/scilab/scilab2/node24.html
La question est que veux tu faire ??? Car en effet le header ne sert qu'à initialiser une la carte son lorsque tu veux le jouer et rien d'autre. Si ça se trouve tu n'en as pas besoin ;o)
J ai tente de forcer la lecture sur Notepad ou Wordpad et meme Java en considerant mon fichier .wav comme un .txt mais j obtiens n'importe quoi : RIFF.€*€€€€€€€uuu€u€d€€d€ etc
C'est normal ! Un fichier quel qu'il soit est une suite de 0 et de 1. Tout dépend du sens que tu lui donne (la c'est des caractères), mais pour un wav ça n'a pas de sens. Cf la manière de le lire ton wav ci-dessus...
- N est-il pas possible d acceder directement au signal et la frequence d echantillonnage sur des formats sonores de Sun genre .au ? Je dis ca car Java Sound est cense etre fait pour le DSP (Digital Signal Processing)
Cf le header de ton fichier wav
Bonne chance