IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Equivalent des fonctions wavread et wavplay sous Linux


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Points : 25
    Points
    25
    Par défaut Equivalent des fonctions wavread et wavplay sous Linux
    Bonjour bonjour

    J'ai changé il y a peu de O.S, et je travaille maintenant sous Linux. Et les fonctions wavread et wavplay ne fonctionnent pas sous cet environnement. J'ai essayé d'utiliser la fonction uiimport, mais voulant utiliser ça dans un GUI, cela doit être transparent pour l'utilisateur.

    Savez vous s'il existe des équivalents pour ces fonctions, sachant que je lis des fichiers .wav (et autre que la fonction sound pour remplacer wavplay, je voudrais en effet récupérer aussi le nombre de bits du fichier son d'origine) ?

    Merci d'avance

    Julien

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 307
    Points : 52 887
    Points
    52 887
    Par défaut
    L'entête des fichiers WAV peut aisément être lue à l'aide des fonctions de bas niveau (FOPEN/FREAD/FCLOSE) et... de la description du format

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Je ne comprends pas. Je cherche en fait à récupérer les données qui me donneront ma fonction y du son en temporel, et la fréquence d'échantillonage Fs et éventuellement le nombre de bits. Comment dois je m'y prendre pour faire cela ?

    Julien

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Bon, après un peu de recherche, j'ai trouvé comment ouvrir un fichier wav et stocker ses données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen(file,'r');
    son_lu = fread(fid,inf,'int16');
    fclose(fid);
    (Basique, mais je m'en rappelais plus; d'autant que ça ressemble à du C).

    Maintenant, je ne sais pas où sont les données qui m'intéressent dans ce fichier. J'ai vu sur ton site Dutmatlab, que le fichier a une taille de 44 octets, mais je ne sais pas combien d'éléments dans mon son_lu cela représente ...

    FREQ (4 octets) : Fréquence d'échantillonnage (en Hertz)
    Comment je peux récupérer Freq par exemple parmi toutes ces données ?

    Julien

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 307
    Points : 52 887
    Points
    52 887
    Par défaut
    Citation Envoyé par JuLpM
    Comment je peux récupérer Freq par exemple parmi toutes ces données ?
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fid=fopen(file,'r');
     
    fseek(fid,24,'bof'); % Saut de 24 octets depuis le début du fichier
     
    FREQ=fread(fid,1,'*uint32')
     
    fclose(fid);
    Tout est dans la documentation de FREAD

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Très bien, merci beaucoup.

    Au risque d'être un peu lourd, je me demandais comment récupérer les données 'son' du fichier. J'ai alors essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fseek(fid, 44, 'bof')
    son = fread(fid, (count-44), 'double');
     
    sound(son, FREQ)
     
    fclose(fid);
    Mais les données récupérées et jouées n'ont plus rien à voir avec le son de départ. Je me suis donc planté quelque part, mais ne comprenant pas toute la structure du fichier, je ne saurais dire où. Savez vous comment récupérer les 'vraies' données son ?

    Julien

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 307
    Points : 52 887
    Points
    52 887
    Par défaut
    A mon avis, les valeurs ne sont pas codées en Double dans le fichier. Il faut se servir des informations de l'entête pour déterminer le type de codage (NBRBYTE ou NBBITS ?).

    il faudrait faire plus de recherche sur le codage WAV

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Je viens de me rendre compte que les fonctions wavread et wavwrite fonctionnent sous Linux, donc inutile pour moi d'aller plus loin ... Et wavplay est remplaçable par sound.

    Donc pour le coup mon affaire est résolu. Merci Dutmatlab :-)

    Julien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/06/2009, 09h51
  2. Réponses: 2
    Dernier message: 30/01/2007, 11h44
  3. fonction sleep() en C sous Linux
    Par makohsarah dans le forum POSIX
    Réponses: 5
    Dernier message: 05/06/2006, 15h06
  4. Equivalent des table Enum de mysql sous Sql server
    Par scaleo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/04/2006, 12h17
  5. Réponses: 5
    Dernier message: 29/12/2005, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo