10
votes

Comment jouer un son en octave?

Octave semble supposer qu'un utilitaire de lecture de son spécifique sera disponible sur un système mais ne semble pas fournir la possibilité de spécifier un alternatif. Dans l'erreur ci-dessous, Octave recherche OFSNDPlay , qui n'est pas un utilitaire disponible sur tous les systèmes.

octave: 38> son (Beamformed_20)

SH: OFSNDPLAY: commande non trouvée

existe-t-il un paramètre de configuration d'octave ou un fragment de code que je peux utiliser pour spécifier un utilitaire approprié système?


0 commentaires

7 Réponses :


3
votes

Installez alsa-utils ou pulseaudio-utils et mettez ce qui suit dans votre ~ / .OCTaverc: xxx

ou xxx


3 commentaires

FYI: Cela ne fonctionne pas sur un système Fedora 11. L'installation d'octave par défaut semble remplacer le réglage de Sound_play_Utility.


Ne fonctionne pas sur Ubuntu 12.10 non plus. Je reçois l'erreur suivante et un son horrible de craquements / apparaissants: SH: 1: Impossible de créer / Dev / DSP: permission refusée


Cela semble avoir aucun effet, en fonction de la source de playsound . Il est actuellement (à partir de la version 3.6.2) Code papier pour utiliser pablay (audio d'impulsion), et comme avec tout ce que Pulse-Audio, Paplay est une sorte de merde. Il fait également une lecture de manière extrêmement hacky - en l'écrivant dans un fichier, puis en utilisant système () .



3
votes

sur l'une de mes machines Linux, j'ai créé le script suivant du script d'affichage pour contourner la dépendance câblée dure: xxx

Ce script particulier utilise le SOX lire utilitaire.

Certes, le commentaire est inutile pour la fonctionnalité, mais cela m'a certainement fait me sentir mieux ...


0 commentaires

1
votes

sur OSX, c'est ce que j'ai fait pour avoir son bon fonctionnement:

à partir de l'aide de la commande :

Cette fonction écrit les données audio via un tuyau au programme "Jouer" de la distribution de SOX. SOX court à peu près n'importe où, mais il n'a que des pilotes audio pour OSS (principalement Linux et FreeBSD) et Sunos. Si votre ordinateur local n'est pas l'un d'entre eux, écrivez un script shell tel que ~ / bin / octaveplay, substituant audio_utilité Avec tout utilitaire audio que vous avez sur votre système: #! / bin / sh chat> ~ / .octave_play.au System_audio_utilité ~ / .octave_play.au rm -f ~ / .octave_play.au et définir la variable globale (par exemple, en .OCTAVERC) Global Sound_play_Utility = "~ / bin / octaveplay";

J'ai nommé le script suivant "Octaveplay" et le mettre en ~ / bin:

chat> ~ / .octave_play.aif
Afplay ~ / .octave_play.aif
rm -f ~ / .octave_play.aif

Puis j'ai créé .OCTAVERC et ajouté: Global Sound_play_Utility = "~ / bin / octaveplay";

voile!


0 commentaires

8
votes

J'ai remplacé la fonction Playaudio d'octave avec la fonction suivante. Cela fonctionnera seulement après l'installation sox . xxx

(in ubuntu) xxx

une approche similaire permettra de permettre vous enregistrer aussi: xxx


1 commentaires

Génial, merci - Travaux parfaits sur mon système! (Ubuntu 13h10 et Octave 3.8)



3
votes

playaudio code> est cassé!

Il vaut la peine de lire l'implémentation par défaut de playsound code> (version 3.6.2): ​​ P>

function playsound(wav, samplerate)
  # Play a single-channel wave at a certain sample rate (defaults to 44100 Hz).
  # Input can be integer, in which case it is assumed to be signed 16-bit, or
  # float, in which case it is in the range -1:1.

  if (nargin < 1 || nargin > 2)
    print_usage();
  endif

  if (nargin < 2)
    samplerate = 44100;
  end

  if (!isvector(wav))
    error("playsound: X must be a vector");
  endif

  # Write it as a 16-bit signed, little endian (though the amaaazing docs don't say the endianness)

  # If it is integers we assume it is 16 bit signed. Otherwise we assume in the range -1:1
  if (isfloat(wav))
    X = min(max(wav(:), -1), 1) * 32767; # Why matlab & octave do not have a clip() function... I do not know.
  else
    X = min(max(wav(:), -32767), 32767) + 32767;
  endif
  unwind_protect
    file = tmpnam ();
    fid = fopen (file, "wb");
    fwrite (fid, X, "int16");
    fclose (fid);
    # Making aplay (alsa) the default, because let's be honest: it is still way more reliable than
    # the mess that is pulseaudio.
    if (exist("/usr/bin/aplay") == 2)
      system(sprintf("/usr/bin/aplay --format=S16_LE --channels=1 --rate=%d \"%s\"", samplerate, file))
    elseif (exist("/usr/bin/paplay") == 2)
      system(sprintf("/usr/bin/paplay --format=s16le --channels=1 --rate=%d --raw \"%s\"", samplerate, file))
    endif
  unwind_protect_cleanup
    unlink (file);
  end_unwind_protect

endfunction


0 commentaires

2
votes

Je suis sur un Mac (Yosemite) et j'ai découvert une solution plus simple que ce que d'autres ont suggéré. Juste au cas où cela est toujours pertinent pour quiconque:

première installation SOX: http://sox.sourceforge.net/ p>

(via homebrew) p> xxx pré>

maintenant sur la ligne de commande terminale que vous pouvez utiliser: p>

system(‘play “/path/to/sound file.wav”’);


0 commentaires

1
votes

sur OCTAVE 4.2.1. Vous pouvez lire un fichier WAV comme suit

enregistrer le code suivant dans un fichier playwav.m xxx

alors vous pouvez appeler la fonction comme playwav ('/ chemin / vers / wavfile '); à partir d'octave Commandline.

Testé sur Windows 7.


0 commentaires