# Pro Audio (日本語)

関連記事

- Unofficial user repositories
- envy24control

## イントロダクション

現代の Linux システムは（セミ）プロフェッショナルオーディオのニーズを十二分にサポートすることが出来るようになっています。適当なハードウェアと正しい設定をすれば 5ms のレイテンシを 1ms まで小さくすることが可能です。DAW (デジタルオーディオワークステーション) にあわせて産業用レーザーを動かすことさえ不可能ではありません。

Arch Linux がレコーディング・ミキシング・マスタリング・サウンドデザイン・DSP プログラミングなどのための専用マシンを作るにふさわしい"フレームワーク"を優れたユーザーたちに提供すると私たちは信じています。しばしば、"linux のオーディオユーザー"が"制作環境"を考慮するとき、"Gentoo" が候補に上がってくることがあります。どうしてそのような誤った考えが出てくるのかは不明ですが、言うまでもなく、"コンパイル"と"学習"そして"パフォーマンス"は "Cubase と Pro Tools の表現の質の違い" くらいにしか互いに関係していません。

### Arch Linux のプロオーディオ

- バイナリベース

Arch は主としてバイナリパッケージで構成される（メタ）ディストリビューションです。その上に簡単なソースベースのパッケージ管理システムが付いています。時間と CPU サイクルを浪費する必要はありません、あなたはただそれをやるだけです (you just work™)。これは下の"サードパーティのリポジトリ"につながっています。

- KISS

Arch の哲学はパッケージが出来る限り vanilla (オリジナルの状態) であることを要求しています。上流のソフトウェア開発者がのぞむことをそのまま実現しています。パッケージの名前は現実的で率直でありヘッダーは全て入っています。新しい Linux のオーディオアプリケーションをビルドするときに開発用ファイルが存在しないと頭を痛めることはもうありません。

- ローリングリリース

上流の計画に従って、Arch ではアップデートが素早くリリースされ古くなったものは使われなくなります。Linux のオーディオは、ある意味、実験的なパラダイムと言えます。Arch を使うことでお気に入りのオーディオソフトウェアについていくために最新の状態を保つことができます。

- プラグマティック

ソフトウェアのライセンスに関して言うと Arch はあいまいです - 公式リポジトリにはディストリビューションの自由を"汚染"するような、しかしながら人気のある・便利なパッケージが含まれています。これが可能なのは Arch が完全な"ディストリビューション"ではないためです。リリースとは実のところ基本的なパッケージだけが入ったシステムのスナップショットにすぎません。インストールをしなくとも全てのパッケージでライセンスの情報をはっきり確認できます。つまり何をインストールするのか決めるのはユーザー次第だということです。

- ABS

Arch はシンプルな BSD の Ports ライクなソースパッケージシステムを提供しており、ユーザーはビルドスクリプト ("レシピ") を使って簡単にソフトウェアをコンパイルでき、作ったバイナリはパッケージマネージャで管理することができます。こうして、古今東西のソフトウェアを、どこから取得したかは関係なく、システムによってチェックすることが可能です。新しい Linux のオーディオソフトウェアの数は絶えず増え続けているため、ソースからビルドするしかないソフトウェアを使う場合は確実にプラスになります。

- AUR

Arch には"サポートがない"ビルドスクリプトのリポジトリ (AUR) があり、誰でも登録すれば投稿することができ、即席コンパイル可能なパッケージが無数に存在します。Arch Linux のユーザーによって Arch Linux のユーザーのために作られています。何かが公開されたとして、次の日にはもう既に AUR にアップロードされている。あなたのような多くのユーザーには大きな助けになります。

- サードパーティのリポジトリ

すぐ実行できるバイナリパッケージを提供する非公式のリポジトリを使おうとしても Arch は決してユーザーを妨げません。使用するリポジトリの一覧に非公式のリポジトリを追加するだけで使うことができ、そしてその一覧は一つのファイルに記述されています。新しいオーディオリポジトリを見つけたときに "Whory Warthong", "Denim Jacket", "sources.list", "source.keys" などに困惑する心配は要りません。私たちには PEBKAC 保護装置を省略する余裕があります。なぜならユーザーは自分が何をしているのか知っているという前提があるからです。つまり特定のバイナリリポジトリを使うのかどうか決めることに"心配はない"わけです。オーディオソフトウェアのサードパーティの Arch Linux バイナリについては、こちらも参照してください。

Q: では私は Arch Linux を (DAW として) 使うべきなのですか？これまでディストリ X を使ってきたんですが..

A: 残念ながら、そのような質問に対する答えは悲観的だとお知らせします。

"Arch Linux が Archer (Arch 使い) を見つけるのではない、Archer が Arch Linux を見つけるのだ。" - Hercules on Arch and Archers

## はじめに

主要なプロオーディオアプリケーションはすでに公式やコミュニティーの Arch Linux リポジトリから利用することができます。リポジトリにないアプリケーションについては、バイナリリポジトリを追加するか (下を参照) もしくはコンパイルしたいなら AUR を検索してください。上流のリリースを直接ビルドしてもいいですが、それは LFS を動かすのとあまり変わりありません。

まずは JACK をインストールしてください。

フル機能のプロオーディオシステムを作るために以下のパッケージからインストールし始めると良いでしょう:

- qjackctl
- patchage
- ardour
- qtractor
- hydrogen
- rosegarden
- qsynth
- jsampler
- lmms
- dssi

AUR からインストールできる他のパッケージも必要になるかもしれません:

- traverso
- qsampler (Linuxsampler も参照)
- fst-git
- jost
- wineasio
- vst-bridge

### システムの設定

以下のシステムの最適化がよく使われています:

- ユーザーを audio グループに追加する。
- `threadirqs` カーネルパラメータを追加する。
- linux-rt カーネルをインストールする。
- cpufreq の governor を performance に設定する。
- noatime をファイルシステムのマウントオプションに追加する (パフォーマンスの最大化を参照)。

リアルタイムの設定は大部分が自動化されています。リアルタイムアクセスのために `/etc/security/limits.conf` などのファイルを編集する必要はもうありません。とはいえ、設定を変更する必要があるときは、`/etc/security/limits.d/99-audio.conf` や `/usr/lib/udev/rules.d/40-hpet-permissions.rules` を見て下さい (これらのファイルは jack や jack2 に含まれています)。さらに、RTC の最大割り込み周波数 (デフォルトは 64 Hz) を増やすには起動時に次を実行するようにしてください:

    echo 2048 > /sys/class/rtc/rtc0/max_user_freq
    echo 2048 > /proc/sys/dev/hpet/max-user-freq

デフォルトでは、swappiness によって定義されるスワップの頻度は 60 に設定されています。この数字を 10 にまで減らすことで、システムはディスクへの書き込みをしにくくなります。また、ファイルの変更を監視してアプリケーションにそれを報告する inotify というものがあります。大量の音声データを扱う場合、多くの対象を監視する必要がでるため、監視対象の上限を増やす必要があります。どちらの設定も `/etc/sysctl.d/99-sysctl.conf` で調整ができます。

    vm.swappiness = 10
    fs.inotify.max_user_watches = 524288

PCI サウンドカードの PCI レイテンシタイマを最大化して他の全ての PCI 周辺機器のレイテンシタイマを上げるのも効果があります (デフォルトは 64 です)。

    $ setpci -v -d *:* latency_timer=b0
    $ setpci -v -s $SOUND_CARD_PCI_ID latency_timer=ff # eg. SOUND_CARD_PCI_ID=03:00.0 (下を参照)

SOUND_CARD_PCI_ID は次のようにして取得できます:

    $ lspci ¦ grep -i audio

    03:00.0 Multimedia audio controller: Creative Labs SB Audigy (rev 03)
    03:01.0 Multimedia audio controller: VIA Technologies Inc. VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller (rev 01)

#### チェックリスト

以下はマルチメディアシステムが動作しているかの確認です:

- サウンドを正しく設定しましたか？ALSA や OSS を参照して下さい。

    $ speaker-test

- audio グループに入っていますか？ALSA や OSS を参照して下さい。

    $ groups | grep audio

- PulseAudio や OSS などがデバイスを認識していますか？

    $ lsof +c 0 /dev/snd/pcm* /dev/dsp*

もしくは

    $ fuser -fv /dev/snd/pcm* /dev/dsp*

- PAM-security や realtime が問題なく動作していますか？

参照: Realtime for Users#PAM-enabled Login (KDM, GDM, Slim を使っていない場合は特に注意をしてください)

- 全ての設定をした後に再起動しましたか？

### JACK

ここでの目的はあなたの持っているハードウェアにあわせて、バッファサイズとピリオドの最適な組み合わせを見つけることです。Frames/Period = 256 が通常の初期値です。オンボードや USB デバイスを使っている場合は、Periods/Buffer = 3 を試してみて下さい。基本的に使われる値は以下のどれかです: 256/3, 256/2, 128/3。

また、サンプルレートをハードウェアのサンプルレートと一致させて下さい。デバイスがサポートしているサンプル・ビットレートを確認するには:

    $ cat /proc/asound/card0/codec#0

card0 や codec#0 はあなたの使っているデバイスに置き換えて下さい。Extended ID の rates または VRA を見て下さい。今日の多くのデバイスで共通のサンプルレートは 48000 Hz です。他に 44100 Hz や 96000 Hz も一般的なレートです。

外部の装置を使ってレコーディングやシーケンシングをする場合はたいてい、リアルタイムが必要不可欠になります。また、priority を最大に (少なくとも `/etc/security/limits.d/99-audio.conf` に定義するシステム制限よりも10は低く) 設定すると良いでしょう。

あなたの設定したオプションを使って jack を起動してください:

    $ /usr/bin/jackd -R -P89 -dalsa -dhw:0 -r48000 -p256 -n3

qjackctl と patchage は GUI フロントエンドです。jack2 では qjackctl は必要ありません。もっと機能が少ないもので十分でしょう。ardour や patchage などのアプリケーションはクライアント接続を自分で処理してバッファサイズをスムーズに調整するからです。

Note: Once you set up JACK, try different audio applications to test your configuration results. I spent days trying to troubleshoot JACK xrun issues with LMMS which in the end turned out to be the problem with the latter.

参照: http://w3.linux-magazine.com/issue/67/JACK_Audio_Server.pdf

#### FireWire

Note: Nothing much is needed to be done as most things have been automated, especially with the introduction of the new FireWire stack, deprecation of HAL and more focus on udev. You should not need to edit device permissions, but if you suspect that your device may not be working due to such issues, see `/lib/udev/rules.d/60-ffado.rules` and if needed, create and put your changes into `/etc/udev/rules.d/60-ffado.rules`. Most often than not, your device will work with the libffado-svn development version of the driver.

JACK(2) is built against FFADO, you only need to install it with the libffado package.

To test whether you have any chances of getting FireWire devices to work:

- Ensure the proper kernel modules are loaded:

    # modprobe firewire-core firewire-ohci

- Is my chipset sane enough to initiate a device?

http://www.ffado.org/?q=node/622

- Is my chipset sane enough to make a device work to its capacity?

We cannot say for sure, particularly for those based on Ricoh (cross-platform issue). Most of the time, your device will run fine, but on occasion you will be faced with funny quirks. For unlucky ones, you will be facing hell.

#### Jack Flash

If after getting jack setup you will find that Flash has no audio.

In order to get flash to work with jack you will need to install libflashsupport-jack from the AUR.

You can also use more flexible method to allow Alsa programs (including Flash) play sound while jack is running:

First you must install the jack plugin for Alsa by installing alsa-plugins from the official repositories. Enable it by editing (or creating) `/etc/asound.conf` (system wide settings) to have these lines:

    # convert alsa API over jack API
    # use it with
    # % aplay foo.wav

    # use this as default
    pcm.!default {
        type plug
        slave { pcm "jack" }
    }

    ctl.mixer0 {
        type hw
        card 1
    }

    # pcm type jack
    pcm.jack {
        type jack
        playback_ports {
            0 system:playback_1
            1 system:playback_2
        }
        capture_ports {
            0 system:capture_1
            1 system:capture_2
        }
    }

You do not need to restart your computer or anything. Just edit the alsa config files, start up jack.

#### Quickscan Jack スクリプト

Most people will probably want to run jack in realtime mode, there are however a lot of knobs and buttons to press in order for that to happen.

A great way to quickly diagnose your system and find out what it is missing in order to have jack work properly in real time mode is to run the Quickscan script.

http://realtimeconfigquickscan.googlecode.com/hg/realTimeConfigQuickScan.pl

(or just install realtimeconfigquickscan from AUR)

The output should tell you where your system is lacking and will point you to places to find more information.

### 一般的なサンプル

一般的な設定例はここにあります。

## リアルタイムカーネル

Since a while ago, the stock Linux kernel has proven to be adequate for realtime uses. The stock kernel (with `CONFIG_PREEMPT=y`, default in Arch) can operate with a worst case latency of upto 10ms (time between the moment an interrupt occurs in hardware, and the moment the corresponding interrupt-thread gets running), although some device drivers can introduce latency much worse than that. So depending on your hardware and driver (and requirement), you might want a kernel with hard realtime capabilities.

The RT_PREEPMT patch by Ingo Molnar and Thomas Gleixner is an interesting option for hard and firm realtime applications, reaching from professional audio to industrial control. Most audio-specific distro Linux ships with this patch applied. A realtime-preemptible kernel will also make it possible to tweak priorities of IRQ handling threads and help ensure smooth audio almost regardless of the load.

If you are going to compile your own kernel, remember that removing modules/options does not equate to a "leaner and meaner" kernel. It is true that the size of the kernel image is reduced, but in today's systems it is not as much of an issue as it was back in 1995.

In any way, you should also ensure that:

- Timer Frequency is set to 1000Hz (CONFIG_HZ_1000=y; if you do not do MIDI you can ignore this)
- APM is DISABLED (CONFIG_APM=n; Troublesome with some hardware - default in x86_64)

If you truly want a slim system, we suggest you go your own way and deploy one with static /devs. You should, however, set your CPU architecture. Selecting "Core 2 Duo" for appropriate hardware will allow for a good deal of optimisation, but not so much as you go down the scale.

General issue(s) with (realtime) kernels:

- Hyperthreading (if you suspect, disable in BIOS)

There are ready-to-run/compile patched kernels available in the ABS and AUR.

Note: Before you decide to use a patched kernel, see http://jackaudio.org/realtime_vs_realtime_kernel.

### ABS

ABS を使って linux にパッチをあててリコンパイルすることができます。ただし、アップデートによってカスタムカーネルが上書きされるため、一番便利な方法とは言えません (少なくとも `IgnorePkg=linux` を `/etc/pacman.conf` に追加しなくてはなりません)。

### AUR

AUR から、以下のパッケージを使うことができます:

- linux-rt
- linux-rt-lts (長期サポート、安定リリース)
- linux-rt-ice

The first two are standard kernels with the CONFIG_PREEMPT_RT patch, while -ice includes patches some may consider to be nasty, while to others are a blessing.

  参照: Real-Time Linux Wiki

## MIDI

MIDI を使う時は a2j をインストールすることを強く推奨します。alsa midi と jack midi のブリッジです。a2j を使うことで alsa midi にしか対応していないアプリケーションを jack midi しか使えないアプリケーションに接続することができます。また、Laditray で a2j を起動・停止できます。

  参照: JACK Audio Connection Kit (日本語)#MIDI

## 環境変数

If you install things to non-standard directories, it is often necessary to set environment path variables so that applications know where to look (for plug-ins and other libraries). This usually affects only VST since users might have a Wine or external Windows location.

We would usually not have Linux plug-ins (LADSPA, LV2, DSSI, LXVST) beyond standard paths, so it is not necessary to export them. But if you do, be sure to include those standard paths as well since Arch does not do anything for dssi or ladspa, and some applications like dssi-vst will not look anywhere else if it finds predefined paths.

    ~/.bashrc

    ...
    export VST_PATH=/usr/lib/vst:/usr/local/lib/vst:~/.vst:/someother/custom/dir
    export LXVST_PATH=/usr/lib/lxvst:/usr/local/lib/lxvst:~/.lxvst:/someother/custom/dir
    export LADSPA_PATH=/usr/lib/ladspa:/usr/local/lib/ladspa:~/.ladspa:/someother/custom/dir
    export LV2_PATH=/usr/lib/lv2:/usr/local/lib/lv2:~/.lv2:/someother/custom/dir
    export DSSI_PATH=/usr/lib/dssi:/usr/local/lib/dssi:~/.dssi:/someother/custom/dir

## Tips and Tricks

- IRQ issues can occur and cause problems. An example is video hardware reserving the bus, causing needless interrupts in the system I/O path. See discussion at FFADO IRQ Priorities How-To. If you have a realtime or a recent kernel, you can use rtirq to adjust priorities of IRQ handling threads.

- Do not use the irqbalance daemon, or do so carefully [1].

- Some daemons/processes can unexpectedly cause xruns. If you do not need it - kill it. No questions asked.

    $ ls /var/run/daemons
    $ top # or htop, ps aux, whatever you are comfortable with
    $ killall -9 $processname
    # systemctl stop $daemonname

- If you are facing a lot of xruns especially with nvidia, disable your GPU throttling. This can be done via the card's control applet and for nvidia it is "prefer maximum performance" (thanks to a mail in LAU by Frank Kober).

- You may like to read more on ALSA: http://www.volkerschatz.com/noise/alsa.html

## ハードウェア

### M-Audio Delta 1010

The M-Audio Delta series cards are based on the VIA Ice1712 audio chipset. Cards using this chip require that you install the alsa-tools package, because it contains the envy24control program. Envy24control is a hardware level mixer/controller. You can use alsa-mixer but you will save yourself some hassle not to try it. Note that this section has no information on MIDI setup or usage.

Open the mixer application:

    $ envy24control

This application can be more than a bit confusing; see envy24control for guidance on its use. That said, here is a very simple working setup for multitracking with Ardour.

1. On the "Monitor Inputs" and "Monitor PCMs" tabs, set all monitor inputs and monitor PCM's to around 20.
2. On the "Patchbay / Router" tab, set all to PCM out.
3. On the "Hardware Settings" tab, verify that the Master Clock setting matches what is set in Qjackctl. If these do not match you will have xruns out of control!

### M-Audio Fast Track Pro

The M-Audio Fast Track Pro is an USB 4x4 audio interface, working at 24bit/96kHz. Due to limitation of USB 1, this device requires additional setup to get access to all its features. Device works in one of two configuration:

- Configuration 1, or "Class compliant mode" - with reduced functionality, only 16bit, 48kHz, analogue input (2 channels) and digital/analogue output (4 channels).
- Configuration 2 - with access to all features of interface.

Currently with stock kernel it runs in configuration 2, but if you want to make sure in what mode you are, you can check kernel log for entries:

    usb-audio: Fast Track Pro switching to config #2
    usb-audio: Fast Track Pro config OK

The interface also needs extra step of cofiguration to switch modes. It is done using option `device_setup` during module loading. The recommended way to setup the interface is using file in `modprobe.d`:

    /etc/modprobe.d/ftp.conf

    options snd_usb_audio vid=0x763 pid=0x2012 device_setup=XXX index=YYY enable=1

where `vid` and `pid` are vendor and product id for M-Audio Fast Track Pro, `index` is desired device number and `device_setup` is desired device setup. Possible values for `device_setup` are:

device modes
device_setup value | bit depth | frequency | analog output | digital output | analog input | digital input | IO mode
--- | --- | --- | --- | --- | --- | --- | ---
0x0 | 16 bit | 48kHz | + | + | + | + | 4x4
0x9 | 24 bit | 48kHz | + | + | + | - | 2x4
0x13 | 24 bit | 48kHz | + | + | - | + | 2x4
0x5 | 24 bit | 96kHz | * | * | * | * | 2x0 or 0x2

The 24 bit/96kHz mode is special: it provides all input/output, but you can open only one of 4 interfaces at a time. If you for example open output interface and then try to open second output or input interface, you will see error in kernel log:

    cannot submit datapipe for urb 0, error -28: not enough bandwidth

which is perfectly normal, because this is USB 1 device and cannot provide enough bandwidth to support more than single (2 channel) destination/source of that quality at a time.

Depending on the value of `index` it will setup two devices: `hwYYY:0` and `hwYYY:1`, which will contain available inputs and outputs. First device is most likely to contain analog output and digital input, while second one will contain analog input and digital output. To find out which devices are linked where and if they are setup correctly, you can check `/proc/asound/cardYYY/stream{0,1}` . Below is list of important endpoints that will help in correctly identifying card connections (it easy to mistake analog and digital input or output connections before you get used to the device):

    EP 3 (analgoue output = TRS on back, mirrored on RCA outputs 1 and 2 on back)
    EP 4 (digital output = S/PDIF output on back, mirrored on RCA outputs 3 and 4 on back)
    EP 5 (analogue input = balanced TRS or XLR microphone, unbalanced TS line on front)
    EP 6 (digital input = S/PDIF input on back)

### PreSonus Firepod

1. Startup: Either from command line or QjackCtl, the driver is called firewire.
2. Specs: The card contains 8/8 preamp'ed XLR plus a stereo pair, in total 10 channels.
3. Linking: Cards can be linked together without any problems.
4. Hardware Settings: Nothing particular, tweak the settings in QjackCtl to your likings.

Volume levels are hardware and routing can be done through QjackCtl, even with more cards linked together, this is not a problem. The ffadomixer does not work with this card yet, hopefully in the future we can control more aspects of the card through a software interface like that.

### PreSonus AudioBox USB

1. Startup: It's called "USB" by ALSA.
2. Specs: Two mono TRS+XLR in, two mono TRS out, MIDI in and out, plus separate stereo headphone jack. Knob controls for both inputs, for main out, and for headphone, four in all.
3. Hardware: Works very well, audio and MIDI too. No software mixer controls at all.

## 制限ソフトウェア

### Steinberg の SDK

It is very clear - we can distribute neither the VST nor the ASIO headers in binary package form. However, whenever you are building a program which would host Windows .dll VST plug-ins, check for the following hints (that do not require use of any SDK):

- dssi-vst
- fst
- vestige

With that said, if you are building a program which would host native .so VST plug-ins, then there is no escape. For such cases, Arch yet again allows us to maintain a uniform local software database. We can "install" the SDK system-wide - you simply have to download it yourself and place it in the packaging directory.

Get them from AUR

Note: Steinberg does not forbid redistribution of resulting products, nor dictate what license they can be under. There are many GPL-licensed VST plug-ins. As such, distributing binary packages of software built with these restricted headers is not a problem, because the headers are simply buildtime dependencies.

## Arch Linux Pro Audio Project

Yes, we have one. Think of "Planet CCRMA" or "Pro Audio Overlay", less the academic connotations of the former: ArchAudio.

What this means is that the repositories are add-ons, i.e you need to have a running, sane Arch Linux installation.

It is a relatively new effort although the initiative has been around since 2006/2007.

History: https://bbs.archlinux.org/viewtopic.php?id=30547

For all your Arch- and ArchAudio-related audio issues hop on to IRC: #archaudio @ Freenode

## Linux と Arch Linux Pro Audio のニュース

- Build a Serious Multimedia Production Workstation with Arch - Linux.com article, July 2012

- An Arch Tale - Article by fellow musician and writer Dave Phillips, October 2011

- From Windows to Linux: a sound decision - Interview with Geoff "songshop" Beasley, February 2010

Category:

- Audio/Video (日本語)