Üdvözöllek!
A Mid fájlokat le tudjuk játszani a projectünkben,de
segítségül kell Hívni egy Dll programot,Amit
ingyenesen letölthetsz innen:
A kijelölt fájlt kell letölteni, abból fogjuk használni a
forrásfájlokat.
Ha sikerült letölteni,akkor adjál a projecthez egy új fájlt Midi.hpp néven.
A szokásos menet,létrehozzuk a MIDI osztályunkat. DE előtte
hozz létre egy midi nevű mappát,és tegyél bele egy pár midi fájlt, nevezd őket
sorban át m1.mid m2.mid m3.mid
stb.
Ezek után ha valahova kicsomagoltad a letöltött anyagot,másold
át a project-be az fmod.h az fmod.dll és az
fmodvc.lib fájlokat a későbbi használathoz!
Az alaposztály dekralációja:
#ifndef _MIDI_
#define _MIDI_
#include <fmod.h>
#pragma comment(lib, "fmodvc.lib")
class MIDI
{
public:
MIDI();
~MIDI();
bool midi_init(int num=0);
void midi_play();
void midi_pause(bool);
void midi_stop();
void midi_hangero(unsigned char);
void midi_loop(bool);
char midi_playing();
protected:
FMUSIC_MODULE *mod;
bool init_ok;
};
#endif
A Konstruktor és destruktor:
//
//Megvalósítások:
//
MIDI::MIDI(){mod=NULL;init_ok=false;}
//
MIDI::~MIDI(){FMUSIC_StopSong(mod);FMUSIC_FreeSong(mod);}//Ha az oszt.
megszűnik felszabadítunk.
A midi init() megvalósítása:
bool MIDI::midi_init(int num)//melyik szám
töltődjön be?
{
LPCTSTR nevek[]={"midi/m1.mid","midi/m2.mid","midi/m3.mid"};
if(!init_ok)
{
if (FSOUND_GetVersion() < FMOD_VERSION)
{
// err("rossz dll");
return 0;
}
FSOUND_SetOutput(FSOUND_OUTPUT_WINMM);
if (!FSOUND_Init(44100, 32, FSOUND_INIT_USEDEFAULTMIDISYNTH))
{
// err("inithiba");
return false;
}
}
init_ok=true;
if(mod){FMUSIC_StopSong (mod ) ;}
mod = FMUSIC_LoadSong(nevek[num]);
if (!mod)
{
//err("nincs file ilyen sehol,vagy hibás");
}
return true;
}
Ha elsőnek hívjuk meg, akkor betölti a dll-t, de a
továbbiakban már nem, csak az új fájlt.
A többi függvény megvalósítása:
void MIDI::midi_play() {FMUSIC_PlaySong (mod )
;}
void MIDI::midi_stop() {FMUSIC_StopSong (mod ) ;}
void MIDI::midi_hangero(unsigned char vol) {FMUSIC_SetMasterVolume (mod,vol) ;}
void MIDI::midi_loop(bool l) {FMUSIC_SetLooping (mod,l) ;}
char MIDI::midi_playing() {return FMUSIC_IsPlaying(mod) ;}
void MIDI::midi_pause(bool jelzo) {FMUSIC_SetPaused (mod,jelzo) ;}
Hát ennyi. Használjuk a Main cpp-ben.
Először is csatoljuk a fájlt:
#include <Sprite.hpp>
#include <Midi.hpp>
---------
Hozzuk létre a tényleges oszályt:
MIDI midi;
SPRITE sprite;
Azért tettem a sprite elé, mert az fogja végül is használni, és ne legyen
fordítási hiba.( később)
Az inicializáló függvények közé tegyed be a midi_init()
függvényt.:
--------
sprite.sp_init ();
midi.midi_init();midi.midi_play();
while (fut)
--------
Ebben az esetben az első számot játssza le,de konkrét számmal meghívva azt fogja
lejátszani!
figyelni kell,hogy nagyobb számmal ne hívjuk meg, mint amennyi tényleg van,mert
nem irtam meg az ellenőrzést.(Valamit azért te is írhatsz hozzá!)
Használata :
while (fut)
{
static int flag=0;//ha a pause függvényt többször hívod,
kiakad a progi tehát:
if(input.get_key(DIK_A,true) && !flag){midi.midi_pause(true);flag=1;}
if(input.get_key(DIK_B,true) && flag){midi.midi_pause(false);flag=0;}
if(input.get_key(DIK_C,true)){midi.midi_stop();midi.midi_init(1);midi.midi_play();}
uzenetkezelo();
sprite.frissit();
input.get_key(0,true);//csak azért hívjuk meg,hogy az esc-re kilépjen
}
return 0;
};
//
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
lParam)
{
switch (message) /* vizsgáljuk az üzenet tipusát */
{
case WM_ACTIVATE: //ha az alkalmazás előtérbe került
switch(wParam)
{
case WA_ACTIVE:
case WA_CLICKACTIVE:
aktiv=true; //az más osztályok innen tudják,hogy az ablak aktív-e
if(input.bill)input.bill->Acquire();
if(input.mouse)input.mouse->Acquire();
midi.midi_play();
break;
case WA_INACTIVE:
aktiv=false;
if(input.bill)input.bill->Unacquire();
if(input.mouse)input.mouse->Unacquire();
midi.midi_stop();
break;
}
break;
Azért írtam bele, mert a dll akkor is játssza a zenét, amikor
az alkalmazásunk kisméretben van,és ez zavaró lehet.A későbbiekre javaslat: egy
valamekkora időzítő, ha lejárt a zenét folyamatosan lehalkítani (255-0)
újat betölteni,és lehet lejátszani.egy játék alatt monoton ugyanaz a zene .....
Következik az MP3 lejátszása, az is ezzel a dll-el, hasonlóan egyszerű.
Itt a kód:
vissza
|