link もっと前
   2013年 9月 9日 -
      2013年 8月 31日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

ALSA その 1

その 1その 2その 3その 4その 5

突然ですが、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 の構成

後でまた説明しますが、ALSA は大きく 4つの部分に分けられます。

ユーザ空間で動作する「ライブラリ(共通処理)」
ALSA を使うアプリケーションと ALSA とのインタフェース(API)の定義、LPCM を扱うために共通の処理をまとめた部分です。
ユーザ空間で動作する「ライブラリ(プラグイン)」
ALSA に入力された LPCM を加工するための部分です。
カーネル空間で動作する「ドライバ(共通処理)」
LPCM の再生/録音機能を実現するために共通の処理をまとめた部分です。
カーネル空間で動作する「ドライバ(ハードウェア依存処理)」
ハードウェアの機能を使って LPCM の再生/録音機能を実現するための部分です。

具体的にどのファイルなの?というと環境の差などによって違いますが、あえて細かい点は無視してざっくり言うと下記のようになります。

  • 「ライブラリ(共通処理)」=/usr/lib/libasound.so
  • 「ライブラリ(プラグイン)」=/usr/lib/libasound.so など
  • 「ドライバ(共通処理)」=/lib/modules/<Linux のバージョン>/kernel/sound/core/snd.ko など
  • 「ドライバ(ハードウェア依存処理)」=/lib/modules/<Linux のバージョン>/kernel/sound/pci/snd-hda-codec-realtek.ko など

LPCM の流れとしては、おおまかには、
ALSA を使うアプリケーション
→ ALSA ライブラリ(libasound.so)
→ ALSA プラグイン(libasound.so など)
→ ALSA ドライバ共通処理(snd.ko など)
→ ALSA ドライバハードウェア依存処理(snd-hda-codec-xxxx.ko など)
→ サウンドカード

となります。

俺の PC に ALSA は入っているの?

Fedora や Debian などの一般的な PC 向けディストリビューションを使っていれば、この章以降の作業はおそらく自動的に行われており、既に ALSA が使える状態になっているはずです。

トラブルシューティング、特殊な(組み込み向けとか)環境、中身に興味がある、などなど、そんな方はご一読ください。特に興味がなければ無視して構いませんので、次の記事(そのうち掲載予定)へどうぞ。

説明はこれくらいにして、自分の Linux PC で ALSA ドライバが使えるか?を確かめてみましょう。下記のコマンドを打つと、ALSA ドライバ(共通処理部分)のバージョンが取得できます。

ALSA ドライバ(共通処理部分)のバージョン確認
katsuhiro@falcon:~$ cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.25.

そんなファイルはありません!と言われたら、ALSA ドライバのロードが必要です。

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 の内蔵サウンドチップであれば、下記のコンフィグを有効にすることになると思います。

ALSA ドライバを有効にする
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 となります。

ALSA ドライバ(ハードウェア依存処理)ロード
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 でアンロードしましょう。

俺の PC で ALSA は使えるの?

ドライバが無事ロードできたら、ALSA がサウンドカードを認識できているかどうか?を確かめます。

もし間違ったドライバをロードしている場合は、サウンドカードの一覧に何も出ない場合が多いです。今一度ドライバが合っているかどうか確かめましょう。

ALSA カードの一覧を取得
katsuhiro@falcon:~$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xdff00000 irq 49

例ではサウンドカードが 1つ認識されています。ここまで来れば ALSA を使う準備はバッチリです。

[編集者: すずき]
[更新: 2018年 4月 1日 10:55]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

Facebook と Twitter の未読の差

Facebook の公式サイト&公式アプリは、どこまでが未読で、どこまでが既読なのかさっぱりわからなくて使いづらい。そんなに真剣に読まなくても良いじゃない、ってメッセージなのかなあ?

Twitter もどこからどこまで読んだのかさっぱりわからないけど、読んでも読まなくてもどうでも良いことを書くのが基本なので、あまり気にならない。

メモ: 技術系?の話は Facebook から転記しておくことにした。

[編集者: すずき]
[更新: 2014年 3月 17日 00:07]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2013年 9月 9日 -
      2013年 8月 31日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 10/13 23:20

カレンダー

<2013>
<<<09>>>
1234567
891011121314
15161718192021
22232425262728
2930-----

最近のコメント 5件

  • link 19年09月01日
    すずき 「私も正直びっくりです。間違って違う製品を...」
    (更新:09/04 23:39)
  • link 19年09月01日
    hdk 「車向けの製品の中でも、車載コンピューター...」
    (更新:09/02 23:20)
  • link 19年07月18日
    hdk 「あっ、AAMはマニュアルのオペレーション...」
    (更新:07/25 00:02)
  • link 19年07月18日
    すずき 「AAM(ASCII Adjust AX ...」
    (更新:07/24 22:22)
  • link 19年07月18日
    hdk 「加算減算は符号のありなしどちらも命令が同...」
    (更新:07/24 07:25)

最近の記事 3件

link もっとみる
  • link 19年10月06日
    すずき 「[RISC-V のバイナリダンプを逆アセンブルする] 相変わらず空...」
    (更新:10/13 23:20)
  • link 19年10月12日
    すずき 「[台風 19号] あの台風 15号(Faxai)(2019年 9月...」
    (更新:10/13 22:04)
  • link 19年09月08日
    すずき 「[台風 15号] 超強力な台風 15号(Faxai)が来るというこ...」
    (更新:10/13 22:03)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報