Kein Sound in Mathematica unter Linux

10

Ich habe eine große Anzahl von Ereignissen in Mathematica, auf die ich reagieren muss, und es ist nicht praktisch, immer danach zu suchen, zumal Ereignisse zufällig zeitlich verteilt sind.
Deshalb wollte ich einen einfachen Sound hinzufügen, um mich daran zu erinnern, das Ereignis zu überprüfen. Ich wollte verwenden, Beep[]aber ich bekomme keine Ergebnisse, tatsächlich habe ich bis jetzt nicht bemerkt, dass Mathematica überhaupt keine Geräusche macht.

Ich benutze Debian Squeeze Stable und habe keine Probleme mit anderen Anwendungen, die Sound verwenden.

Dies wirkt sich auf alle neueren Versionen (7, 8 und 9) von Mathematica und wahrscheinlich auf ältere Versionen aus, abhängig vom Sound-Setup Ihres Systems.

enedene
quelle
Dies hat ein Problem in Mma seitdem sie hinzugefügt Sound Befehle in Version 6. Ich Festsetzung es an der Zeit erinnere, hat aber in den neueren Versionen nicht gestört. Probieren Sie die Dokumentation hier aus .
Simon
Sollte diese Frage zum Superuser migriert werden?
Simon
Leider bekomme ich immer noch keinen Ton.
Ich bin das Originalplakat auf Stackoverflow. Vielen Dank, dass Sie mir von dieser Seite erzählt haben. Ich wusste nicht, dass es diese gibt. Es ist fantastisch, dass ich es gut gebrauchen kann.
Enedene

Antworten:

10

Soweit ich weiß, hat Mathematica Sound unter Linux nie wirklich unterstützt. Der Befehl Playwurde in Version 3 eingeführt und das gesamte Soundsystem in Version 6 überarbeitet. Wenn Sie nach comp.soft-sys.math.mathematica suchen, finden Sie Fragen, die bis zu Version 3 zurückreichen Befehl EmitSoundwurde eingeführt. Dies liegt nun dem größten Teil der Mathematica-Soundgenerierung zugrunde, aber ich konnte keinen schnellen Weg finden, um es für Linux zu reparieren / hacken, da EmitSoundeinige Vorverarbeitungen (Herausfinden, welche Arten von Objekten es gegeben wurde) durchgeführt wurden, bevor der Sound an das Frontend übergeben wurde bewerten.

Der in den meisten Linux-Installationen verwendete Standard-Soundtreiber / API ist ALSA ( Wiki ). Es wurde 2002 zum Standard im Linux-Kernel 2.6 und OSS wurde als "abgeschrieben" markiert (obwohl OSS noch in der aktiven Entwicklung ist). Viele Linux-Distributionen verwenden jetzt PulseAudio, das über dem zugrunde liegenden ALSA-Sound liegt. (Jeder, der den Linux-Sound besser versteht, sollte dies jederzeit bearbeiten können!)

Mathematica führte Sound in Version 3 (1996) ein und verwendete daher OSS für seine * nix-Varianten. Dies ist immer noch der Fall, obwohl OSS in fast jeder Linux-Variante nicht mehr die Standardeinstellung ist. Wenn wir dies wissen, erhalten wir eine mögliche Lösung: Verwenden Sie eine OSS-Emulationsebene (siehe z . B. http://wiki.debian.org/SoundFAQ ).

Am einfachsten ist es, eine Emulation im Userspace-Modus zu verwenden und Mathematica auszuführen aoss

aoss mathematica

oder das PulseAudio-Äquivalent

padsp mathematica

Das Problem bei beiden ist, dass es nur mit MIDI-Sounds funktioniert, nicht mit gesampelten Sounds. Zumindest gilt dies für mein Ubuntu 10.10-System und das Linux-System von Scott Kruger (vom WRI Technical Support- Team). Zu diesem Problem wurde ein Fehlerbericht eingereicht.

Alternativ können Sie die OSS-Kompatibilität in Ihren Kernel laden

apt-get install alsa-oss
modprobe snd_pcm_oss
modprobe snd_mixer_oss

und Sie können hinzufügen snd_pcm_ossund snd_mixer_osszu /etc/modules ihnen beim Booten zu laden. Diese Module sind in Ubuntu 10.10 nicht ohne weiteres verfügbar, da sie beschlossen haben, die Abwärtskompatibilität zu entfernen. Ich kann das oben genannte nicht testen, ohne meinen Kernel neu zu kompilieren ...


Da die oben genannte OSS-Emulation derzeit nicht einwandfrei funktioniert, finden Sie hier einige schnelle Umgehungen, die auf einigen der Diskussionen basieren, die ich gesehen habe (z. B. a b c ) und die neu geschrieben wurden, um Standard-ALSA-Befehle zu verwenden.

Verwenden Sie für gesampelten Sound aplay:

ALSASound[snd_, "WAV"] := Module[{playCmd = "aplay", soundFileName},
  soundFileName = "/dev/shm/" <> ToString[Unique["MmaSound"]] <> ".wav";
  playCmd = playCmd <> " " <> soundFileName;
  Export[soundFileName, snd, "WAV"];
  Run["(" <> playCmd <> ";" <> "/bin/rm -f " <> soundFileName <> ")&"];]

zB , ALSASound[Play[Sin[1000 t^2], {t, 0, 1}], "WAV"].
Sie sollten auch in der Lage sein, Exportdirekt auf das entsprechende /dev/snd/Gerät zuzugreifen ... aber ich konnte das nicht zum Laufen bringen.

Zur midiVerwendung aplaymidi. Damit dies funktioniert, muss eine Art Software- / Hardware-Midi-Synthesizer installiert sein. Ich habe timidityauf Port 128 ausgeführt. ( Hilfe finden Sie hier )

ALSASound[snd_, "MIDI"] := 
 Module[{playCmd = "aplaymidi", port = "128:0", soundFileName},
  soundFileName = "/dev/shm/" <> ToString[Unique["MmaSound"]] <> ".mid";
  playCmd = playCmd <> " -p " <> port <> " " <> soundFileName;
  Export[soundFileName, snd, "MIDI"];
  Run["(" <> playCmd <> ";" <> "/bin/rm -f " <> soundFileName <> ")&"];]

z.B, ALSASound[Sound[SoundNote /@ CharacterRange["A", "G"]], "MIDI"]

Sie können jetzt den entsprechenden ALSASoundBefehl um jedes Soundobjekt wickeln . Sie könnten auch neu definieren Playzu verwenden ALSASound:

SetOptions[Play, DisplayFunction -> ((ALSASound[#, "WAV"]; #) &)];

Dies entspricht im Wesentlichen dem Festlegen von $ SoundDisplayFunction , wie von vielen Diskussionen im Internet empfohlen. Diese Optionseinstellung spielt den Ton ab und gibt dann die normalen Grafiken aus.

Play[Sin[1000 t^2], {t, 0, 1}]

abspielen

Die Start / Stopp-Tasten funktionieren jedoch nicht, da sie auf basieren EmitSound.

Beep[]Versuchen Sie es mit einem einfachen Äquivalent

ALSABeep[] := Play[Sin[5000 t], {t, 0, .1}, 
                   DisplayFunction -> (ALSASound[#, "WAV"]&)]

Wenn Sie schließlich das Festival Text-to-Speech (oder ein anderes Text-to-Speech- Programm) installieren , können Sie die Mathematica- SpeakFunktionalität ersetzen , z.

FestivalSpeak[str_String] := (Run["(echo \"" <> str <> "\" | esddsp festival --tts)&"];)
FestivalSpeak[expr_] := FestivalSpeak[SpokenString[expr]]
Simon
quelle
Simon, diese Antwort hat es geschafft, vielen Dank.
Enedene
Übrigens, weiß jemand, ob Mathematica in Zukunft Sound unter Linux unterstützen will? Ich würde vermuten, dass es sich um bestimmte Software handelt, bei der der Prozentsatz der Benutzer unter Linux viel höher ist als bei den meisten anderen Programmen.
Enedene
@enedene: Ich habe heute diese Frage der WRI-Unterstützung gestellt. Hoffentlich bekommen wir in den nächsten Tagen eine Antwort ...
Simon
Danke Simon, du warst hilfreich. Wenn Sie eine Antwort erhalten, posten Sie diese bitte hier oder geben Sie einen Link an.
Enedene
@enedene: Ich habe eine hilfreiche Antwort vom WRI-Support erhalten. Siehe die Bearbeitung!
Simon