簡単な発音のサンプル

1998. 9.29更新

サンプルについて

 このサンプルは出来るだけシンプルに音を鳴らすプログラムです.

サンプルの流れ

 サウンドライブラリ・ドライバの初期化を行い,880Hzの音を再生する.

 処理の流れとしては

  1. サウンドライブラリ・サウンドドライバの初期化(サンプル関数のSoundInitを利用)

  2. MIDIポートのハンドル取得sdMidiOpenPort

  3. 発音.

  4. しばらく待つ.

  5. 発音停止.

  6. 後処理.

  7. 無限ループ.

となります.

注意点

 本サンプルには下記の注意事項があります.

  1. サウンドドライバをあらかじめワークメモリ上にダウンロードしておく
     サウンドドライバをあらかじめワークメモリ上にダウンロードしておく.アドレスはプログラム内のSNDDRV_ADRと合わせておく.また,アドレスは32バイトアライメントされている必要があります.

  2. sdSysServerの使用法について
     本来はsdSysServerはブランクなどの定期的なタイミングで呼び出する.

実際のコーディング

 実際のコーディングを下記に提示する.なお,このサンプルはエラーチェックをかなり省いています.

簡単な発音サンプル
/*********************************************************
 *
 *    Sound Library Sample
 *
 *    簡単な発音を行います.
 *
 *********************************************************/


#include <sd_sg.h>

/*  サウンドドライバがあるアドレス  */
#define SNDDRV_ADR (0x8c050000)

int main( void)
{
SDS_MIDI_MES midi_mes;
SDMIDI midi_handle = NULL;
Sint32 midi_ch = 0x00; /*  MIDIチャンネル番号0  */
Sint32 i;

/*
 *  初期化を行う
 */

if ( SoundInit( SNDDRV_ADR) != SDE_ERR_NOTHING)
{
/*  エラーが起こった  */
goto exit;
}

/*
 *  MIDIメッセージを送信して音を鳴らす
 */

/*  MIDIポートのオープン  */
if ( sdMidiOpenPort( &midi_handle) != SDE_ERR_NOTHING)
{
/*  エラーが起こった  */
goto exit;
}

/*  MIDIメッセージの作成(0x90,0x51,0x7F)  */
if ( sdMidiSetMes( midi_handle, &midi_mes, SDD_MIDI_NOTE_ON | midi_ch, 0x51, 0x7F) != SDE_ERR_NOTHING)
{
/*  エラーが起こった  */
goto exit;
}

/*  MIDIメッセージの送信  */
if ( sdMidiSendMes( midi_handle, &midi_mes, 0) != SDE_ERR_NOTHING)
{
/*  エラーが起こった  */
goto exit;
}

/*  サウンドサーバを実行(本来Vブランクなどで呼ぶ)  */
sdSysServer();

/*
 *  しばらく待つ
 */

for ( i = 0; i < 0x10000; i++);
/*
 *  鳴っている音を止める
 */

/*  MIDIメッセージの作成(0x90,0x51,0x7F)  */
if ( sdMidiSetMes( midi_handle, &midi_mes, SDD_MIDI_NOTE_OFF | midi_ch, 0x51, 0x00) != SDE_ERR_NOTHING)
{
/*  エラーが起こった  */
goto exit;
}

/*  MIDIメッセージの送信  */
if ( sdMidiSendMes( midi_handle, &midi_mes, 0) != SDE_ERR_NOTHING)
{
/*  エラーが起こった  */
goto exit;
}

/*  サウンドサーバを実行(本来Vブランクなどで呼ぶ)  */
sdSysServer();

exit:
if ( midi_handle != NULL)
{
/*  MIDIポートのハンドルの破棄  */
result = sdMidiClosePort( midi_handle);
}

/*  無限ループ  */
while ( 1);

return ( 0);
}

/*EOF*/