カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

データの配置


モノラル

配列を用い、データを順番に収めます。以下は、それぞれnSamples個のデータを収納する例です。

8Bitデータ

unsigned char data[nSamples];

16Bitデータ

short data[nSamples];

floatデータ

float data[nSamples];

ステレオ

1サンプル点のデータを左・右の順にペアにして収めます。以下は、それぞれnSamples個のデータを収納する例です。

8Bitデータ

unsigned char data[nSamples][2];

16Bitデータ

short data[nSamples][2];

floatデータ

float data[nSamples][2];

LEFTとRIGHTを用いてn番目のデータにアクセスします。

#define LEFT  0
#define RIGHT 1

左チャネル

data[n][LEFT]

右チャネル

data[n][RIGHT]

5.1チャンネルステレオ

1サンプル点のデータを以下の順に収めます。

  1. 前方左
  2. 前方右
  3. 前方中央
  4. サブウーファー
  5. 後方左
  6. 後方右
#define FRONT_LEFT          0
#define FRONT_RIGHT         1
#define FRONT_CENTER        2
#define LOW_FREQUENCY       3
#define BACK_LEFT           4
#define BACK_RIGHT          5

以下のコードは、nSamples個の16Bitデータの例です。

short data[nSamples][6];

上記定義を用いてn番目のデータにアクセスします。

short sFL = data[n][FRONT_LEFT];
short sFR = data[n][FRONT_RIGHT];
short sFC = data[n][FRONT_CENTER];
short sLF = data[n][LOW_FREQUENCY];
short sBL = data[n][BACK_LEFT];
short sBR = data[n][BACK_RIGHT];
データの並び順については、セクション「WAVEFORMATEXTENSIBLE構造体」を参照して下さい。

高精度データ

以下に3バイトのコンテナの例を示します。標準で3バイトのデータタイプは存在しないので専用の構造体を定義しています。対応するデータサイズは17Bit〜24Bitです。以下の例はステレオですが、多チャンネルの場合、適宜メンバーを増やします。

奇数バイトを扱います。メンバーの境界でスペースが入らないよう”pack(1)”とします。

#ifndef RC_INVOKED
#pragma pack(1)
#endif

typedef struct tSAMPLE24
{
    BYTE    dataL[3];
    BYTE    dataR[3];
} SAMPLE24, *PSAMPLE24;

#ifndef RC_INVOKED
#pragma pack()
#endif

データ(データサイズ24Bit)をセットする例を示します。アドレスの若い側がLSBになるよう、順番に格納します。

void SetData24(
        BYTE*       dist,
        long        srce)
{
    dist[0] = LOBYTE(LOWORD(srce));
    dist[1] = HIBYTE(LOWORD(srce));
    dist[2] = LOBYTE(HIWORD(srce));
}

データサイズが20Bitの場合の例を示します。コンテナのMSB側に詰めるため4Bitシフトしています。

void SetData20(
        BYTE*       dist,
        long        srce)
{
    srce <<= 4;
    dist[0] = LOBYTE(LOWORD(srce));
    dist[1] = HIBYTE(LOWORD(srce));
    dist[2] = LOBYTE(HIWORD(srce));
}

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ