2014-04-25 1 views
0

J'ai besoin de lire un fichier wav sur Octave. Quand j'appelle la fonction playaudio ("sample", "wav"). Je reçois cette erreur:La fonction playaudio() ne fonctionne pas dans Octave

erreur: playaudio ne prend pas en charge l'extension donnée

erreur: appelée à partir de:

erreur: /usr/share/octave/3.2.4/m/audio/playaudio.m à la ligne 70, colonne 7

Comment pourrais-je résoudre ce problème? Comment est-ce que je peux faire le support de playaudio wav. format.

+0

Peut-être que vous trouvez [cette question/réponse] (http://stackoverflow.com/questions/5130942/reading-and-playing-sound-in-octave-on- fedora12) pour être utile. Il semble que vous deviez utiliser ['wavread'] (http://www.gnu.org/software/octave/doc/interpreter/Audio-Processing.html#XREFwavread) en premier. – Schorsch

Répondre

1

Le code source de la fonction playaudio est très simple:

if (any (strcmp (ext, {"lin", "raw"}))) 
    [status, out] = system (sprintf ('cat "%s" > /dev/dsp', name)); 
    if (status != 0) 
    system (sprintf ('paplay --raw "%s"', name)); 
    endif 
elseif (any (strcmp (ext, {"mu", "au" "snd", "ul"}))) 
    [status, out] = system (sprintf ('cat "%s" > /dev/audio', name)); 
    if (status != 0) 
    system (sprintf ('paplay "%s"', name)); 
    endif 
else 
    error ("playaudio: unsupported extension '%s'", ext); 
endif 

Comme vous pouvez le voir, il est tout simplement faire un appel système avec l'utilitaire paplay disponible dans tous les systèmes Linux en utilisant le serveur de son PulseAudio. Si vous avez la permission d'éditer le fichier vous-même playaudio.m, il suffit d'ajouter le « wav » extension à la liste comme dans:

elseif (any (strcmp (ext, {"mu", "au" "snd", "ul", "wav"}))) 

Il devrait fonctionner hors de la boîte. Je vais soumettre ce correctif au système de suivi des bogues GNU Octave. Merci d'avoir signalé le problème.


Patch soumis: https://savannah.gnu.org/patch/index.php?8441

+0

@jason, si vous n'êtes pas autorisé à modifier le fichier, copiez-le dans votre répertoire de projet, effectuez la modification et supprimez-le à l'avenir lorsque le correctif est disponible. Alternativement, vous pouvez directement utiliser l'appel 'system' vous-même. – juliohm