Bildiğim kadarıyla, Mathematica Linux'ta sesi gerçekten hiç desteklemedi.
Komut Play, sürüm 3'te tanıtıldı ve tüm ses sistemi sürüm 6'da elden geçirildi. Comp.soft-sys.math.mathematica'yı ararsanız, sürüm 3'e kadar giden soruları bulacaksınız. komutu EmitSoundtanıtıldı. Bu, şimdi Mathematica ses üretiminin çoğunun altında duruyor, ancak linux için düzeltmenin / hacklemenin hızlı bir yolunu bulamadım, çünkü EmitSoundsesi ön tarafa geçirmeden önce bazı ön işlemler (ne tür nesnelerin verildiğini belirleme) yapıyor değerlendirmek.
Çoğu linux kurulumunda kullanılan varsayılan ses sürücüsü / API ALSA'dır ( wiki ). Linux çekirdeği 2.6'da 2002'de varsayılan oldu ve OSS "amortismana tabi tutuldu" olarak işaretlendi (OSS hala aktif geliştirme aşamasındadır). Birçok Linux dağıtımı artık
temel ALSA sesinin üstünde yer alan PulseAudio'yu kullanıyor . (Linux sesini daha iyi anlayan herkes bunu düzenlemekten çekinmeyin!)
Mathematica, sürüm 3 (1996) 'da ses getirdi ve böylece * nix varyantları için OSS kullandı. Neredeyse herhangi bir Linux varyantında OSS artık varsayılan olmamasına rağmen, bu hala geçerlidir. Bunu bilmek bize olası bir çözüm sunar: bir OSS öykünme katmanı kullanın (bkz. Örneğin, http://wiki.debian.org/SoundFAQ ).
En basit olanı, bir kullanıcı alanı modu öykünmesini kullanmak ve Mathematica'yı aoss
aoss mathematica
veya PulseAudio eşdeğeri
padsp mathematica
Her ikisinin de sorunu, örneklenmiş seslerle değil, sadece MIDI sesleriyle çalışmasıdır. En azından bu benim Ubuntu 10.10 sistemim ve Scott Kruger'in ( WRI Teknik Destek ekibinin) linux sistemi için geçerli . Bu konuda bir hata raporu sunuldu.
Alternatif olarak, OSS uyumluluğunu çekirdeğinize yükleyebilirsiniz
apt-get install alsa-oss
modprobe snd_pcm_oss
modprobe snd_mixer_oss
ve ekleyebilir snd_pcm_ossve snd_mixer_ossiçin /etc/modules
MySQL'i de bunları yüklemek için. Bu modüller
, geriye dönük uyumluluğu kaldırmaya karar verdikleri için Ubuntu 10.10'da mevcut değildir . Çekirdeğimi derlemeden yukarıdakileri test edemiyorum ...
Yukarıdaki OSS öykünmesi şu anda mükemmel çalışmadığından, burada gördüğüm bazı tartışmalara (örneğin, a b c ) dayanan ve varsayılan ALSA komutlarını kullanmak için yeniden yazılmış birkaç hızlı çözüm bulunmaktadır .
Örneklenen ses için aplayşunları kullanın :
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 <> ")&"];]
ör ALSASound[Play[Sin[1000 t^2], {t, 0, 1}], "WAV"].
Ayrıca Exportuygun /dev/snd/cihaza da doğru yönelebilmelisin ... ama çalışamadım.
İçin midikullanım aplaymidi. Bunun çalışması için bir çeşit yazılım / donanım midi synth'in kurulu olması gerekir. Ben var timidityport 128. çalışan (Bkz buraya yardım için)
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 <> ")&"];]
Örneğin, ALSASound[Sound[SoundNote /@ CharacterRange["A", "G"]], "MIDI"]
Artık uygun ALSASoundkomutu herhangi bir ses nesnesinin etrafına sarabilirsiniz . Ayrıca yeniden tanımlamak olabilir Playkullanmak ALSASound:
SetOptions[Play, DisplayFunction -> ((ALSASound[#, "WAV"]; #) &)];
Bu, internetteki tartışmaların birçoğu tarafından önerildiği gibi , $ SoundDisplayFunction ayarı ile eşdeğerdir . Bu seçenek ayarı sesi çalacaktır, ardından normal grafikleri çıkaracaktır.
Play[Sin[1000 t^2], {t, 0, 1}]

ancak başlat / durdur düğmeleri çalışmadığı için çalışmaz EmitSound.
Basit bir Beep[]eşdeğer yapmak için şunu deneyin:
ALSABeep[] := Play[Sin[5000 t], {t, 0, .1},
DisplayFunction -> (ALSASound[#, "WAV"]&)]
Son olarak, festival metinden konuşmaya (veya başka bir metinden konuşmaya programına) yüklerseniz , Mathematica Speakişlevini, ör.
FestivalSpeak[str_String] := (Run["(echo \"" <> str <> "\" | esddsp festival --tts)&"];)
FestivalSpeak[expr_] := FestivalSpeak[SpokenString[expr]]