0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Jackを使ってシンセとオーディオプレーヤーを同時に鳴らす

Last updated at Posted at 2021-11-28

jackdをインストール

Jackの本体でバックグラウンドで起動させて使う。

$ sudo apt-get install jackd

pulseaudio-module-jackをインストール

pulseaudio-module-jackはPulse Audioの出力をAlsaではなくJackに切り替える。Jackを指定できるオーディオプレーヤーには必須ではない。

$ sudo apt-get install pulseaudio-module-jack

Pulse Audioの設定

$ sudo nano /etc/pulse/default.pa 

末尾に下記の3行を追加。

load-module module-jack-sink
load-module module-jack-source
set-default-sink jack_out

Pulse Audioを再起動

$ pulseaudio -k

audaciousをインストール

音楽再生アプリ。再生デバイスとしてPulse Audioの他にJackを直接指定することもできる。

$ sudo apt-get install audacious

jackdを起動

オプション

  • -R はリアルタイムモード
  • -d alsa -d hw:0 で出力にAlsaを使用、2番目の-dはデバイスを指定。デバイスはalsaixserでF6を押すと確認できる。
  • -r サンプリング周波数
  • -p バッファサイズ
  • -n バッファ数 (直結の場合は2、USBの場合は3が推奨らしい。大きいとレイテンシも増えると思う)
$ jackd -R -d alsa -d hw:0 -r 44100 -p 64 -n 2

ハードウェアは名前でも指定できる。cat /proc/asound/cardsでデバイス名を調べる。下記はPCM5102Aをhifiberryのドライバで使用している場合の例。[]内がドライバ名。

$ cat /proc/asound/cards
 0 [fmidi          ]: MIDI Gadget - f_midi
                      MIDI Gadget
 1 [sndrpihifiberry]: RPi-simple - snd_rpi_hifiberry_dac
                      snd_rpi_hifiberry_dac

そこで得たデバイス名をhw:の後に指定する。

$ jackd -R -d alsa -d hw:sndrpihifiberry -r 44100 -p 64 -n 2

これでJackを使って複数のオーディオ再生アプリを低レイテインシで同時に使うことができる。それぞれのアプリでJackまたはPulse Audioを指定すれば良い。

なんか良くわからないが、誰かが勝手にデフォルト設定(48kHz, 1024 samples)でjackdを起動してるので、一旦それを殺してPulse Audioを再起動してから自分のシンセを起動してる。

start_app_sample.sh
#!/bin/sh
sudo killall jackd
jackd -R -d alsa -d hw:0 -r 44100 -p 64 -n 2 &
sleep 1
pulseaudio -k
MySynthApp <- 走らせたいシンセのプログラム

Bluetoothオーディオレシーバーとしても動作させる場合は下記が必要だった。OS起動時にjackdを起動してるやつが見つかればこんな処理はいらないかもしれない。。。sleepが2箇所入ってるが、これが無いと動かない場合があった。あと、ALSAで使うハードウェアの音量がMAXになってないとイヤなのでそれも追加した(amixerの部分)。

どうしてこんな風に動作するのかは正直わからないが、PulseAudioのALSAモジュール(module-alsa-sink)を入れるとPulseAudioがALSAのデフォルトになり、ハードウェア指定では操作できない。なので、volume-watcherではハードウェア指定なしにデフォルトのデバイス(PulseAudioのALSA Sink)の音量をいじっている。シンセはJackを通じてALSAに流しているのでその音量変化の影響を受けない。良くわからないが偶然に偶然が重なって奇跡的に動いているような感じ。

start_app_sample.sh
#!/bin/sh
killall volume-watcher.
killall jackd
jackd -R -d alsa -d hw:0 -r 44100 -p 64 -n 2 &
sleep 1
pulseaudio -k
sleep 1
pulseaudio -D
volume-watcher.py &
amixer -c0 cset numid=3 100%
MySynthApp <- 走らせたいシンセのプログラム
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?