コグノスケ


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

link もっと前
2013年9月12日 >>> 2013年8月30日
link もっと後

2013年9月12日

ALSAその2 - カードとデバイス

目次: ALSA

ALSAを使う準備ができたので早速、音を鳴らしたいところですが、その前にALSAの「サウンドカード」と「デバイス」の概念について簡単に説明したいと思います。

ALSAのサウンドカード

下記のようにPCMの入力、出力を複数備えたサウンドカードが2枚刺さっているコンピュータがあるとします。


図1: システムの例

このときALSAのカード一覧を見ると下記のように、2つ検出されるはずです。以降、1枚目のAAAAA社製カードを「サウンドカード0」、2枚目のBBBBB社製カードを「サウンドカード1」と呼びます。

ALSAカードの一覧取得、例
katsuhiro@falcon:~$ cat /proc/asound/cards
 0 [AAAAA          ]: HDA-AAAAA - HDA AAAAA
                      HDA AAAAA at 0xXXXX00000 irq xx
 1 [BBBBB          ]: HDA-BBBBB - HDA BBBBB
                      HDA BBBBB at 0xXXXX0000 irq xx

カードにはいくつかのアナログやデジタルの入出力がついています。ALSAではこれらを「デバイス」と呼ぶようです。

デバイスは、現状 4種類の能力を持つことができます。このうち1種類の能力しか持たないデバイスもいますし、複数の能力を持つデバイスもいます。

  • PCMの再生(出力)
  • PCMの録音(入力)
  • MIDIの再生
  • ハードウェア固有機能

今回はこれらの能力のうち、PCMの再生、録音にのみ触れます。

ALSAのデバイス

図1に示した例だと、デジタル入出力のデバイスと、アナログ入出力のデバイスに別れて、ALSAは下記の図2のようにデバイスを認識するでしょう(※1)。

(※1)なおデバイスの番号付けはドライバ(ハードウェア依存処理)の作りによって違うため、同じデバイス数のハードウェアでも、必ずこの順番になるわけではありません。


図2: ALSAのカードとデバイスの構成例

図2の右側「デバイスファイル」とか「snd_pcm_open() の引数」の部分は、また後で説明しますので気にしないで下さい。

今回、大事なことは、サウンドカード0として、

  • PCMを再生しデジタルで出力する能力と、PCMをデジタルで入力し録音する2つの能力を持ったデバイス0
  • PCMを再生しアナログで出力する能力のみを持ったデバイス1

2つのデバイスがALSAに認識され、

サウンドカード1として、

  • PCMをアナログで入力し録音する能力を持ったデバイス0
  • PCMを再生しデジタルで出力する能力のみを持ったデバイス1

2つのデバイスがALSAに認識された、ということです。

お使いのコンピュータでALSAが認識したPCM再生、録音デバイスの一覧を確かめるには、/proc/asound/pcmを見て下さい。

ALSA PCMデバイスの一覧取得
katsuhiro@falcon:~$ cat /proc/asound/pcm
00-00: AAAAA Digital : AAAAA Digital : playback 1 : capture 1
00-01: AAAAA Analog : AAAAA Analog : playback 1
01-00: BBBBB Analog : BBBBB Analog : capture 1
01-01: BBBBB Digital : BBBBB Digital : playback 1

一覧に出ている数字は、サウンドカードの番号 - デバイスの番号となっています。00-01であればサウンドカード0のデバイス1という意味です。

以降の表記について

以降、サウンドカードという表記を省略することがあります。デバイス0-1のように書きますので、サウンドカード0のデバイス1なんだな、とご理解下さい。

また、PCMの再生と録音のためのデバイスをひっくるめて、PCMデバイスと表記することがあります。

デバイスの能力4種類のうち「ハードウェア依存機能」については、/proc/asound/hwdepにて一覧を見ることができます。MIDI再生については詳しくないので知りません…。

編集者:すずき(2022/05/22 15:07)

コメント一覧

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



2013年9月9日

ALSAその1 - 使ってみよう

目次: ALSA

突然ですが、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を使う準備はバッチリです。

編集者:すずき(2022/05/22 15:06)

コメント一覧

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



2013年9月6日

FacebookとTwitterの未読の差

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

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

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

編集者:すずき(2014/03/17 00:07)

コメント一覧

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



link もっと前
2013年9月12日 >>> 2013年8月30日
link もっと後

管理用メニュー

link 記事を新規作成

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

最近のコメント5件

  • link 21年9月20日
    すずきさん (11/19 01:04)
    「It was my pleasure.」
  • link 21年9月20日
    whtさん (11/17 23:41)
    「This blog solves my ...」
  • link 24年10月1日
    すずきさん (10/06 03:41)
    「xrdpで十分動作しているので、Wayl...」
  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」

最近の記事20件

  • link 23年4月10日
    すずき (11/15 23:48)
    「[Linux - まとめリンク] 目次: Linux関係の深いまとめリンク。目次: RISC-V目次: ROCK64/ROCK...」
  • link 24年11月6日
    すずき (11/15 23:47)
    「[Ubuntu 24.04 LTS on ThinkPad X1 Carbon Gen 12] 目次: Linux会社ではTh...」
  • link 24年11月11日
    すずき (11/15 23:26)
    「[Pythonのテストフレームワーク] 目次: Python最近Pythonを触ることが増えたのでテストについて調べようと思い...」
  • link 24年11月2日
    すずき (11/15 23:25)
    「[Python - まとめリンク] 目次: Python一覧が欲しくなったので作りました。 スクリプト言語始めました(Pyth...」
  • link 20年5月10日
    すずき (11/15 23:24)
    「[Pythonの文字置換APIは変な名前] 目次: PythonPythonの文字列置換は "string".replace(...」
  • link 24年2月7日
    すずき (11/15 23:23)
    「[複数の音声ファイルのラウドネスを統一したい] 目次: PythonPCやデジタル音楽プレーヤーで音楽を聞いていると、曲によっ...」
  • link 13年7月2日
    すずき (11/15 23:22)
    「[スクリプト言語始めました(PythonとRubyでNクイーン問題)] 目次: ベンチマーク目次: Pythonスクリプト言語...」
  • link 23年9月18日
    すずき (11/15 23:22)
    「[一覧の一覧 - まとめリンク] 一覧の一覧、まとめのまとめが欲しくなったので作りました。OS、アーキテクチャ系。目次: An...」
  • link 13年10月1日
    すずき (11/15 23:21)
    「[JetBrains PyCharm 3.0リリース] 目次: PythonPyCharmがメジャーアップデートされ PyCh...」
  • link 22年7月8日
    すずき (11/08 23:28)
    「[マンガ紹介 - まとめリンク] 目次: マンガ紹介面白かった漫画の紹介です。知名度はあまり気にせず紹介します。5作品乙女ゲー...」
  • link 24年10月31日
    すずき (11/04 15:17)
    「[DENSOの最終勤務日] 最終勤務日でした、入門カードや会社のPCを返却してきました。在籍期間はNSITEXE(品川のオフィ...」
  • link 24年10月30日
    すずき (11/02 20:33)
    「[マンガ紹介] 目次: マンガ紹介お気に入りのマンガ紹介シリーズ。最近完結した短めの作品を紹介します。マイナススキル持ち四人が...」
  • link 19年3月28日
    すずき (11/02 13:27)
    「[マンガ紹介] 目次: マンガ紹介お気に入りのマンガ紹介シリーズ。こわもてかわもて(全2巻、2019年)(アマゾンへのリンク)...」
  • link 21年6月20日
    すずき (11/02 13:22)
    「[読書一生分が93万円?] 目次: マンガ紹介書籍通販のhontoがこんなキャンペーンをやっています。honto読書一生分プレ...」
  • link 17年10月27日
    すずき (11/02 13:11)
    「[異世界&最強系漫画の種類] 目次: マンガ紹介少し前にアニメ化されて盛り上がって(おそらく負の方向に…)いた「...」
  • link 24年10月28日
    すずき (10/30 23:49)
    「[Linuxからリモートデスクトップ] 目次: Linux開発用のLinuxマシンの画面を見るにはいろいろな手段がありますが、...」
  • link 24年10月24日
    すずき (10/25 02:35)
    「[ONKYOからM-AUDIOのUSB DACへ] 目次: PCかれこれ10年以上(2013年3月16日の日記参照)活躍してく...」
  • link 24年7月25日
    すずき (10/25 02:24)
    「[OpenSBIを調べる - デバイスツリーの扱い(別方法)] 目次: LinuxOpenSBIのブート部分を調べます。Ope...」
  • link 24年8月7日
    すずき (10/25 02:23)
    「[Debian独自の挙動をするQEMUとbinfmt_misc] 目次: Linux前回はbinfmt_miscの使い方や動作...」
  • link 24年9月9日
    すずき (10/25 02:22)
    「[GDBの便利コマンド] 目次: LinuxGDBは便利ですが、少し使わないでいるとあっという間にコマンドを忘れます。便利&使...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
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 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

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

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 11/19 01:04