USBにつないだAudioデバイスで音を出力したいと思います。ここでは、Raspberry pi 2wのUSB Micro Type B の端子を USB type A に変換してUSB Audio デバイスを接続しています。

まずは、aplay -lで接続しているデバイスを探します。
> aplay -l **** List of PLAYBACK Hardware Devices **** card 0: Audio [KT USB Audio], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
card 0のdevice 0にUSB Audioが接続されていることがわかります。このデバイスのスペックを調べてみます。 以下のaplayの結果を順に説明します。
> aplay -D hw:0,0 --dump-hw-params /dev/zero Playing raw data '/dev/zero' : Unsigned 8 bit, Rate 8000 Hz, Mono HW Params of device "hw:0,0":
この最初の項目は、/dev/zero を「音声データ」として再生しようとしているときの仮の設定です。 8ビット、サンプリング周波数8kHz、モノラルと設定しています。 取り敢えず最低のスペックでの接続なので無視して良いです。
-------------------- ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED
2種類のアクセス方式に対応しています。データの並びはInterleaved(インターリーブ形式で読み書きする)でどちらも同じす。データがLR, LR, LR, LR... の順に並んでいることを期待しています。
RW_INTERLEAVEDはデータをALSAのAPI(snd_pcm_writei(handle, buffer, frames);)を経由して書き込みます。
一方、MMAP_INTERLEAVEDは、ALSAのPCMバッファをアプリから直接アクセスできる状態にして、そこへサンプルを書き込みます。 MMAPの最大のメリットは、データコピーを減らせることにあります。「CPU負荷を少しでも減らしたい」という場合に使えることもあります。
FORMAT: S16_LE S24_3LE
符号付き16ビット・リトルエンディアン(S16_LE)と、 符号付き24ビット・3バイト・リトルエンディアン(S24_3LE)のデータフォーマットに対しています。
SUBFORMAT: STD MSBITS_MAX
ALSAがそのPCMデバイスについて、音声データそのもののフォーマットではなく、 対応しているサブフォーマット(subformat)を示しています。STD は Standard の意味です。 通常のPCMデータ形式であることを表します。MSBITS_MAX は、「そのフォーマットで利用可能な最大の有効ビット数を使用する」 という意味です。FORMAT: S16_LEなら16bitなので、MSBITS = 16、一方、FORMAT: S24_3LE なら、24bitがそのまま有効ビットになります。
SAMPLE_BITS: [16 24] FRAME_BITS: [32 48] CHANNELS: 2
1サンプルのデータが16bitもしくは24bit、1フレームは、スレテオ(チャンネル数は2ch)でビット数は32bitか48bitであることを示しています。
RATE: [48000 96000]
サンプリングレートは48,000Hzから96,000Hzに対応していることを示しています。 しかし、88,200Hzに対応しているかどうかはこの記述からはわかりません。
PERIOD_TIME: [1000 1000000] PERIOD_SIZE: [48 96000] PERIOD_BYTES: [192 576000] PERIODS: [2 1024]
この4つは同じ音声バッファを別の単位から見ていると考えると理解しやすいです。 まず、「PERIOD = 一度に処理する音声データのまとまり」と考えます。
PERIODS("S"が最後についています)は BUFFERの中にいくつのPERIODが入っているかを示しています。 ALSAのリングバッファーのサイズとも言えます。

PERIOD_SIZEは1つのPERIODに何フレームの音声データが入っているかを示しています。 PERIOD_SIZE = 480であれば1つのPERIODに480フレーム入っていることになります。
ALSAリンングバッファーに含まれるフレーム数 = PERIOD_SIZE x PERIODS
PERIOD_BYTEは1フレームに含まれるバイトの数で、PERIOD_SIZE=480であれば、PERIODには
480frame x 4byte = 1920 bytesが入っていることになりPERIOD_BYTE = 1920 となります。
(注)(48kHz、stereo、S16_LE)であれば、1フレームは 2 ch x 2bytes = 4bytes
PERIOD_TIMEは1 PERIOD分の音声を再生するのに何秒かかるかを表しています。 サンプリング周波数が48kHzであれば、PERIOD_TIME=PERIOD_SIZE / サンプリング周波数 = 480/48kHz = 10msec となります。