Newsgroup: it.comp.lang.delphi
Titolo: Wave in un exe

Ciao
C'è un modo per inglobare un file audio(wav) in un exe, senza dover allegare
all'eseguibile il file audio stesso?
Ho provato  a far playare il wave tramite un file res ma il programma lo
esegue da dove sta, non lo "immagazzina"
Chi mi aiuta? Magari è una cavolata o magari non si può fare....non sò...
Grazie
Andrea

 ha scritto nel messaggio
news:_YRJ8.2198$t47....@twister1.libero.it...

Facendo una rapida ricerca sul vecchio it.comp.delphi è saltato fuori questo
post del buon vecchio Antonio Tarolla (non te la prenderai mica se posto un tuo
msg :))
--- INIZIO POST
"Per fare quello che chiedi devi utilizzare le risorse. Cioè creare un file
RC con la descrizione della risorsa, compilare questo file con il BRCC32.EXE
incluso nella directory BIN di Delphi e specificare il file RES ottenuto
nell' unit della tua form.
Il file RES dovrai specificarlo così:
{$R nomefilerisorsa.res}
ora per ascoltare il file contenuto nella risorsa, l' unico sistema che mi
viene in mente è estrarla e salvarla su file e poi darla in pasto al
MediaPlayer che la suona.
Per far ciò, ti conviene utilizzare la classe TResourceStream. Nell' help
trovi la descrizione dei metodi.
Per creare il file RC, avvia il NOTEPAD ed all' interno scrivici:
220 WAV unità\percorso\nometuofile.wav
ora salvalo con estensione RC !!
Passa alla compilazione. Questa in genere va sempre a buon fine ma non è
detto che il file RES funzioni !!
Non ho mai provato con gli WAVE ma basta indovinare il modulo e si può
includere ogni risorsa.
Per esempio con i MIDI basta includere MID, con le bitmap bisogna
specificare BITMAP ecc....
Comunque con BINARY dovresti andar sul sicuro con la maggior parte di
formati.
Tu prova, al limite scrivimi pure in privato.
Come ti ho detto, per l' estrazione dai un' occhiata a TResourceStream e
vedrai che è semplice !!!
Comunque stai tranquillo che riuscirai ad includere il tuo file WAVE nell'
eseguibile !!"
--- FINE POST
Spero che ci avesse visto giusto, io non ho mai provato :)
__
Jax

 > Chi mi aiuta? Magari è una cavolata o magari non si può fare....non sò...
Spinto dal cazzeggio di questo sabato mattina, ho provato anch'io ed eccoti la
soluzione:
1) crea un file di testo "pippo.rc" (nella stessa dir dell'applicazione sarebbe
meglio) e scrivici dentro
    SOUND1 WAVE "suono1.wav"
    SOUND2 WAVE "suono2.wav"
    ecc....
2) dal prompt fai un bel "brcc32 pippo.rc", verrà creato un file "pippo.res"
3) nel tuo project (Project | View Source), aggiungi la riga
    {$R pippo.res}
4) fai Project | Build Resources
5) includi nelle unit in cui vuoi utilizzare i suoni, la unit "MMSystem"
5) quando ti serve far suonare uno wav, fai
    PlaySound('SOUND1', MainInstance, SND_RESOURCE);
Prova e fammi sapere.
Ciao!
__
Jax

     PlaySound('SOUND1', MainInstance, SND_RESOURCE);
o meglio,
    PlaySound('SOUND1', MainInstance, SND_RESOURCE+SND_ASYNC)
altrimenti il tuo prog si blocca durante l'esecuzione di tutto il wav.
__
Jax

"Jax" <rispo...@newsgroup.grazie> ha scritto nel messaggio
news:yB%J8.3235$QT3....@twister2.libero.it...

Grazie mille, mi metto subito all' opera
Ciao
Andrea

"Jax" <rispo...@newsgroup.grazie> ha scritto nel messaggio
news:fD%J8.3268$t47....@twister1.libero.it...

Fatto
Funziona che è una meraviglia...
Nel mio D5 non c'è quello che tu dici nel punto 4: Project | Buil Resources
E' normale?
Io ho semplicemente compilato e funziona
Credo che per fare la stessa cosa con .avi  ,  .mpg e .bmp, il procedimento
sia lo
stesso, se non per le funzioni corrispondenti che non possono certo essere
PlaySound.Conosci quai sono?
Grazie mille
Andrea

 PlaySound.Conosci quai sono?
Non è detto che sia proprio uguale. PlaySound è una funzione "user friendly" che
ti permette di playare un wav direttamente dalle risorse; se ti serve una cosa
più elaborata, io ti consiglio caldamente di cambiare approccio al problema e
usare un TMediaPlayer, per queste ragioni:
1) puoi usare tutti i tipi di file che usi con il Windows Media Player, in
pratica tutti quelli per cui hai un codec installato (compresi divX et similia)
2) puoi far suonare uno wav senza doverlo caricare *tutto* in memoria, come
invece fa PlaySound. Prova con un wav da qualche mega e vedrai la differenza
3) non ti devi sbattere con API tremende
Il pay-off è che devi necessariamente caricare il media da un file. Se per il
tuo progetto, "nascondere" i file multimediali che usa è un requisito, potresti
prendere una strada alternativa rispetto all'includerli nell'exe (che poi IMHO è
scomodo, se vuoi cambiare un suono devi ricompilare il progetto - che poi se
includi avi e mpg diventa grandissimo): potresti per esempio pensare ad avere un
file "data.dat" che in realtà è uno zip che contiene tutti i file.
Con il componente DelphiZip che trovi su Torry, poi ti crei una routine
generalizzata che, passandogli il nome del file, te lo estrae nella dir
temporanea così puoi utilizzarlo con il TMediaPlayer.
Questo è il mio suggerimento!
__
Jax

"Jax" <rispo...@newsgroup.grazie> ha scritto nel messaggio
news:CUkK8.7077$t47.1...@twister1.libero.it...

Grazie mille per il tempo dedicatomi
Proverò a fare come dici
Ciao
Andrea

Proverò a fare come dici
Nel frattempo, casomai ti venisse di nuovo voglia di postare su questo
ng, sarebbe bene che ti leggessi questo articolo :)
http://digilander.iol.it/ifst/html/Quoting.html