<para>Для воспроизведения звуков &kde; использует &arts;, а &arts; - драйверы ядра &Linux;: <acronym>OSS</acronym> или <acronym>ALSA</acronym> (с эмуляцией <acronym>OSS</acronym>). Всё будет работать, если они поддерживают вашу звуковую карту и она правильно настроена (т.е. другие приложения &Linux; могут производить звуки). Однако, с конкретным оборудованием могут возникнуть проблемы, об этом можно прочитать <link linkend="faq-hardware-specific">в разделе о проблемах с оборудованием </link>. </para>
<para>Кроме того, мы постоянно расширяем список поддерживаемых платформ. Это список для последней версии, если вашей там не оказалось, попробуйте портировать &arts; на нее. </para>
<para>Проверьте, собрано ли приложение &artsd; с поддержкой <filename>libaudiofile</filename> (<userinput><command>ldd</command> <parameter>artsd</parameter></userinput>). Если нет, скачайте пакет tdesupport и скомпилируйте всё ещё раз. Будет работать. </para>
<para>На то, могут ли пользователи включать звук, влияют права в файле <filename class="devicefile">/dev/dsp</filename>. Чтобы дать права всем пользователям , сделайте следущее: </para>
<para>Или вы можете открыть окно терминала и набрать команду <userinput><command>chmod</command> <option>666</option> <parameter>/dev/dsp</parameter></userinput>. </para>
<para>Для ограничения прав доступа конкретных пользователей используйте права групп. В некоторых дистрибутивах &Linux;, к примеру, в Debian/Potato, право доступа к <filename class="devicefile">/dev/dsp</filename> имеет группа <systemitem class="groupname">audio</systemitem>, вам остаётся только добавить в эту группу пользователей. </para>
<para>Есть и другие устройства для воспроизведения звука, к которым обращаются мультимедиа-приложения. Настраивать их можно так же, т. е. давать право доступа всем пользователям или группе. Этот список может быть и неполным (к тому же, есть устройства вроде <filename class="devicefile">midi0</filename>, <filename class="devicefile">midi1</filename>, ...: здесь перечислены только имена с 0). </para>
<para>Прежде всего, попробуйте установить параметры по умолчанию в &kcontrol; (или, если вы начинаете работу в ручном режиме, не задавайте дополнительных параметров, кроме <userinput><option>-F</option><parameter>10</parameter> <option>-S</option><parameter>4096</parameter></userinput> для задержки). Наиболее высокая вероятность ошибки в <emphasis>двустороннем режиме</emphasis>, поэтому постарайтесь его отключить. </para>
<para>Хороший способ понять, почему &artsd; не запускается (или работает с ошибками) - это запустить его вручную. Откройте окно &konsole; и сделайте следущее: </para>
<para>Вы, возможно, получите объяснение того, почему &artsd; не запускается. Или, если во время работы возникают ошибки, вы увидите, <quote>где</quote> они. Если хотите сообщить об ошибке, вложите лог с <command>gdb</command> и/или <command>strace</command>. </para>
<para>Вы не сможете переместить &arts; без проблем. Дело в том, что информация о расположении скомпилированного &artsd; хранится в &artswrapper; (это необходимо для обеспечения безопасности). Однако вы можете заставить перемещённый &artsd; хотя бы находить компоненты, для этого используйте файл <filename>.mcoprc</filename> (TraderPath/ExtensionPath entries). Подробности - в <link linkend="the-mcoprc-file">главе о файле <filename>.mcoprc</filename></link>. </para>
<para>В официальной версии содержатся две ошибки, влияющие на &arts;. Первая - gcc-3.0 bug c++/2733 относительно безобидна (и должна справляться с проблемами инструкций ассемблера). Она прерывает компиляцию convert.cc и исправлена в gcc-3.0 CVS. Ее не должно быть в gcc-3.0.1 и выше. Также была доработана CVS-версия KDE/aRts. </para>
<para>Вторая - gcc-3.0 bug, c++/3145 (генерация неправильного кода для некоторых случаев множественного виртуального наследования) гораздо важнее. Такие приложения, как &artsd;, не будут запускаться после компиляции с gcc-3.0. Даже если в gcc-3.0 что-то исправили за время написания этого FAQ, &artsd; всё равно очень часто и непредсказуемо прекращает работу. </para>
<para>Этот раздел ещё не закончен. Если вы знаете, какие приложения работают (или не работают) с &arts;, напишите автору, чтобы дополнить списки. </para>
<para>Так как звуковой сервер &arts; запускается вместе с &kde;, он использует звуковую карту. Если сервер бездействует 60 секунд, он автоматически прекращает работу и освобождает устройство. </para>
<para>Если вы запускаете artsd с панели управления KDE время ожидания по умолчанию будет 60 секунд. Если же из командной строки, нужно указывать егос помощью параметра -s. </para>
<para>При использовании двустороннего режима сервер не отключается. Выключите его в &kcontrol;. Это вообще хорошая мысль, если вы используете &arts; только для прослушивания музыки, а не для записи. </para>
<para>Звуковой выход будет перенаправляться в &arts;. Так вы не внесёте каких-либо изменений в ваши приложения. Вообще говоря, это уловка, и некоторые приложения могут не работать, или не будут использоваться все возможности звуковой карты. </para>
<para>Вам нужна последняя версия библиотеки glibc; &artsdsp; не работает на более ранних дистрибутивах &Linux;. К примеру, в Debian 2.1 (основанный на glibc 2.0) он не работает, а в Debian 2.2 (основанный на glibc 2.1.3) работает. </para>
<para>Нет. Использование &artsdsp; может вылиться в большую задержку и более активное использовании процессора, чем при использовании &arts; <acronym>API</acronym>. Если всё-таки какое-то приложение не работает, это ошибка в &artsdsp;. Техника, применяемая в &artsdsp;, если она правильно реализована, должна позволять <emphasis>каждому</emphasis> приложению работать (включая такие объёмные приложения, как <application>Quake</application> 3). </para>
<para>Вы можете подождать, пока отключится &artsd;, или отключить его самостоятельно. Для этого наберите в командной строке <userinput><command>artsshell</command> <option>suspend</option> </userinput>. Если в данный момент не работают никакие приложения &arts;, сервер отключится (и вы не сможете их запустить). </para>
<para>Если сервер занят, попробуйте грубый, но эффективный метод: </para>
<para>Если вы работаете с приложениями &kde; 1.x, которые воспроизводят звук через звуковой сервер &kde; 1, запустите <application>kaudioserver</application>. Это делается так же, как и для не-&arts; приложений. </para>
<para>Вам нужно установить kaudioserver (взятый из того же источника, что и ваши приложения для &kde; 1.x), он принадлежит &kde; 1.x, а не &kde; 2. </para>
<para>Выход такой же, как и с приложениями <application>kaudioserver</application>. Вам нужно запустить сервер esd (это можно сделать с помощью &artsdsp;), тогда все приложения, поддерживающие <acronym>ESD</acronym>, будут работать: </para>
<para>для глобальной поддержки ESD в KDE, настройте artsd на работу с esd в разделе Центра управления Звук -> Звуковой сервер -> Ввод-вывод звука. </para>
<para>Скорее всего, это не ошибка, но паузы говорят о том, что ядро &Linux; не справляется с работой в режиме реального времени. Могут возникнуть ситуации, когда &arts; не сможет продолжать воспроизведение. Вы, однако, можете дать права реального времени (в &kcontrol;) и уменьшить задержку (<guilabel>250ms</guilabel> или <guilabel>не важно</guilabel>), чтобы улучшить ситуацию. </para>
<para>Статья помощи по этому параметру в &kcontrol;, возможно, введёт вас в заблуждение. Чем меньше значение, тем меньше времени требуется &arts;, чтобы ответить на внешние события (т.е. время после закрытия окна и до воспроизведения звука), тем больше требуется ресурсов процессора и тем больше вероятность выпаданий.</para>
<para>Если вы пользуетесь драйвером <acronym>IDE</acronym>, напишите команду <command>hdparm</command> для переключения <acronym>IDE</acronym> в режим <acronym>DMA</acronym>. Это работает не для всех устройств и, возможно, будет трудно вернуться в начальное сотояние или, в очень редких случаях, будут потеряны данные. Чтобы узнать подробности, прочтите документацию по команде <command>hdparm</command>. У меня всё получилось с командой: </para>
<para>Вам нужно будет проделывать это при каждом запуске системы. Возможно, вы захотите добавить её в сценарий запуска системы (это зависит от дистрибутива, в Debian &Linux; он обычно находится в <filename>/etc/rc.boot</filename>). </para>
<para>Убедитесь в том, что artswrapper действительно установлен suid <systemitem class="username">root</systemitem>, как это должно быть. Во многих дистрибутивах (SuSE7.x, к примеру) это не делается. Проверить это можно так: ls -l $(which artswrapper). Хорошо: <screen>
</screen> Если у вас нет s, его можно получить с помощью: <screen><prompt>%</prompt> <userinput><command>chown</command> <option>root</option> <parameter>$(which artswrapper)</parameter></userinput>
<para>Если вы сделаете &artswrapper; SUID <systemitem class="username">root</systemitem>, это, скорее всего, улучшит качество воспроизведения, удаляя паузы. Однако риск того, что ошибка в коде или злобный пользователь вызовут прерывание программы (или что-нибудь поломают), увеличится. К тому же, в машинах, на которых работают несколько пользователей, приоритет хорошего качества звука может привести к ухудшению работы компьютера, если кто-то будет пытаться его использовать <quote>продуктивно</quote>.</para>
<para>Проверьте настройки времени ответа. Хотя текущая версия ещё не оптимизирована. Мы работаем над этим, но сказать, насколько быстрее будет &artsd;, не можем. </para>
<para>Включите её в &kcontrol; настройках <guilabel>Звуковая подсистема</guilabel> (<guilabel>Обмениваться информацией о безопасности и идентификации через сервер X11</guilabel> и <guilabel>Принимать сетевые запросы</guilabel>). Скопируйте <filename>.mcoprc</filename> на все машины, на которых сервер должен принимать запросы из сети. Зайдите в систему ещё раз. Убедитесь в том, что узлы обращаются друг к другу по имени (т.е. у них есть разрешимые имена или они находятся в <filename>/etc/hosts</filename>). </para>
<para>Это всё, что надо сделать. Если всё-таки не работает, вот несколько замечаний. &arts; и &artsd; должны быть запущены только на узле со звуковой картой (где и будет воспроизводиться звук). Они могут запускаться при входе в &kde; (если вы это указали в &kcontrol;) или вручную: </para>
<para>на всех машинах для поддержки работы в сети. Это включается при установке флажка <guilabel>Обмениваться информацией о безопасности и идентификации через сервер X11</guilabel> на панели управления. </para>
<para>Наконец, в любой версии &kde; серии 2.0.x есть ошибка, возникающая, если вы не указали имя домена. Клиенты &artsd; пытаются найти, куда можно подключиться, используя комбинацию <systemitem class="systemname"><replaceable>имя узла</replaceable>.<replaceable>имя домена</replaceable></systemitem>. Если имя домена пустое, они будут подключаться к <systemitem class="systemname"> <replaceable>имени узла</replaceable></systemitem>. (заметьте, дополнительная точка). Добавление такой записи в <filename>/etc/hosts</filename> (т.е. <userinput>orion.</userinput>, если имя узла <systemitem class="systemname">orion</systemitem>) решит проблему. </para>
<para>Если у вас есть исходный код &kde;, зайдите в <filename class="directory">tdelibs/arts/examples</filename>, и запустите <userinput><command>make</command> <option>check</option></userinput>, чтобы скомпилировать некоторые программы, включая <application>referenceinfo</application>. После этого запустите </para>
<para>Будут выведены имя узла и используемый &arts;. К примеру, <computeroutput>tcp:orion:1698</computeroutput> значит, что любой клиент, пытающийся использовать прозрачность сети, должен знать, как подключиться к узлу <systemitem class="systemname">orion</systemitem>. </para>
<para>Не все звуковые драйверы Linux хорошо работают с aRts в некоторых версиях ядра. Ознакомьтесь с этим списком, прежде чем сообщать об ошибке. Если же вы встретились с чем-либо, отсутствующим в списке, сразу же сообщите об этом. <informaltable> <tgroup cols="4">
<para>Обычная поблема - драйвер не предоставляет достаточно информации aRts (или даёт неправильную) о том, когда нужно писать звуковые данные. Большинство драйверов OSS предоставляют правильные данные, но не все. </para>
<para>Вы, возможно, заметили, что не всем приложениям (как xmms) нужна эта информация, поэтому они работают нормально даже с вашей звуковой картой. Но для &arts; она необходима, поэтому artsd выполняется с ошибками. Это ошибка в драйвере, а не в &arts;. </para>
<para>Есть два варианта поведения artsd при запуске с некорректным драйвером. Во-первых, он постоянно пытается передать новые данные, но безуспешно. В результате потребляются все ресурсы процессора, выводится отчёт о <emphasis>перегрузке cpu</emphasis>, и приложение закрывается. Другое дело, когда artsd получает неправильную информацию о том, какой объем данных нужно записать. Тогда он прекращает работать на примерно такой <emphasis>проверке</emphasis>: <screen>artsd: audiosubsys.cc:458: void Arts::AudioSubSystem::handleIO(int):
<para>Обычно artsd узнаёт, когда надо записывать новые данные, с помощью функции select(). Потом используется ioctl(...GETOSPACE...) для поиска объема данных для записи. И, наконец, данные записываются. </para>
<para>Проблемы возникают тогда, когда artsd постоянно работает или объём данных для записи слишком мал. В документации OSS указано, то select() только запускает процесс, если есть хоть что-то для записи, к примеру, один байт. Тогда запись данных продолжается небольшими частями, что очень трудоёмко, и в результате процессор перегружается. </para>
<para>Чтобы такого не происходило, драйвер должен вызывать artsd только тогда, когда есть целый фрагмент информации для записи. </para>
<para>Обычно artsd узнаёт, когда надо записывать новые данные, с помощью функции select(). Потом используется ioctl(...GETOSPACE...) для поиска объема данных для записи. И, наконец, данные записываются. </para>
<para>Если artsd не может записать тот объём информации, которы указан в ioctl, будет выдаваться эта ошибка. Чтобы исправить ситуацию, драйвер должен предоставлять правильную информацию. </para>
<para>Обычно так получается при использовании старых структур или модулей, которые не поддерживаются версией &kde; 2. К сожалению, информация об &arts;-0.3.4.1 устарела. Самой распространённой ошибкой является выполнение структуры &arts-builder;, приводящей к ошибке <errorname>[artsd] Synth_PLAY: audio subsystem is already used.</errorname> </para>
<para>Следует использовать модуль Synth_AMAN_PLAY вместо Synth_PLAY. Прочитайте файл помощи &arts-builder; (нажмите <keycap>F1</keycap> в &arts-builder;). </para>
<para>В последних версиях &arts-builder; (&kde; 2.1 beta 1 и позднее) есть примеры, которые вы можете использовать. </para>