Rechercher : dans
Par :

[Java] Lire des donnees d'un fichier son .wav

Dernière réponse le 25 mar 2009 à 15:32:28 warith, le 12 mai 2005 à 17:59:27 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [Java] Lire des donnees d'un fichier son .wav » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Lire un fichier en .rbs VoirOn peut rencontrer parfois des fichiers en .rbs, issus d'un enregistrement ou un autre. La solution la plus simple pour lire ces fichiers est tout bêtement de remplacer l'extension .rbs par .mp3 Si vous ne voyez pas l'extension du fichier, faites...
Lire un fichier WMV,Fichier WMV, Extension WMV, WMV VoirUn fichier WMV est une vidéo au format propriétaire Microsoft Windows Media Video. Un fichier portant l'extension .WMV contient à la fois des données audio et vidéo, compressées pour pouvoir être diffusées en streaming, à la manière du MPEG2 ou du...
Fichier MP4 VoirFormat MP4 Un fichier MP4 est une vidéo compressée prévue pour pouvoir être lue en streaming. Lire un fichier MP4 Pour lire une vidéo au format MP4, il suffit d'utiliser un lecteur multimédia tel que Windows Media Player, ou son équivalent...
Fichier CDA VoirFormat CDA Un fichier CDA est le plus souvent un fichier-"plage" (ou "piste") directement issu d'un CD audio. Lire un fichier CDA Pour lire de tels fichiers, il suffit de télécharger un lecteur capable de lire les CD audio, par exemple...
Fichier CSV VoirFormat CSV Un fichier CSV est un fichier tableur, contenant des données sur chaque ligne séparés par un caractère de séparation (généralement une virgule ou un point-virgule). Comment lire un fichier CSV ? Il peut être lu avec un tableur tel que...

1

choubaka, le 13 mai 2005 à 07:52:25

Salut

je ne sais pas si ça peut t'aider

http://www.developer.com/java/other/article.php/1565671
Chouba,
Pochard d'assaut .. 

Répondre à choubaka

2

mamiemando, le 13 mai 2005 à 09:09:54
  • +1

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.

Répondre à mamiemando

3

warith, le 13 mai 2005 à 16:35:09

Merci pour vos reponses
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. ;-)

Répondre à warith

5

mamiemando, le 13 mai 2005 à 16:56:22

Merci pour vos reponses
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

Répondre à mamiemando

4

sam3000, le 13 mai 2005 à 16:53:23

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 L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000

6

warith, le 13 mai 2005 à 17:09:59

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.

Répondre à warith

7

sam3000, le 13 mai 2005 à 17:16:09

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
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000

8

warith, le 13 mai 2005 à 17:32:49

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 ??

Répondre à warith

9

sam3000, le 14 mai 2005 à 10:14:59

Oui, dison octet par octet ou mot par mot
mais il ne faut pas oublier d'analyser l'entete en premier L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000

10

mamiemando, le 17 mai 2005 à 16:49:16

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)...

Répondre à mamiemando

11

Erkan37, le 8 avr 2008 à 10:10:52

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

Répondre à Erkan37

12

bourriquet, le 18 jun 2008 à 17:03:13

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

Répondre à bourriquet

13

mamiemando, le 19 jun 2008 à 01:11:02
Répondre à mamiemando

14

 sepehr_gsfc, le 25 mar 2009 à 15:32:28

Il faut utiliser JMF: http://java.sun.com/javase/technologies/desktop/media/jmf/
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();

Répondre à sepehr_gsfc