"Ootake" Nonsupport BBS ノンサポート掲示板 管理:ソフト開発グループ「Finath(ファイナス)」

現在までに、8454人の方が、この書き込みをご覧になっています。

17/08/28(月)13:03 ひろ
Re)ADPCMの動作について

こんにちは
Yuna - HuVideo CD (J)では
ADPCM関連の処理の流れは下記のようで

ADPCM_WriteBuffer 134Byte書き込み
ADPCM_SetLength 0x8001
ADPCM_SetFreq 16kHz
割り込みマスク設定 ADPCM_STATE_HALF_PLAYED
ADPCM_Repeat Enable
割り込み待ちとなる。

実機のIRQ2の割り込み周期が16m秒程度なので
128Byteで割り込みかと思われます。

_LengthCountが0x8001で動作を切り替える場合は
下記の様になると思われます。

makeSample関数 変更願います
else if (_LengthCount == 0x8001) //HuVideo再生時。テスト
{
 if (_PlayAddr == _PlayHalfAddr)
 {
  _PlayHalfAddr += 0x80;
  if (_pfnNotification != NULL) _pfnNotification(ADPCM_STATE_HALF_PLAYED);
 }
}

ADPCM_Reset関数 追加願います。
_PlayLength = 0;

ADPCM_Play関数の初めに追加願います。
if (_bRepeat && _LengthCount == 0x8001)
{
 _PlayAddr = _ReadAddr;
 _PlayHalfAddr = 0x01;
 _PlayedSampleCount = 0;
 ad_sample = 0;
 _DecodeBuffer = decode(_Ram[_PlayAddr] >> 4);
 _bLowNibble = TRUE;
 _Phase = 0;
 _CDDAAjustCount = 0;
 _bPlay = TRUE;
}
else if (bPlay)


メッセージ一覧へ戻る

Copyright(C)1997-2007 Kitao Nakamura.