[過去ログ]
ゲームボーイアドバンス(GBA)非公式開発 Part2 (1002レス)
ゲームボーイアドバンス(GBA)非公式開発 Part2 http://mevius.5ch.net/test/read.cgi/gamedev/1099119005/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
402: 名前は開発中のものです。 [sage] 2006/02/12(日) 17:28:27 ID:7Ys7XIFa だいぶ前にDirectSoundで音を鳴らそうとしていた>>318です。 「波平」と、サンプルソース( >>318と同じ処理 )を拾うことができたので、 あらためてチャレンジしてみたところ音が鳴るようになりました。 どうも、SoundEngineが原因だった様な気がします。 次にwavを複数登録しようとしたのですが、また壁に当たってしまいました。 複数のWavファイルをROMに格納しておいた場合、 指定してないファイルが勝手に再生されてしまうことがあります。 extern u8 test[]; // wav1 extern u8 data[]; // wav2 void AgbMain() { play_dma((u32*)&data); // play_dma((u32*)&test); while(1){} } こういうソースがあったとき、例えば data を指定して再生すると data だけが再生されるのですが、 test を指定して再生すると test の再生が終わった後、勝手に data の再生が始まるのです。 どうも、wavファイルの配列の先頭のアドレスは引数として渡されているけど 終端の方がチェックされていないので、ずるずると再生が続いてるような気がします。 >>322のソースでは、フレーム数を計ってプログラマーの方で手動で再生を切っているようですが そんな方法しかないのでしょうか http://mevius.5ch.net/test/read.cgi/gamedev/1099119005/402
403: 名前は開発中のものです。 [sage] 2006/02/12(日) 17:33:59 ID:7Ys7XIFa int play_dma(u32* sound_src){ // DirectSound設定 REG_SGCNT0_H = 0x0906; *(u16*)0x4000082 = 0x0b0E; // sound control channel ( SGCNT0_H ) // 左右ボリュームの設定 1234 1234xLLL xRRR (0x77) REG_SGCNT0_L = 0xffff;0x0080; *(u16*)0x4000084 = 0xffff; //sound enable ( SGCNT1 ) // *(u32*)0x40000BC =(unsigned long)&ROM_Sample; // the address of the source // *(u32*)0x40000BC = (u32*)sound_src; // the address of the source // Waveデータ転送アドレス設定 *(u32*)0x40000BC =(u32)sound_src; // the address of the source // DMA→サウンド REG_SGFIFOA_L *(u32*)0x40000c0 = 0x040000a0;// Dest DMA LOW&HIGH written (0x40000c0= DM1DAD_L )(0x040000a0=SGFIFOA_L) // DMA有効,転送元増加,転送先固定,32ビット // REG_DM1CNT_H = DMA_ENABLE(8000) | DMA_TIMMING_SOUND(3000) | // DMAイネーブル・サウンドFIFO要求 // DMA_IF_ENABLE(4000) | // 割り込み要求イネーブル // DMA_CONTINUOUS_ON(0200) | // 連続モードON // DMA_SRC_INC(0000) | DMA_DEST_FIX(0040) | // 転送元増加・転送先不変選択 // DMA_32BIT_BUS(0400); // 32ビット // =e640 *(u16*)0x40000C6 = 0xB640; // サウンドFIFO要求を入れると音が鳴らない? // タイマー0の値を設定 u16の−値がサンプリングレート(周波数)になる // 11KHzの場合 -1520 *(u16*)0x4000100 = (u16)(-1520); // タイマー0を設定、周期は1クロックで1進む *(u16*)0x4000102 = 0x0080; //timer Control. Ingen IRQ eller nerdelning av CPU clockan. } http://mevius.5ch.net/test/read.cgi/gamedev/1099119005/403
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.032s