Oppure

Loading
18/12/08 8:13
mitor
Ciao a tutti,
sto esplorando un pò il mondo del c++, momentaneamente sto utilizzando C++ Builder 2009
vorrei sapere se è possibile integrare un file audio nell'eseguibile, ed estrarlo...
in modo tale che il file audio, quando c'è la necessita che venga ascoltato, viene estratto e poi cancellato..per il codice di riproduzione del file audio, ho già provveduto...
mentre per incorporazione di un file audio e l'estrazione non ho trovato nulla sulla rete..

Se avete il codice necessario, oppure un qualsiasi riferimento che faccia al caso mio, postatelo :D
aaa
18/12/08 13:15
pierotofy
Inseriscilo all'interno dell'eseguibile come risorsa.
Il mio blog: piero.dev
18/12/08 22:16
mitor
Postato originariamente da pierotofy:

Inseriscilo all'interno dell'eseguibile come risorsa.

si fino a qui c'ero arrivato...ma per richiamarlo?:-|
aaa
19/12/08 9:09
pierotofy
{ Funzione per suonare un suono del file .res }
procedure PlayResSound(ResIndex: integer);
begin
  PlaySound(PChar(ResIndex),HInstance, snd_ASync or snd_Memory or snd_Resource);
end; 


Per il codice completo guarda il mio Multiplayer Poker: pierotofy.it/pages/sorgenti/browse/14637/

Moduli Constants.pas e LobbyClient.pas.
Ultima modifica effettuata da pierotofy 19/12/08 9:09
Il mio blog: piero.dev
19/12/08 18:07
mitor
Postato originariamente da pierotofy:

{ Funzione per suonare un suono del file .res }
procedure PlayResSound(ResIndex: integer);
begin
  PlaySound(PChar(ResIndex),HInstance, snd_ASync or snd_Memory or snd_Resource);
end; 


Per il codice completo guarda il mio Multiplayer Poker: pierotofy.it/pages/sorgenti/browse/14637/

Moduli Constants.pas e LobbyClient.pas.


Ho provato ad inserire il codice ma non viene riconosciuta buona parte..come se il compilatore non sappia che ci abbia messo dentro..ricordo che sto usando C++ Builder 2009 (CodeGear) per queste prove, per avviare un semplice file audio nella stessa directory uso:
PlaySound("audio.wav",0,SND_FILENAME | SND_ASYNC | SND_LOOP);


Ho anche provato diverse alternative:
PlaySound("Resource_1", HInstance, SND_RESOURCE);
PlaySound("audio", HInstance, SND_RESOURCE);
PlaySound("audio.wav", HInstance, SND_RESOURCE);

ma nessuna di queste funziona....
ricordo anche che per inserire il file nelle risorse uso dal menu il tasto Resource.
mi viene chiesto anche di selezionare il tipo di risorsa e automaticamente mi imposta RCData.

essendo che ho sempre utilizzato file all'esterno per lavorare, sarebbe comodo integrarli tutti nell'eseguibile..in caso estrarli e poi eliminarli..oppure se possibile avviarli direttamente dalle risorse.


:-|
aaa
20/12/08 3:01
mc
Beh, che ci vuole a incorporarlo manualmente ?
Crei un nuovo file header, e ci scrivi:
//File Resource1.h

//Codice binario
const char *resource1 = "\xBYTE1\xBYTE2"



Per estrarre il codice esadecimale fai un dump binario del file, oppure ti scrivi un programma addatto allo scopo, molto facile.
Anzi te lo posto:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int main(int argc, char **argv){

   FILE *fp = fopen(argv[1], "rb");

   assert(fp != NULL);

   while(!feof(fp)
     printf("\x%X", fgetc(fp));

   putchar('\n');

   return 0;

}



Lo richiami da shell, e gli dai in pasto il tuo file audio. Copi l'output e lo metti come contenuto di resource1.
Poi includi il file resource1.h nel tuo progetto,
e per fare il play basta passare resource1 come parametro alla funzione PlaySound, naturalmente se supporta il play da buffer.

EybEyb.
aaa