J'ai un énorme ensemble d'événements dans Mathematica auxquels je dois réagir, et ce n'est pas pratique de toujours le vérifier, d'autant plus que les événements sont distribués au hasard dans le temps.
J'ai donc voulu ajouter un son simple pour me rappeler d'aller vérifier l'événement. Je voulais l'utiliser Beep[]
mais je n'obtiens aucun résultat, en fait, je ne savais pas jusqu'à présent que Mathematica ne faisait aucun son.
J'utilise Debian Squeeze Stable et je n'ai aucun problème avec toute autre application utilisant le son.
Cela affecte toutes les versions récentes (7, 8 et 9) de Mathematica et probablement les anciennes versions en fonction de la configuration sonore de votre système.
linux
audio
mathematica
enedene
la source
la source
Réponses:
Pour autant que je sache, Mathematica n'a jamais vraiment supporté le son sous Linux.La commande aPlay
été introduite dans la version 3, et l'ensemble du système audio a été révisé dans la version 6. Si vous recherchez comp.soft-sys.math.mathematica, vous trouverez des questions remontant jusqu'à la version 3. Dans la version 6, le commande aEmitSound
été introduite. Cela sous-tend maintenant la plupart de la génération de sons Mathematica, mais je n'ai pas trouvé de moyen rapide de le réparer / le pirater pour Linux, car ilEmitSound
effectue un prétraitement (déterminer quels types d'objets lui ont été donnés) avant de transmettre le son à l'interface évaluer.Le pilote audio / API par défaut utilisé dans la plupart des installations Linux est ALSA ( wiki ). Il est devenu la valeur par défaut en 2002 dans le noyau Linux 2.6 et OSS a été marqué comme "déprécié" (bien que OSS soit toujours en développement actif). De nombreuses distributions Linux utilisent désormais PulseAudio qui se trouve au-dessus du son ALSA sous-jacent. (Quiconque ayant une meilleure compréhension du son Linux devrait se sentir libre de le modifier!)
Mathematica a introduit le son dans la version 3 (1996) et a donc utilisé OSS pour ses variantes * nix. C'est toujours le cas, bien que OSS ne soit plus la valeur par défaut dans presque toutes les variantes de Linux. Le savoir nous donne une solution possible: utilisez une couche d'émulation OSS (voir, par exemple, http://wiki.debian.org/SoundFAQ ).
Le plus simple est d'utiliser une émulation en mode espace utilisateur et d'exécuter Mathematica via
aoss
ou l'équivalent PulseAudio
Le problème avec ces deux est qu'il ne fonctionne qu'avec des sons MIDI, pas avec des sons échantillonnés. C'est du moins le cas sur mon système Ubuntu 10.10 et le système Linux de Scott Kruger (de l' équipe de support technique WRI ). Un rapport de bogue a été déposé sur ce problème.
Alternativement, vous pouvez charger la compatibilité OSS dans votre noyau
et vous pouvez ajouter
snd_pcm_oss
etsnd_mixer_oss
à/etc/modules
les charger à boottime. Ces modules ne sont pas facilement disponibles dans Ubuntu 10.10 car ils ont décidé de supprimer la compatibilité descendante. Je ne peux pas tester ce qui précède sans recompiler mon noyau ...Étant donné que l'émulation OSS ci-dessus ne fonctionne pas actuellement parfaitement, voici quelques solutions rapides basées sur certaines des discussions que j'ai vues (par exemple, un b c ) et réécrites pour utiliser les commandes ALSA par défaut.
Pour le son échantillonné, utilisez
aplay
:par exemple
ALSASound[Play[Sin[1000 t^2], {t, 0, 1}], "WAV"]
.Vous devriez également pouvoir accéder
Export
directement à l'/dev/snd/
appareil approprié ... mais je ne pouvais pas le faire fonctionner.Pour
midi
utilisationaplaymidi
. Pour que cela fonctionne, vous avez besoin d'une sorte de synthé midi logiciel / matériel installé. J'aitimidity
exécuté sur le port 128. (Voir ici pour de l'aide)par exemple,
ALSASound[Sound[SoundNote /@ CharacterRange["A", "G"]], "MIDI"]
Vous pouvez maintenant envelopper la
ALSASound
commande appropriée autour de tout objet sonore. Vous pouvez également redéfinirPlay
pour utiliserALSASound
:Cela revient essentiellement à définir $ SoundDisplayFunction , comme le recommandent de nombreuses discussions sur Internet. Ce paramètre d'option jouera le son, puis affichera les graphiques normaux.
mais les boutons marche / arrêt ne fonctionneront pas, car ils sont basés sur
EmitSound
.Pour créer un
Beep[]
équivalent simple , essayezEnfin, si vous installez la synthèse vocale du festival (ou tout autre programme de synthèse vocale ), vous pouvez remplacer la
Speak
fonctionnalité Mathematica , par exemple,la source