LinuxのMathematicaで音が出ない


10

Mathematicaには対応する必要のある膨大なイベントのセットがあり、特にイベントが時間的にランダムに分散されるため、常にチェックすることは現実的ではありません。
だから、イベントをチェックしに行くことを思い出させるために、シンプルなサウンドを追加したかったのです。使用したかっBeep[]たのですが、結果が出ません。実際、Mathematicaがまったく音を出していないことに気づきませんでした。

私はDebian Squeeze Stableを使用しており、サウンドを使用する他のアプリケーションに問題はありません。

これは、システムのサウンド設定に応じて、Mathematicaの最近のすべてのバージョン(7、8、9)とおそらく古いバージョンに影響します。


Mma がバージョン6でサウンドコマンドを追加して以来、これは問題でした。その時点で修正したことを覚えていますが、最近のバージョンでは問題になりませんでした。こちらのドキュメントをお試しください。
Simon

この質問をスーパーユーザーに移行する必要がありますか?
Simon

残念ながらまだ音が出ません。

Stackoverflowの元のポスターです。このサイトについて教えてくれてありがとう、私はこのサイトが存在することを知りませんでした。うまく利用できたのは素晴らしいことです。
eneden

次も参照してください:unix.stackexchange.com/q/15191/2842
Simon

回答:


10

私の知る限り、MathematicaはLinuxのサウンドを実際にサポートしたことはありません。 このコマンドPlayはバージョン3で導入され、サウンドシステム全体がバージョン6でオーバーホールされました。comp.soft-sys.math.mathematicaを検索すると、バージョン3までさかのぼって質問が見つかります。バージョン6では、コマンドEmitSoundが導入されました。これは現在、ほとんどのMathematicaサウンド生成の基礎となっEmitSoundていますが、サウンドをフロントエンドに渡す前にいくつかの前処理(与えられたオブジェクトのタイプを設定する)を行うため、Linux用にすばやく修正/ハックする方法を見つけることができませんでした。評価する。

ほとんどのLinuxインストールで使用されるデフォルトのサウンドドライバ/ APIはALSAwiki)です。Linuxカーネル2.6では2002年にデフォルトになり、OSSは「非推奨」とマークされました(ただし、OSSはまだ開発中です)。多くのLinuxディストリビューションは現在 、基になるALSAサウンドの上にあるPulseAudioを使用しています。(Linuxサウンドをよく理解している人なら、自由に編集してください!)

Mathematicaはバージョン3(1996)でサウンドを導入したため、* nixバリアントにOSSを使用しました。ほとんどすべてのLinuxバリアントでOSSがデフォルトではなくなったにもかかわらず、これは依然として当てはまります。これを知ることで可能な解決策が得られます:OSSエミュレーションレイヤーを使用します(例:http://wiki.debian.org/SoundFAQを参照)。

最も簡単なのは、ユーザー空間モードのエミュレーションを使用してMathematicaを実行することです aoss

aoss mathematica

またはPulseAudio相当

padsp mathematica

これらの両方の問題は、サンプリングされたサウンドではなく、MIDIサウンドでのみ機能することです。少なくとも、これは私のUbuntu 10.10システムと(WRIテクニカルサポートチームの)スコットクルーガーのLinuxシステムには当てはまります。この問題についてバグレポートが提出されています。

または、カーネルにOSS互換性をロードすることもできます

apt-get install alsa-oss
modprobe snd_pcm_oss
modprobe snd_mixer_oss

あなたが追加することができますsnd_pcm_osssnd_mixer_ossして/etc/modules ブート時の時にそれらをロードします。これらのモジュールは 、下位互換性を削除することを決定したため、Ubuntu 10.10ではすぐには利用できません。カーネルを再コンパイルせずに上記をテストすることはできません...


上記のOSSエミュレーションは現在、完全に動作していないので、ここで私が見てきた議論のいくつか(例えば、に基づいた迅速な回避策のカップルのbはcが)とデフォルトのALSAのコマンドを使用するようにリライト。

サンプリングされたサウンドには、次を使用します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 <> ")&"];]

例えば、ALSASound[Play[Sin[1000 t^2], {t, 0, 1}], "WAV"]
またExport、適切な/dev/snd/デバイスに直接アクセスできるはずです...しかし、私はそれを機能させることができませんでした。

以下のためのmidi使用aplaymidi。これを機能させるには、何らかのソフトウェア/ハードウェアmidiシンセがインストールされている必要があります。私がしているtimidityポート128上で実行されている(参照してくださいここで助けを求めて)

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 <> ")&"];]

例えば、 ALSASound[Sound[SoundNote /@ CharacterRange["A", "G"]], "MIDI"]

ALSASoundこれで、サウンドオブジェクトを適切なコマンドで囲むことができます。Play使用するように再定義することもできますALSASound

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

これは、インターネットに関する多くの議論で推奨されているように、基本的に$ SoundDisplayFunctionを設定することと同等です。このオプション設定はサウンドを再生し、通常のグラフィックスを出力します。

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

演奏する

ただし、開始/停止ボタンはに基づいているため機能しませんEmitSound

単純なBeep[]同等物を作るには、

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

最後に、フェスティバルの音声合成(またはその他の音声合成プログラム)をインストールすると、MathematicaのSpeak機能を置き換えることができます。たとえば、

FestivalSpeak[str_String] := (Run["(echo \"" <> str <> "\" | esddsp festival --tts)&"];)
FestivalSpeak[expr_] := FestivalSpeak[SpokenString[expr]]

サイモン、この答えはトリックをしました、ありがとうございました。
eneden

ところで、Mathematicaが将来的にLinuxでサウンドをサポートする計画があるかどうか誰か知っていますか?Linuxで使用する人の割合が他のほとんどのソフトウェアよりもはるかに多い特定のソフトウェアだと思います。
eneden

@enedene:今日、WRIサポートの質問をしました。うまくいけば、次の数日で回答が得られます...
Simon

サイモン、ありがとう。回答がありましたら、こちらに投稿するか、リンクを貼ってください。
eneden

@enedene:WRIのサポートから有益な返信がありました。編集をご覧ください!
Simon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.