PDA

Pogledaj cijelu verziju : [Tutorial] FMOD C++



SkunK
30-12-2007, 20:01
Kako je kolega RayDX zapoceo seriju tutoriala za programiranje aplikacija uz pomoc DirectX-a , ja cu probat pojasnit jedan vrlo vazan aspekt C++ programiranja danas a to je zvuk. Procesiranje i upotrebu zvuka cemo uciti kroz SFMOD S( zasad neznate sta je FMOD ali ne brinite se, sve ce biti objasnjeno. ). Ja isto tako nisam naucio sve sta se tice ovog aspekta programiranja pa cu i ja ucit neke stvari uz vas, i vi uz mene.

Svi primjeri ce biti rađeni u Visual Studiu 2005 Service pack 2, na Windows XP OS-u. IDE koje mozete korisititi su : Borland,DevC++,ili pak VS express. Ja osobno toplo preporucujem VS 2005 - i za njega garantiram da ce primjeri radit.

Prvo cemo zapocet osnovnim upitima, sta nam treba i gdje isto skinuti i kako uspjesno integrirati FMOD u nas IDE.



SŠto je FMOD

S- Mi cemo koristiti FMOD 3 Programmers API - on je zapravo engine koji c++ programeri rapidno koriste za produciranje svakakvih zvukova u svojim aplikacijama ( podrzava .ogg,.wav,.mp3 i ostale poznate formate)
FMOD mozete zamislit kao skup biblioteka koje su potrebne za produkciju zvukova u vasim programima a to znaci da te "biblioteke" sadrze funkcije koje suradjuju usko s nasom zvucnom karticom.

SGdje da skinem FMOD
SNa http://www.fmod.orgS- skinite FMOD 3 Programmers API Windows 32 verziju 3.75

SSkinio sam .rar datoteku sa svim potrebnim stvarima, sta i gdje da raspakiram

SPrvo napravite novi direktorij nazovimo ga recimo "FMOD" i u njega raspakirajte sve sta ste dobili u skinutom .rar arhivu,posto cemo radit u VS-u treba napravit sljedece :
u C:\Program Files\Microsoft Visual\VC\include direktorij stavite sljedece fajlove : fmod.h,fmod_errors.h,fmoddyn.h i wincompat.h a u lib direktorij :fmodvc.lib - imajte na umu da fmod.dll fajl mora biti uvijek u istom direktoriju gdje je i vas projekt, znaci ako imate projekt c:\igra\mojac++igra tu vam mora biti i fmod.dll koji je potreban za pravilno izvodjenje

Sada mozemo krenut na isprobavanje.

Udjimo u VS i pokrenimo : SFile - new - project Si izaberimo Win32 console application.
Dajte ime vasem projektu, recimo "Fmod tut".
Dobili smo novi projekat i sad prvo sta moramo napravit je ici ljevo pod Source files desnim klikom i ici na new i napravit novu source datoteku, nazovimo je "main".

Sljedeca stvar je da moramo linkat nas projekat s jednom od Fmod lib-a.
Radimo sljedece : SProject - Fmod tut propertis - Configuration propertis - Linker - input i onda pod Additional Dependencies upisite : fmodvc.lib. Sjecate se kad smo i di smo stavili tu "knjiznicu"? Da, u lib folder jer nam je ona potrebna za pravilno izvodjenje zadataka koje cemo postaviti za nas VS projekt. Isto tako bilo bi dobro da nadjete neki mali .midi file i postavite ga u direktorij od vaseg projekta ( default je My Documents\Visual Studio\Projects i tamo nadjite direktorij vaseg projekta i stavite neki .mp3 file tamo skupa s onim fmod.dll fajlom se sjecate da on mora biti uvijek ukljucen tamo di je vas projekt?).
Evo vam jedan jednostavni midi za probu :
http://download.yousendit.com/4EDF048827DBB6D3

Ok sada cu vam dat source code i onda cemo se poblize upoznat s njime ( necu vam objasnjavat djelove koda koje se ticu samog C++ jezika, jer bi s time trebali biti upoznati, samo cu objasnit djelove sta se ticu FMOD-a jer je ovo ipak tutorial malo naprednije vrste i ovo ne preporucam ljudima koji su totalni pocetnici sta se tice C++-a ).

Source :


S#include <iostream>
#include <fmod.h>
using namespace std;
char a;

int main () {
FSOUND_Init(44100, 32, 0);
FMUSIC_MODULE *mu = NULL;

mu = FMUSIC_LoadSong("canyon.mid");
FMUSIC_PlaySong(mu);

cout << "Press any key to exit" << endl;
cin >> a;
return 0;



Znaci redom :


[b]FSOUND_Init(44100,32,0);

- Ovaj dio zapravo daje do znanja FMOD-u da kroz sljedece parametre radi ovo : mixa zvuk na 44100hz , koristi 32 kanala za reprodukciju zvuka a o ovoj 0 cemo drugi puta jer je ona nevazna zasad. Prihvatite je zdravo za gotovo :)

FMUSIC_MODULE *mu = NULL;

Kao sta znate u c++-u je dobra programerska navika deklarirati varijable i ostale stvari, pa tako i FMUSIC_MODULE i dajte do znanja da je rezultat ove "moguce varijable" NULL. Zato jer cemo ovu "mu" varijablu koristiti kao kasnije deklaraciju.

mu = FMUSIC_LoadSong("canyon.mid");

Evo tu deklariramo mu varijablu da bude odgovorna za ucitavanje pjesme u ovom slucaju "canyon.mid" koji je u direktoriju od vaseg projekta.

FMUSIC_PlaySong(mu);

Evo vidite, tu pozivamo da ovaj ucitani .midi fajl pokrenemo, a ucitavamo ga tako sta ga ucitavamo kroz varijablu "mu" kojoj je taj fajl dodjeljen.


Sad isprobajte svoj novonastali program, trebao bi se pokrenut console prozor i pocet svirat ovaj .midi fajl, a ako upisete neko slovo i stisnete enter program bi se trebao zatvoriti.


Evo toliko za ovaj put, moze sticky a ako vidim da ljudi hoce jos naucit o FMOD-u i njegovom koristenju, ja cu se potrudit da radim tutoriale za njega sa screenshotovima i detaljnim objasnjenjima.
Ako imate pitanja i komentare slobodno ih tu postavite,msn kontakt imate ili mi saljite PM.

Uzivajte ;)

RayDX
30-12-2007, 20:07
Lijep tutorial!

Burek_fr0m_SPACE
30-12-2007, 20:42
Pohvaljujem; i ja koristim FMOD, vrlo odličan API. Od srca preporučujem da ga prouče svi koji se hoće baviti zvukom u svojim aplikacijama, a tu će vam vjerovatno pomoći Reikov tut. Nadam se da će ga nastaviti.

Luka
30-12-2007, 22:10
sticky ?

Iron Storm
31-12-2007, 00:09
Lijepi su vaši tutoriali (od RayDXa i tvoj) da i mene naginju da napišem neki tutorial o VB 2005-tici, budući da je to najlakši jezik iz paketa Visual Studio za naučiti.

SkunK
31-12-2007, 00:17
Ako bude zainteresiranosti drugi put sljedi tut o otvaranju "jacih" formata tipa .mp3

Iron Storm
31-12-2007, 00:21
Samo daj, a ja ću to pokušati prevesti u Visual Basic. Bit će mi korisno pri programiranju Ponga da pokrenem koju muzikicu.

RayDX
31-12-2007, 12:29
Imam osjećaj da je ova zajednica kol'ko tol'ko oživjela.

SkunK
31-12-2007, 12:52
Samo daj, a ja ću to pokušati prevesti u Visual Basic. Bit će mi korisno pri programiranju Ponga da pokrenem koju muzikicu.

Sve ti je isto samo sta dodajes jedan mali .bat fajl za VB.
A imas sve u manualu inace.

Ok danas navecer dajem drugi tutorial za mp3 fajlove.

SkunK
31-12-2007, 22:56
Tutorial ce malo kasnit zbog hypa - nova godina itd :)

molim sticky.

RayDX
01-01-2008, 03:55
Eto, dobio si svoj sticky, nemoj me ostaviti sam da pišem tutoriale.

SkunK
01-01-2008, 11:16
Necu ;)

SkunK
02-01-2008, 12:30
FOMOD TUTORIAL DIO 2

http://www.ca3d-engine.de/e107_files/images/FeatureList/api_fmod_2.jpg
SPosto su ljudi pozitivno odgovorili na prvu seriju tutoriala o FMOD- api-u ovaj put cu se koncentirati na mp3 fajl koji je po samom formatu,velicini i kvaliteti drukciji od recimo .mod ili .midi zapisa. Naravno odma cemo i koristiti drukcije funkcije koje nam daje FMOD za pozivanje tih istih zapisa jer nemozemo istim funkcijama pozivati takve fajlove posto nisu isti.

Preporucam da procitate malo u FMOD manualu o takvim zapisima i zasto ih nebi mogli pozivat kroz naredbe koje smo prosli put koristili (nego moramo ih prvo loadat u memoriju pa potom reproducirat) isto tako objasnit cemo kada i sta cemo koristiti i koje su prednosti nekih naredbi nad drugima

Pa... zapocmimo

Evo code -a :



#include <iostream>
#include <fmod.h>
#include <string>
using namespace std;
char a;

FSOUND_STREAM *pjesma = NULL;


int main () {



FSOUND_Init(44000, 64, 0);



pjesma = FSOUND_Stream_Open ("hyb.mp3" , FSOUND_2D , 0 ,0);
FSOUND_Stream_Play(0,pjesma);

cout << "Upisite ""kraj" "za izlaz " << endl;
cin >> a;

return 0;



Uglavnom za mp3 fajlove se prvo ucitava "Stream" jer se mp3 file u ovom slucaju nece ponavljat puno puta, a zatim citamo Stream iz pointera.

Ajmo objasnit sta koji dio radi.

FSOUND_STREAM *pjesma = NULL;

- u c++ se sve mora deklarirat pa tako i varijabla pjesma, gdje kazemo compileru da je rezultat NULL. Ako ovo ne napravite onda cete dobivat razne errore a to nam netreba jedal :)

FSOUND_Init(44000, 64, 0);

-Standardno, prije svakog ucitavanja moramo zadat parametre FMOD-u, tj. napraviti initalzaciju znaci standardni 44000 mix na 44000 herza i 32 slobodna kanala za reprodukciju .mp3 fajla

pjesma = FSOUND_Stream_Open ("hyb.mp3" , FSOUND_2D , 0 ,0);

Evo, tu inicijaliziramo onu varijablu "pjesma" da bude zapravo "hyb.mp3" jer cemo tu varijablu poslje koristiti da je otvorimo uz pomoc FSOUND_Stream_Play. znaci prvo navedemo putanju do naseg fajla, zatim zadamo parametar u ovom slucaju FSOUND_2D za 2d muzicku podlogu ( mogao je to biti neki drugi parametar recimo FSOUND_LOOP da se pjesma stalno ponavlja) i dva puta 0,0 jer nam drugi parametri zasad nisu potrebni

FSOUND_Stream_Play(0,pjesma);

Napokon, otvaramo kroz FSOUND_Stream_Play nas fajl, znaci prvo 0 jer nam nisu potrebni kanali koje moze FSOUND sam izabrat jer imamo i tako 32 slobodna, zatim ide varijabla pjesma a ako se sjecate u tu varijablu smo "stavili" nas hyb.mp3 fajl.

Sada vam je zadatak zapamtiti sve komande koje smo koristili za "Manje" fajlove recimo .mod ili .midi i za "Vece" recimo .mp3 u ovom primjeru.


Drugi put cemo uciti kako mozemo "zapakirati" nase muzicke fajlove skupa s fmod.dll i onda to prosljedit drugim ljudima koji nemaju taj fajl i fmod.dll instaliran tako da mogu bez problema slusati, da vam otkrijem, koristiti cemo program zvan MoleBox - ali o tome cemo drugi put.

Otvoren za komentare,podrsku,pitanja. ;)

Do sljedeci puta.

RayDX
05-01-2008, 03:06
Lijep, kratak i zanimljiv tutorial. Keep it up!

SkunK
05-01-2008, 08:21
U tom i jest poanta, da napisem kratko i simple da je razumljivo vecini - a ako netko ima problema - slobodno pita.

I sad cu se vise koncentriati na seriju c++ basic video tutoriala s glasovnom podrskom itd. ali zasad imam problema s codecima jer neznam koje da izaberem, neki imaju prednosti nad drugim ali i opet druge mane.
Snimao bi samo windows sucelje + govorio u mikrofon (ali audio codec nije problem nego video) i snimio bi to poslje u .avi - ali dosta puta je ili fajl prevelik,ili su boje sve retardirane ili je snimka losa dok je u Camtasiji preview dobra cim ode u .avi postane i ona retardirana.

Burek_fr0m_SPACE
05-01-2008, 14:19
Jesi probao Windows Media Encoder? Ako se ne varam, on je sposoban on-the-fly snimati ekran i enkodirati sliku i zvuk u WMV.

SkunK
05-01-2008, 14:53
Pa, iskreno, nisam ali mislim da bi i camtasia dobro trebala obavljat posao.
Kroz ovaj tjedan cu probat jos par codec-a ali bio bi vrlo zahvalan ako bi me cimnuo na msn posto sam uvijek mrzio to drkanje oko codeca itd.

Hvala.

SkunK
07-01-2008, 18:55
SKoristenje MoleBox-a


SPitali ste se kako vas program "Napraviti da radi mom frendu kad mu posaljem bez da mu saljem sve potrebne dll-ove ili muzicke fajlove koji sviraju u tom programu " ? . Imam odgovor na vasa pitanja. Odgovor je = MoleBox

SMole box je "packer" - a to znaci da uz pomoc ovog programa mozete sve file-ove koji su potrebni vasem programu (recimo za nase programe su nam bili potrebni fmod.dll u istom direktoriju di je i program i naravno muzicki file koji bi se na kraju krajeva svirao i morao je biti isto u istom direktoriju gdje je i program. Znaci, uz pomoc ovog programa cete "zapaketirat" sve potrebne file-ove koje koristi vas program - u sam "exe" tj. svi ti potrebni file-ovi ce biti "zapakirani" u vas program - a to znaci da uz vas program frendu necete trebat slat i razne .dll fileove i sve sta ide uz njega

MoleBox mozete nabaviti na ovom linku :
http://www.molebox.com/

Uglavnom, ko zeli PRO i registriranu verziju morat ce me kontaktirat putem MSN-a ili P.M.-a.

Kad ste nabavili MoleBox - prvo sta cete primjetiti jest da je vrlo lagan za koristenje - naravno ako znate sta morate postavit i ako razumijete sto zelite postici.

Evo jedno objasnjenje kroz sliku

http://img258.imageshack.us/img258/3563/moleboxwb2.jpg

Mislim da puno objasnjenja nije potrebno, nakon sta "ubacite" sve potrebne fileove samo stisnete "Pack to box" i nakon minutu-dvije (ovisno o velicini programa i fileova koje pakirate) dobit cete vas program u kojem su svi potrebni fileovi za njegovo pravilno izvodjenje.

Ako imate kakvih pitanja, ili vam nesto ne radi slobodno me kontaktirajte.

brks223
01-07-2010, 21:46
Da te pitam..vidim da je ovo dosta zastarila tema...

Jel ovaj tutorial još uvijek vrijedi? mislim imam ovaj novi visual studio2010 express, a i FMOD verzija je dosta porasla... probo sam po ovom tutorialu, al baš mi ne ide... a sad jel to zbog toga što nisam dosta truda uložio ili ovaj tutorial više ne vrijedi?