Mercurial > hg > Members > kono > tree_dandy2
view sound.c @ 21:b7654db65a34
add TODO
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 10 Dec 2010 19:04:17 +0900 |
parents | 01387a2e419e |
children | dc3b1d4fe835 6754fbb63ac7 |
line wrap: on
line source
#include <stdio.h> #include <SDL.h> #include <SDL_mixer.h> //追加 #include "sound.h" #include "Ss.h" #include "error.h" //#include "libps.h" //int vh_addr[10]={0x80140000,0x80141a00,0x80143000,0x80144400,0x80148200, // 0x80149300,0x8014f300,0x80130000,0x80130000,0x80130000}; //_________________________________________________________ Mix_Chunk *chunk[8]; // 音楽ファイルの読み込み変数 int channel[8]; //_________________________________________________________ static char buf0[] = "pBAV"; int vh_addr[10] = { (int) buf0, (int) buf0, (int) buf0, (int) buf0, (int) buf0, (int) buf0 }; int vb_addr[10] = { 0x80140d00, 0x80142700, 0x80143d00, 0x80145100, 0x80148f00, 0x8014a100, 0x80150000, 0x80140000, 0x80140000, 0x80140000 }; int vab[10]; /* SE 用 VAB */ unsigned char *buf; int cnt; int seqno = -1; int seq[4]; /* SEQ data id */ int sdvab; /* 常駐 SE.VAB */ //CdlFILE vhfile, vbfile; int SQ[10] = { 0x80155000, 0x8015f000, 0x80168000, 0x8016e000, 0x80175000, 0x80177000, 0xa00d0000, 0xa00e0000, 0x801e0000 }; void Soundss() { /* int i; //Set Sound Reverb @@@ リバーブの設定 printf("音源データをCDから読み込み中"); SsUtSetReverbType(SS_REV_TYPE_STUDIO_C); SsUtReverbOn(); // 音源データのCDからの読み込み // 標準音源(VH属性部)の読み込み for (i = 0; i < 10; i++) { // リトライループ if (CdSearchFile(&vhfile, VH_NAME) != 0) break; //正常終了ならばリトライループ中断 else printf("%s not found.\n", VH_NAME); } printf("♪"); for (i = 0; i < 10; i++) { // リトライループ CdReadFile(VH_NAME, (void *) SQVH_ADDR, vhfile.size); // リードの裏で通常の処理は実行できる。 // ここでは、Read が終了するまで残りのセクタ数を監視 while ((cnt = CdReadSync(1, 0)) > 0) VSync(0); // 垂直同期割り込み待ち(時間調整用) if (cnt == 0) break; // 正常終了ならばリトライループ中断 } // 標準音源(VB波形部)の読み込み for (i = 0; i < 10; i++) { // リトライループ if (CdSearchFile(&vbfile, VB_NAME) != 0) break; // 正常終了ならばリトライループ中断 else printf("%s not found.\n", VB_NAME); } printf("♪"); for (i = 0; i < 10; i++) { // リトライループ CdReadFile(VB_NAME, (void *) SQVB_ADDR, vbfile.size); // リードの裏で通常の処理は実行できる。 // ここでは、Read が終了するまで残りのセクタ数を監視 while ((cnt = CdReadSync(1, 0)) > 0) VSync(0); // 垂直同期割り込み待ち(時間調整用) if (cnt == 0) break; // 正常終了ならばリトライループ中断 } printf("♪"); // Open & transfer VAB data @@@ *VAB データのオープン,転送 sdvab = SsVabTransfer(SQVH_ADDR, SQVB_ADDR, -1, 1); if (sdvab < 0) { printf("VAB open failed(sdvab = %d)\n", sdvab); return; } printf("完了。\n"); // seq[0] = SsSeqOpen (SQ_ADDR, sdvab); // for (i=0;i<8;i++) // seq[i] = SsSeqOpen ((unsigned long*)SQ[i], sdvab); */ } void SoundPlay(int no) { // Open SEQ/SEP datas @@@ * SEQ/SEP データのオープン // SsSetMVol (127, 127); // SsUtSetReverbDepth( 40, 40 ); seq[no] = SsSeqOpen((unsigned int *) SQ[no], sdvab); seqno = no; //SsSeqPlay(seq[no], SSPLAY_PLAY, 0); } void SoundStop() { if (seqno == -1) return; //SsSeqStop(seq[seqno]); //SsSeqClose(seq[seqno]); } //__________________________________________________________________ /** * 全部これで判定するのはおかしい。 * んだけど、時間がががががが */ int no_useSDLMixer = 0; void InitSdlMixer(void) { if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,MIX_DEFAULT_FORMAT,2,1024) < 0) { __debug("failed to initialize SDL_mixer.\n"); no_useSDLMixer = 1; } } // 音楽ファイル読み込み関数 void LoadSdlMixer() { if (no_useSDLMixer) { __debug("%s is not executed because no_useSDLMixer is set\n", __FUNCTION__); } else { chunk[BGM]=Mix_LoadWAV("./sound/sample.wav"); chunk[SHOT_A]=Mix_LoadWAV("./sound/shota.wav"); chunk[SHOT_B]=Mix_LoadWAV("./sound/shotb.wav"); chunk[SHOT_C]=Mix_LoadWAV("./sound/shotc.wav"); chunk[RING]=Mix_LoadWAV("./sound/ring.wav"); chunk[NEW]=Mix_LoadWAV("./sound/powerdown.wav"); chunk[JIKIOUT]=Mix_LoadWAV("./sound/jikiout.wav"); chunk[BOM]=Mix_LoadWAV("./sound/bomber.wav"); // 読み込めないファイルがあればエラーで終了 if(!chunk[BGM] || !chunk[SHOT_A] || !chunk[SHOT_B] || !chunk[SHOT_C] ||!chunk[RING] || !chunk[NEW] || !chunk[JIKIOUT] || !chunk[BOM]) { fprintf(stderr,"failed to load sound.\n"); //return -1; return; } } } /* 音楽再生関数 int fleg ... 再生回数。-1でループします。 int ch ... 再生する音の番号*/ void PlaySdlMixer(int fleq, int ch) { if (no_useSDLMixer) { __debug("%s is not executed because no_useSDLMixer is set\n", __FUNCTION__); } else { channel[ch]=Mix_PlayChannel( ch ,chunk[ch], fleq); } } void PauseSdlMixer(int ch) { if (no_useSDLMixer) { __debug("%s is not executed because no_useSDLMixer is set\n", __FUNCTION__); } else { Mix_Pause(ch); } } void ResumeSdlMixer(int ch) { if (no_useSDLMixer) { __debug("%s is not executed because no_useSDLMixer is set\n", __FUNCTION__); } else { Mix_Resume(ch); } } void TimeSdlMixer(int fleq, int ch, int time) { if (no_useSDLMixer) { __debug("%s is not executed because no_useSDLMixer is set\n", __FUNCTION__); } else { channel[ch]=Mix_PlayChannelTimed( ch ,chunk[ch], fleq, time); } } // 音の解放関数 void FreeSdlMixer() { int i ; if (no_useSDLMixer) { __debug("%s is not executed because no_useSDLMixer is set\n", __FUNCTION__); } else { for(i =0; i < 8; ++i) { Mix_FreeChunk(chunk[i]); } } } void InitVolume(void) { if (no_useSDLMixer) { __debug("%s is not executed because no_useSDLMixer is set\n", __FUNCTION__); } else { Mix_Volume( 0, 255); // BGM Mix_Volume( 1, SE_VOLUME); // SHOT_A Mix_Volume( 2, SE_VOLUME); // SHOT_B Mix_Volume( 3, 100); // SHOT_C Mix_Volume( 4, 40); // RING Mix_Volume( 5, SE_VOLUME); // NEW Mix_Volume( 6, SE_VOLUME); // JIKIOUT Mix_Volume( 7, 100); // BOM } } //_________________________________________________________________