# サウンドライブラリ・ドライバの初期化サンプル

1998. 9.29更新

## サンプルについて

このサンプルはサウンドライブラリの初期化及びサウンドドライバのダウンロード・初期化を行うサンプルです．

## サンプルの流れ

サウンドライブラリの初期化を行い，ワークメモリに既に読み込まれているサウンドドライバをダウンロードし，初期化します．
処理の流れとしては

1. サウンドライブラリの初期化（`sdLibInit`）
2. メモリブロックハンドルの取得（`sdMemBlkCreate`）
3. メモリブロックハンドルにパラメータを設定（`sdMemBlkSetPrm`）
4. サウンドドライバのダウンロード・初期化（`sdDrvInit`）
5. メモリブロックハンドルの破棄（`sdMemBlkDestory`）

となります．

## 注意点

- サウンドドライバはは全てワークメモリに存在していなければならない
  サウンドドライバは全てワークメモリに読み込まれてなければいけません．ブロックの先頭アドレスは32バイトアライメントされてなければいけません．
- `SDMEMBLK`にパラメータを設定する時のブロックサイズは無視される
  サウンドライブラリはサウンドドライバ中のブロックサイズを参照するからです．
- メモリブロックのコールバック関数は必ず指定すること．
  ワークメモリ上のサウンドドライバをメモリブロックに登録する時にコールバック関数を必ず指定してください．
  理由はサウンドライブラリはサウンドドライバのダウンロードの後サウンドドライバの初期化を行った後にコールバック関数を実行します．よってコールバック関数が無い場合は続けてサウンドライブラリの関数を実行する場合，正常に動作しない可能性があります．

## 実際のコーディング

実際のコーディングを下記に提示します．なお，このサンプルは理解のしやすさを優先するためにエラーチェックをかなり省いています．

サウンドライブラリ・サウンドドライバの初期化サンプル
``/********************************************************* * * Sound Library Sample * * サウンドライブラリ・ドライバの初期化を行います．
*
*********************************************************/`
#include <sd_sg.h>
SDE_ERR SoundInit( Void *snd_drv_ptr)
{
``SDE_ERR` result = ``SDE_ERR_NOTHING``;
`SDMEMBLK` memblk = NULL;
if ( ( result = `sdLibInit`( NULL, 0, 0)) != `SDE_ERR_NOTHING`)
{`
`/* エラーが起こった */`
goto exit;
` }
if ( ( result = `sdMemBlkCreate`( &memblk)) != `SDE_ERR_NOTHING`)
{`
`/* エラーが起こった */`
goto exit;
` }
`/* 第二引数のブロックサイズは`sdDrvInit`では実際には使用しません */`
if ( ( result = `sdMemBlkSetPrm`( memblk, snd_drv_ptr, 0, `SDD_MEMBLK_SYNC_FUNC`, NULL)) != `SDE_ERR_NOTHING`)
{`
`/* エラーが起こった */`
goto exit;
` }
`/* ダウンロードおよび実行 */`
if ( ( result = `sdDrvInit`( memblk)) != `SDE_ERR_NOTHING`)
{`
`/* エラーが起こった */`
goto exit;
` }
` exit:
`if ( memblk != NULL)
{`
result = `sdMemBlkDestory`( memblk);
` }
return ( result);
` }
`/*EOF*/`
`