PDA

Visualizza la versione completa : [C++] Includere file audio (wav) nell'eseguibile


marandavide
24-02-2012, 16:06
Sto creando un gioco in cui l'obiettivo è cliccare un pulsante che si muove in modo casuale ad una velocità variabile. Per fare ciò sto usando c++ builder dell'Embarcadero (una versione successiva a borland c++ builder ma con lo stesso funzionamento).
Poiché sul bottone è raffigurato un palloncino, volevo fare in modo che cliccandolo si sentisse il rumore dello scoppio di un palloncino. Così ho usato questo codice che apre un MediaPlayer e lo fa partire:


void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
MediaPlayer1->Open();
MediaPlayer1->Play();
}


Nelle proprietà del MediaPlayer ho inserito "D:\c++\Scoppio.wav" sotto FileName.
In questo modo il programma funziona, ma quando lo copio in un altro computer chiaramente da un errore in quanto non esiste nessun "D:\c++\Gioco Riflessi\Scoppio.wav".
La mia domanda quindi è: esiste un modo per includere Scoppio.wav nell'eseguibile e associarlo al FileName del MediaPlayer?

ESSE-EFFE
24-02-2012, 16:34
Originariamente inviato da marandavide
La mia domanda quindi è: esiste un modo per includere Scoppio.wav nell'eseguibile e associarlo al FileName del MediaPlayer?

Sì, includi il file come risorsa. Dovrai aggiungere un file RC al progetto ed inserire una riga che definisce la risorsa, qualcosa tipo:


WAV_SCOPPIO WAVE "SCOPPIO.WAV"

Per riprodurre il file quando serve, scomodare MediaPlayer è eccessivo, ti basta usare la PlaySound come segue:


PlaySound(MAKEINTRESOURCE(WAV_SCOPPIO), HInstance, SND_ASYNC | SND_RESOURCE);

marandavide
24-02-2012, 16:47
Grazie, ma...

Originariamente inviato da ESSE-EFFE
Sì, includi il file come risorsa. Dovrai aggiungere un file RC al progetto ed inserire una riga che definisce la risorsa, qualcosa tipo:


WAV_SCOPPIO WAVE "SCOPPIO.WAV"

Potresti dirmi come aggiungere il file RC?


Originariamente inviato da ESSE-EFFE
Per riprodurre il file quando serve, scomodare MediaPlayer è eccessivo, ti basta usare la PlaySound come segue:


PlaySound(MAKEINTRESOURCE(WAV_SCOPPIO), HInstance, SND_ASYNC | SND_RESOURCE);
Potresti dirmi che libreria serve per PlaySound?

Grazie di nuovo e scusa per l'ignoranza

ESSE-EFFE
24-02-2012, 16:58
Originariamente inviato da marandavide
Grazie, ma...

Potresti dirmi come aggiungere il file RC?
E' semplicemente un file con estensione RC (per esempio Risorse.rc) che aggiungi al progetto.


Originariamente inviato da marandavide
Potresti dirmi che libreria serve per PlaySound?
Per questo c'erano Google e/o MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx

Devi includere Mmsystem.h.

marandavide
24-02-2012, 17:07
Originariamente inviato da ESSE-EFFE
E' semplicemente un file con estensione RC (per esempio Risorse.rc) che aggiungi al progetto.


Intendevo come fare a ottenere un file di risorse da un file wav

ESSE-EFFE
24-02-2012, 17:15
Originariamente inviato da marandavide
Intendevo come fare a ottenere un file di risorse da un file wav
Non lo devi fare. Crei un file RC e ci inserisci la riga che già ti ho indicato. E lo aggiungi al progetto. Poi ci penseranno compilatore e linker ad andare a prendere il file WAV (dove gli hai detto tu) e a linkarlo (appunto) all'eseguibile.

WAV_SCOPPIO è solo una costante (integer), puoi definirla dove ti pare:

#define WAV_SCOPPIO 20000 (ad esempio)

marandavide
24-02-2012, 17:35
Originariamente inviato da ESSE-EFFE
WAV_SCOPPIO è solo una costante (integer), puoi definirla dove ti pare:

#define WAV_SCOPPIO 20000 (ad esempio)
L'ultima domanda: WAV_SCOPPIO la definisco nel progetto originale o in questo file RC? E 20000 per cosa sta?

ESSE-EFFE
24-02-2012, 17:42
Originariamente inviato da marandavide
L'ultima domanda: WAV_SCOPPIO la definisco nel progetto originale o in questo file RC? E 20000 per cosa sta?
Ti conviene definirla in un .H che includerai dove serve. 20000 è un puro esempio, come ho già scritto. Ora che sai come si fa, ti consiglio di documentarti bene sui file RC, ovviamente sul Web trovi tutto il necessario.

marandavide
24-02-2012, 18:23
non capisco perché ma il progetto non da errori nella compilazione, però nell'eseguibile non si sente l'audio. Se aiuta, il codice che ho inserito è questo
Nel file RC:

WAV_SCOPPIO WAVE "Scoppio.wav"
Nell'header del progetto:

/*..................*/

#define WAV_SCOPPIO 20000

............*/
Nel codice sorgente:


#include<vlc.h>
#include<mmsystem.h>
/*.............................*/
void __fastcall TForm1::BitBtn1Click(TObject *Sender) {
PlaySound(MAKEINTRESOURCE(WAV_SCOPPIO), HInstance, SND_ASYNC | SND_RESOURCE);
BitBtn1->Enabled=false; }
}
/*..............*/

Rising1
24-02-2012, 18:58
scusate se mi intrometto, volevo fare una cosa simile, ma con un WMV.

per il file RC posso seguire lo stesso procedimento no?

per riprodurre il video poi che è meglio fare? con un comando richiamare il media player predefinito passando il video?
se si, che path devo passare?

Loading