У меня есть огромный набор событий в Mathematica, на которые мне нужно реагировать, и не всегда проверять это, тем более что события случайным образом распределяются во времени.
Поэтому я хотел добавить простой звук, чтобы напомнить мне, чтобы пойти проверить событие. Я хотел использовать, Beep[]
но я не получил результатов, на самом деле, я до сих пор не осознал, что Mathematica не издает никаких звуков вообще.
Я использую Debian Squeeze Stable и у меня нет проблем с другими приложениями, использующими звук.
Это влияет на все последние версии (7, 8 и 9) Mathematica и, возможно, более старые версии в зависимости от настройки звука вашей системы.
linux
audio
mathematica
enedene
источник
источник
Ответы:
Насколько я знаю, Mathematica никогда не поддерживала звук в Linux.КомандаPlay
была введена в версии 3, а вся звуковая система была пересмотрена в версии 6. Если вы будете искать в comp.soft-sys.math.mathematica, вы найдете вопросы, начиная с версии 3. В версии 6 КомандаEmitSound
была введена. Теперь это лежит в основе большей части генерации звука в Mathematica, но я не смог найти быстрый способ исправить / взломать его для linux, так какEmitSound
выполняет некоторую предварительную обработку (выясняя, какие типы объектов ему были даны) перед передачей звука во внешний интерфейс для оценить.Звуковой драйвер / API по умолчанию, используемый в большинстве установок linux, - ALSA ( wiki ). Это стало по умолчанию в 2002 году в ядре Linux 2.6, и OSS был помечен как «устаревший» (хотя OSS все еще находится в активной разработке). Многие дистрибутивы Linux теперь используют PulseAudio, который находится поверх основного звука ALSA. (Любой, кто лучше разбирается в звуке Linux, может свободно редактировать это!)
Mathematica представила звук в версии 3 (1996) и, таким образом, использовала OSS для своих * nix вариантов. Это все еще так, несмотря на то, что OSS больше не используется по умолчанию практически в любом варианте Linux. Знание этого дает нам возможное решение: использовать слой эмуляции OSS (см., Например, http://wiki.debian.org/SoundFAQ ).
Самое простое - использовать эмуляцию режима пространства пользователя и запустить Mathematica через
aoss
или эквивалент PulseAudio
Проблема с обоими из них заключается в том, что он работает только со звуками MIDI, а не с сэмплированными звуками. По крайней мере, это верно для моей системы Ubuntu 10.10 и системы linux Скотта Крюгера (из команды технической поддержки WRI ). Сообщение об ошибке было подано по этому вопросу.
Кроме того, вы можете загрузить совместимость OSS в ваше ядро
и вы можете добавить
snd_pcm_oss
иsnd_mixer_oss
к/etc/modules
загружать их при каждой загрузке. Эти модули недоступны в Ubuntu 10.10, поскольку они решили удалить обратную совместимость. Я не могу проверить выше, не перекомпилировав мое ядро ...Поскольку вышеупомянутая эмуляция OSS в настоящее время не работает идеально, вот несколько быстрых решений, основанных на некоторых обсуждениях, которые я видел (например, a b c ), и переписанных для использования команд ALSA по умолчанию.
Для сэмплированного звука используйте
aplay
:например,
ALSASound[Play[Sin[1000 t^2], {t, 0, 1}], "WAV"]
.Вы также должны иметь возможность
Export
прямо на соответствующее/dev/snd/
устройство ... но я не мог заставить это работать.Для
midi
использованияaplaymidi
. Чтобы это работало, вам нужен какой-то программно-аппаратный Midi-синтезатор. Яtimidity
использую порт 128. (Смотрите здесь для помощи)например,
ALSASound[Sound[SoundNote /@ CharacterRange["A", "G"]], "MIDI"]
Теперь вы можете обернуть соответствующую
ALSASound
команду вокруг любого звукового объекта. Вы также можете переопределить,Play
чтобы использоватьALSASound
:По сути, это эквивалентно установке $ SoundDisplayFunction , как рекомендовано многими дискуссиями в Интернете. Эта опция будет воспроизводить звук, а затем выводить обычную графику.
но кнопки старт / стоп не будут работать, так как они основаны на
EmitSound
.Чтобы сделать простой
Beep[]
эквивалент, попробуйтеНаконец, если вы установите праздничное преобразование текста в речь (или любую другую программу преобразования текста в речь ), вы можете заменить
Speak
функциональность Mathematica , например:источник