내가 아는 한 Mathematica는 Linux에서 실제로 사운드를 지원하지 않았습니다.
이 명령 Play은 버전 3에서 도입되었으며 전체 사운드 시스템이 버전 6에서 점검되었습니다. comp.soft-sys.math.mathematica를 검색하면 버전 3으로 돌아가는 질문이 있습니다. 명령 EmitSound이 도입되었습니다. 이것은 현재 대부분의 Mathematica 사운드 생성의 기초가되지만 EmitSound, 사운드를 프론트 엔드로 전달하기 전에 일부 전처리 (어떤 유형의 객체가 제공되는지 파악)를하기 때문에 리눅스에서이를 고치거나 해킹하는 빠른 방법을 찾을 수 없었 습니다. 평가하십시오.
대부분의 Linux 설치에서 사용되는 기본 사운드 드라이버 / API는 ALSA ( wiki )입니다. 2002 년 리눅스 커널 2.6에서 기본값이되었으며 OSS 는 "감가 상각 됨"으로 표시되었습니다 (OSS는 여전히 개발 중이지만). 많은 Linux 배포판에서 이제
기본 ALSA 사운드 위에있는 PulseAudio 를 사용 합니다 . (리눅스 사운드에 대해 잘 알고있는 사람은 자유롭게 편집하십시오!)
Mathematica는 버전 3 (1996)에서 사운드를 도입하여 * nix 변형에 OSS를 사용했습니다. 거의 모든 Linux 변형에서 OSS가 더 이상 기본값이 아니더라도 여전히 그렇습니다. 이를 알면 가능한 해결책을 얻을 수 있습니다. OSS 에뮬레이션 레이어를 사용하십시오 (예 : http://wiki.debian.org/SoundFAQ 참조 ).
가장 간단한 방법은 사용자 공간 모드 에뮬레이션을 사용하고 다음을 통해 Mathematica를 실행하는 것입니다. aoss
aoss mathematica
또는 PulseAudio 해당
padsp mathematica
이 두 가지 문제는 샘플 사운드가 아닌 MIDI 사운드에서만 작동한다는 것입니다. 적어도 이것은 Ubuntu 10.10 시스템과 Scott Kruger의 Linux 시스템 ( WRI 기술 지원 팀)에서 사실입니다. 이 문제에 대한 버그 보고서가 제출되었습니다.
또는 OSS 호환성을 커널에로드 할 수 있습니다
apt-get install alsa-oss
modprobe snd_pcm_oss
modprobe snd_mixer_oss
당신은 추가 할 수 있습니다 snd_pcm_oss및 snd_mixer_oss위해 /etc/modules
boottime에 그들을로드. 이 모듈은
이전 버전과의 호환성을 제거하기로 결정했기 때문에 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. 이것이 작동하려면 일종의 소프트웨어 / 하드웨어 미디 신디가 설치되어 있어야합니다. 내가 한 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]]