# マルチユニットの転送サンプル

1998. 9.29更新

## サンプルについて

このサンプルは出来るだけマルチユニットのダウンロードを行うサンプルです．

## サンプルの流れ

ワークメモリに既に読み込まれているマルチユニットファイルをサウンドメモリにダウンロードするためのサンプルです．
処理の流れとしては

1. メモリブロックハンドルの取得（`sdMemBlkCreate`）
2. メモリブロックハンドルにパラメータを設定（`sdMemBlkSetPrm`）
3. マルチユニットのダウンロード（`sdMultiUnitDownload`）
4. メモリブロックハンドルの破棄（`sdMemBlkDestory`）

となります．

## 注意点

- マルチユニットは全てワークメモリに存在していなければならない
  例えば1MBのマルチユニットファイルを100KBつづ読み込みつつダウンロードということは出来ません．
- マルチユニットのワークメモリ上にダウンロードするアドレスについて
  マルチユニットをワークメモリ上にダウンロードする時はアドレスは32ビットアライメントされていなければなりません．
- `SDMEMBLK`にパラメータを設定する時のブロックサイズは無視される
  サウンドライブラリはマルチユニット中のブロックサイズを参照するからです．

## 実際のコーディング

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

マルチユニットのダウンロードのサンプル
``/********************************************************* * * Sound Library Sample * * ワークメモリにあるマルチユニットをダウンロードします．
*
*********************************************************/`
#include <sd_sg.h>
SDE_ERR MultiUnitDownload( Void *src_ptr)
{
``SDE_ERR` result = `SDE_ERR_NOTHING`;
`SDMEMBLK` memblk = NULL;
if ( ( result = `sdMemBlkCreate`( &memblk)) != `SDE_ERR_NOTHING`)
{`
`/* エラーが起こった */`
goto exit;
` }
`/* 第二引数のブロックサイズは`sdMultiUnitDownload`では実際には使用しません */`
if ( ( result = `sdMemBlkSetPrm`( memblk, src_ptr, 0, `SDD_MEMBLK_SYNC_FUNC`, NULL)) != `SDE_ERR_NOTHING`)
{`
`/* エラーが起こった */`
goto exit;
` }
`/* ダウンロード */`
if ( ( result = `sdMultiUnitDownload`( memblk)) != `SDE_ERR_NOTHING`)
{`
`/* エラーが起こった */`
goto exit;
` }
` exit:
`if ( memblk != NULL)
{`
result = `sdMemBlkDestory`( memblk);
` }
return ( result);
` }
`/*EOF*/`
`