目次: ALSA
突然ですが、ALSAについて何回か書こうと思います。仕事で使ったのがきっかけで、ここ最近ALSAを家でいろいろ調べていたのです。
せっかく調べたので、いつか忘れたときに見直せたら便利であろう情報、つまづいたポイント、などをまとめておこうと思います。
ALSAとはAdvanced Linux Sound Architectureの略で、Linux 2.6から採用されたLinuxのサウンドシステムです。それ以前はOSS(Open Sound System)というサウンドシステムが採用されていました。が、OSSをこれから使う人はいないし、解説できるほど詳しくもないので無視します。
サウンドシステムって何かというと、基本はLPCM(Linear Pulse Code Modulation)音声データを再生、もしくは録音するための仕組みです。LPCM音声データは、圧縮されていない音声データと思っていただければ差し支えないと思います。
実はLPCMの再生だけではなく、シーケンスデータであるMIDIの再生もでき、この点がOSSとの大きな違いだったりしますが、そちらは良く知りませんもので、華麗にスルーします。
後でまた説明しますが、ALSAは大きく4つの部分に分けられます。
具体的にどのファイルなの?というと環境の差などによって違いますが、あえて細かい点は無視してざっくり言うと下記のようになります。
LPCMの流れとしては、おおまかには、
ALSAを使うアプリケーション
→ ALSAライブラリ(libasound.so)
→ ALSAプラグイン(libasound.soなど)
→ ALSAドライバ共通処理(snd.koなど)
→ ALSAドライバハードウェア依存処理(snd-hda-codec-xxxx.koなど)
→ サウンドカード
となります。
FedoraやDebianなどの一般的なPC向けディストリビューションを使っていれば、この章以降の作業はおそらく自動的に行われており、既にALSAが使える状態になっているはずです。
トラブルシューティング、特殊な(組み込み向けとか)環境、中身に興味がある、などなど、そんな方はご一読ください。特に興味がなければ無視して構いませんので、次の記事(そのうち掲載予定)へどうぞ。
説明はこれくらいにして、自分のLinux PCでALSAドライバが使えるか?を確かめてみましょう。下記のコマンドを打つと、ALSAドライバ(共通処理部分)のバージョンが取得できます。
katsuhiro@falcon:~$ cat /proc/asound/version Advanced Linux Sound Architecture Driver Version 1.0.25.
そんなファイルはありません!と言われたら、ALSAドライバのロードが必要です。
falcon:~# lsmod | grep snd (何も表示されない) falcon:~# modprobe snd falcon:~# lsmod | grep snd snd_seq 39243 0 snd_timer 14562 1 snd_seq snd_seq_device 4013 1 snd_seq snd 40302 3 snd_timer,snd_seq,snd_seq_device (↑ドライバがロードされた)
もしそれでも怒られる場合は、お使いのLinuxカーネルがALSAを使う構成になっていないと思われます。ALSAを使うにはLinuxカーネルのコンフィグを変更してビルドしなおす必要があるでしょう。
どのコンフィグを有効にすべきかは、使っているサウンドカードによりますが、例えばIntelの内蔵サウンドチップであれば、下記のコンフィグを有効にすることになると思います。
falcon:~# cd /usr/src/linux
falcon:/usr/src/linux# make menuconfig
Device Drivers --->
<*> Sound card support --->
<M> Advanced Linux Sound Architecture --->
[*] PCI sound devices --->
<M> Intel HD Audio --->
falcon:~# make modules
AS [M] arch/x86/crypto/aes-i586-asm_32.o
CC [M] arch/x86/crypto/aes_glue.o
(...略...)
falcon:~# make modules_install
INSTALL arch/x86/crypto/aes-i586.ko
INSTALL arch/x86/crypto/aesni-intel.ko
(...略...)
ビルドできたでしょうか。先ほどのmodprobe sndはドライバ(共通処理)をロードしただけで、ドライバ(ハードウェア依存処理)すなわち、実際にサウンドカードを制御するドライバがロードされていませんので、このままでは音を鳴らすことができません。
ドライバ(ハードウェア依存処理)をロードするには、PCに搭載されているサウンドカードを調べて、適切なドライバをロードする必要があります。サウンドカードの調査は、カタログスペックを検索するも良し、lspciコマンドの出力結果なども参考になります。
私のPCはIntelの内蔵サウンドが搭載されているため、対応するドライバはsnd_hda_intelとなります。
falcon:~# lsmod | grep snd snd_seq 39243 0 snd_timer 14562 1 snd_seq snd_seq_device 4013 1 snd_seq snd 40302 3 snd_timer,snd_seq,snd_seq_device falcon:~# modprobe snd_hda_intel snd_hda_intel 0000:00:1b.0: irq 49 for MSI/MSI-X falcon:~# lsmod | grep snd snd_hda_codec_hdmi 20592 1 snd_hda_codec_realtek 48172 1 snd_hda_intel 18380 0 snd_hda_codec 59097 3 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel snd_pcm 56936 3 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel snd_seq 39243 0 snd_timer 14562 2 snd_pcm,snd_seq snd_seq_device 4013 1 snd_seq snd 40302 8 snd_hda_codec_realtek,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_hda_codec,snd_hda_intel,snd_seq_device snd_page_alloc 5509 2 snd_pcm,snd_hda_intel (↑ドライバがロードされた)
もし間違って異なるドライバをロードした時は、rmmodでアンロードしましょう。
ドライバが無事ロードできたら、ALSAがサウンドカードを認識できているかどうか?を確かめます。
もし間違ったドライバをロードしている場合は、サウンドカードの一覧に何も出ない場合が多いです。今一度ドライバが合っているかどうか確かめましょう。
katsuhiro@falcon:~$ cat /proc/asound/cards
0 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0xdff00000 irq 49
例ではサウンドカードが1つ認識されています。ここまで来ればALSAを使う準備はバッチリです。
この記事にコメントする
Facebookの公式サイト&公式アプリは、どこまでが未読で、どこまでが既読なのかさっぱりわからなくて使いづらい。そんなに真剣に読まなくても良いじゃない、ってメッセージなのかなあ?
Twitterもどこからどこまで読んだのかさっぱりわからないけど、読んでも読まなくてもどうでも良いことを書くのが基本なので、あまり気にならない。
メモ: 技術系?の話はFacebookから転記しておくことにした。
この記事にコメントする
| < | 2013 | > | ||||
| << | < | 09 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | - | - | - | - | - |
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: