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 :

Lire liste de sons .wav


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut Lire liste de sons .wav
    Bonjour à tous,

    Je suis en train d'écrire un petit programme qui devrait me permettre de lire une liste de son .wav. Voici ce qui est déjà écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    list_g = [...
    {'-15.wav'};
    {'-30.wav'};
    {'-45.wav'};
    {'-60.wav'};
    {'+15.wav'};
    {'+30.wav'};
    {'+45.wav'};
    {'+60.wav'}];
     
    list_test = [];
     
    for ii = 1:10;
        list_test = [list_test ; list_g];
    end
     
    list_rand = [];
     
    for ii = randperm(size(list_test,1)) 
        list_rand = [list_rand ; list_test(ii,:)];
    end
    Jusque là tout va bien, j'obtiens dans mon workspace ma liste randomisée. Le problème, c'est que j'aimerais que Matlab lise chacun des fichiers de la liste.

    J'ai essayé diverses fonctions (sound, read, wavread) mais à chaque fois elle demande un nom de fichier .wav, ce que je ne peux pas faire car ce fichier dépend de la liste.

    Quelqu'un aurait-il une idée? Es-ce un autre fonction que je dois utiliser?

    Merci d'avance pour vos conseils...


    Rq/ Matlab R2007B

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Bonjour,

    Comme tout cela est compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    list_g = {...
    '-15.wav';
    '-30.wav';
    '-45.wav';
    '-60.wav';
    '+15.wav';
    '+30.wav';
    '+45.wav';
    '+60.wav'};
     
    list_test = repmat(list_g,10,1);%à revérifier mais il me semble que c'est ça
     
    idx = randperm(size(list_test,1));
    list_rand = list_test(idx);
    Ensuite pour la lecture peux-tu nous montrer ce que tu as testé (WAVREAD devrait fonctionner) ?
    Je suppose que tu boucles sur tes fichiers non ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut
    J'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     list_rand = wavread(filename)
    C'est pas malin car j'ai évidemment l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Undefined function or variable 'filename'.
    Ce que je n'arrive pas à conceptualiser, c'est de faire comprendre à Matlab que filename, c'est en fait ma liste.

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Ca n'a pas vraiment de rapport direct mais ça te donnera peut-être la piste :
    Comment lister les fichiers d'une certaine extension dans un répertoire ?

    Il faudrait peut-être aussi que tu prennes le temps de lire ceci : Tableaux de cellules

    Là j'ai l'impression que tu ne sais pas très bien ce que tu manipules.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut
    Merci en tout cas pour vos deux réactions.

    Je confirme que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list_test = repmat(list_g,10,1);
    fonctionne correctement. Merci d'avoir épuré le code.

    Pour ce qui est de la réaction de Caro-Line, je dirai que j'ai un peu du mal à utiliser Matlab sans Cogent.

    J'essaye d'adapter un script pour le rendre plus attractif grâce au 'gui' des nouvelles versions Matlab. Là où il suffit de mettre dans Matlab 6.5 avec Cogent : playsound(avec la liste associée), ici cela semble plus compliqué.

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Je ne sais pas ce qu'est Cogent, je ne vois pas non plus le rapport ici avec les GUI

    Tu as compris ce que je voulais te dire avec l'exemple de la :faq ?
    => Il faut que tu boucles sur ton tableau de cellules pour lire chaque fichier un par un.

  7. #7
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Regardes ce que te retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >> list_rand{1}
     
    >> list_rand{2}
     
    >> list_rand{3}

    et en utilisant une boucle for avec play par exemple, tu y arrivera

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut
    Oui exactement! Je m'en était pas rendu compte et je vois à présent ce que tu veux dire par boucler... Je vais donc associer à chacune de mes valeurs à présenter, un numéro allant de 1 à 8. Je bosse sur le reste afin d'avoir une colonne allant de 1 à 80, en essayant de garder les fonctions que tu as utilisé.

    Cogent c'est une toolbox développée par l'UCL qu'il est possible d'utiliser avec des versions plus ancienne de Matlab.

    http://www.vislab.ucl.ac.uk/cogent.php

  9. #9
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    oula tu n'as pas vraiment tout bien saisi...
    Pourquoi créer une liste de numéros ?...

    Pourtant tu sais faire des boucles....

    Vu que,apparemment, mon exemple ne suffit pas à te mettre sur la piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for k=1:length(list_rand)
       disp(k)
       disp(list_rand{k});
    end
    Note : quand on a un tableau 1*n ou n*1 comme tu as autant utiliser LENGTH plutôt que SIZE avec un deuxième argument.

  10. #10
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    tu as

    >> doc size

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut
    Je ne savais pas qu'on était pas obligé de dire à Matlab combien de ligne on a. C'est pour cette raison que je voulais faire une colonne allant de 1 à 80 dans ma list_rand et ensuite de faire ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ii = 1:size(list_rand,1);
       %lire les fichiers sons en précisant que le son est dans list_rand,2
    end
    Bon, maintenant j'ai compris clairement l'utilité de length.

    Merci bcp!

    Je vais maintenant passer à la lecture du son sans spécifier un nom de fichier.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut
    Le problème est que j'ai déjà un souci à lire 1 fichier son. Lorsque je mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [standard fs_std] = wavread('+15.wav');
    J'obtiens l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Attempted to access icon_data(:,1); index out of bounds because size(icon_data)=[6,1].
    Est-ce que quelqu'un a une idée de ce que cela veut dire?

    Merci d'avance

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai déjà rencontré ce genre de message, j'avais créé mes fichiers wav avec un autre logiciel, et en voulant les lire avec Matlab, j'obtenais ce message.
    Cela ne provient pas d'une erreur sur Matlab, seulement que les wav ont été enregistrés d'une certaine façon qui amène à cette erreur sur Matlab.
    J'ai pas vraiment trouvé de solution à part les écouter avec le lecteur de media et les enregistrer directement avec Matlab.
    Si quelqu'un a une autre solution je suis preneur.

  14. #14
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Que retourne la commande suivante sur l'un des fichier

    Est-ce que tu as essayé avec :

  15. #15
    Invité
    Invité(e)
    Par défaut
    Perso, mmfileinfo me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    info = mmfileinfo('test.wav')
          info = 
     
        Filename: 'test.wav'
            Path: 'C:\Users\Jérôme\Desktop'
        Duration: 1.3302
           Audio: [1x1 struct]
           Video: [1x1 struct]
    info.Audio
     
    ans = 
     
                  Format: 'PCM'
        NumberOfChannels: 2
    info.Video
     
    ans = 
     
        Format: ''
        Height: []
         Width: []
    Un test sur d'autres fichiers qui marchent donnent le même genre de chose.

    Et mmreader me donne l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Initialization failed. (Aucune combinaison de filtres intermédiaires n'a pu être trouvée pour établir
    la connexion.)
    
    Error in ==> mmreader.mmreader at 66
    uddobj = audiovideo.mmreader(fullFilePath);
    Sinon j'ai trouvé une solution: commenter les lignes 364 à 388 du wavread.m

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut
    Pour ma part, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    info = mmfileinfo('+15.wav')
     
    info = 
     
        Filename: '+15.wav'
            Path: 'C:\Users\GC\Documents\MATLAB'
        Duration: 0.2008
           Audio: [1x1 struct]
           Video: [1x1 struct]
    Je n'avais pas essayé mmreader car
    The file formats that mmreader supports are AVI, MPG, MPEG, WMV, ASF, and ASX.
    et j'utilise le .wav

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    si c'est possible, pourrais-tu mettre un de ces fichiers en pièce jointe dans ton prochain message? (le '+15.wav' par exemple)

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut
    Le voici, j'ai changé l'extension en .txt pour qu'il puisse passer.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Lire un son WAV
    Par olivier1209 dans le forum Débuter avec Java
    Réponses: 19
    Dernier message: 26/08/2009, 03h14
  2. Lire un son .wav depuis un serveur ftp
    Par mimi51340 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 08/04/2008, 21h32
  3. Réponses: 5
    Dernier message: 05/04/2008, 17h19
  4. Lire un fichier son wav... un peu d' aide svp
    Par pilouface dans le forum C
    Réponses: 10
    Dernier message: 13/05/2006, 16h36
  5. Comment lire une partie du son *.wav
    Par ryosaebafr2000 dans le forum MFC
    Réponses: 5
    Dernier message: 08/06/2005, 16h00

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