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 octave: 38> son (Beamformed_20) P>
SH: OFSNDPLAY: commande non trouvée p>
blockQuote>
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? p> OFSNDPlay code>, qui n'est pas un utilitaire disponible sur tous les systèmes. P>
7 Réponses :
Installez alsa-utils em> ou pulseaudio-utils em> et mettez ce qui suit dans votre ~ / .OCTaverc: ou p>
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 code>
Cela semble avoir aucun effet, en fonction de la source de playsound code>. Il est actuellement (à partir de la version 3.6.2) Code papier pour utiliser
pablay code> (audio d'impulsion), et comme avec tout ce que Pulse-Audio,
Paplay code> 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 () code>.
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: Ce script particulier utilise le SOX Certes, le commentaire est inutile pour la fonctionnalité, mais cela m'a certainement fait me sentir mieux ... EM> P> P> P> P> P> lire code> utilitaire. p>
sur OSX, c'est ce que j'ai fait pour avoir son bon fonctionnement: p>
à partir de l'aide de la commande code> code>: p>
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"; code> blockQquote>
J'ai nommé le script suivant "Octaveplay" et le mettre en ~ / bin: p>
chat> ~ / .octave_play.aif
Afplay ~ / .octave_play.aif
rm -f ~ / .octave_play.aif code> blockQuote>
Puis j'ai créé .OCTAVERC et ajouté:
Global Sound_play_Utility = "~ / bin / octaveplay"; code> p>
voile! p>
J'ai remplacé la fonction Playaudio d'octave avec la fonction suivante.
Cela fonctionnera seulement après l'installation sox em>. (in ubuntu) p> une approche similaire permettra de permettre vous enregistrer aussi: p>
Génial, merci - Travaux parfaits sur mon système! (Ubuntu 13h10 et Octave 3.8)
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
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> maintenant sur la ligne de commande terminale que vous pouvez utiliser: p> system(âplay â/path/to/sound file.wavââ);
sur OCTAVE 4.2.1. Vous pouvez lire un fichier WAV comme suit
enregistrer le code suivant dans un fichier playwav.m p> alors vous pouvez appeler la fonction comme Testé sur Windows 7. P> P> playwav ('/ chemin / vers / wavfile '); code> à partir d'octave Commandline. p>