내가 아는 한 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]]