Linux에서 Mathematica에 소리가 들리지 않습니다


10

Mathematica에는 반응해야 할 거대한 이벤트가 있으며, 특히 이벤트가 무작위로 시간에 따라 배포되므로 항상 확인하는 것은 실용적이지 않습니다.
이벤트를 확인하라고 알려주는 간단한 소리를 추가하고 싶었습니다. 나는 사용하고 싶었지만 Beep[]결과를 얻지 못했습니다. 사실 지금까지 Mathematica가 소리를 내지 않습니다.

Debian Squeeze Stable을 사용하며 사운드를 사용하는 다른 응용 프로그램에는 아무런 문제가 없습니다.

이것은 시스템의 사운드 설정에 따라 Mathematica의 모든 최신 버전 (7, 8 및 9) 및 아마도 이전 버전에 영향을 미칩니다.


이것은 버전 6에서 사운드 명령 을 추가 한 이후로 Mma에서 문제가되어 왔습니다. 당시에 수정 한 것을 기억하지만 최신 버전에서는 신경 쓰지 않았습니다. 여기 에서 설명서를 사용해보십시오 .
Simon

이 질문을 수퍼 유저에게 이전해야합니까?
Simon

불행히도 여전히 소리가 들리지 않습니다.

나는 Stackoverflow의 원본 포스터입니다. 이 사이트에 대해 알려 주셔서 감사합니다.이 사이트가 존재하는지 몰랐습니다. 잘 활용할 수 있다는 것이 환상적입니다.
enedene

답변:


10

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

사이먼,이 대답은 속임수였습니다. 대단히 감사합니다.
enedene

Btw, Mathematica가 향후 Linux에서 사운드를 지원할 계획인지 아는 사람이 있습니까? 나는 그들이 리눅스에서 그것을 사용하는 사람들의 비율이 대부분의 다른 소프트웨어보다 훨씬 큰 특정 소프트웨어라고 생각합니다.
enedene

@enedene : 오늘 WRI 지원에 대한 질문을했습니다. 다음 몇 일 안에 답변을 드리겠습니다.
Simon

감사합니다. 사이먼. 답변을 받으려면 여기에 게시하거나 링크를 제공하십시오.
enedene

@enedene : WRI 지원팀으로부터 유용한 답변을 받았습니다. 편집을보십시오!
Simon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.