File midi e risorse

giovedì 14 luglio 2005 - 03.01

Gossip Profilo | Newbie

Salve,
ho inserito in un form il seguente codice per riprodurre un file midi:

Imports Microsoft.DirectX
Imports Microsoft.DirectX.AudioVideoPlayback

Dim audio1 As Audio

audio1 = New Audio(Application.StartupPath + "\song.mid")
audio1.Play()

Vorrei inserire il file midi all'interno dell'eseguibile in modo tale da non tenerlo nella dir del programma, come posso fare? Come richiamo poi dalle risorse il file?

Premetto che l'unica volta che ho utilizzato le risorse è stato per inserire il file .manifest all'interno del exe per ottenere i controlli stile XP, in pratica selezionavo l'exe già compilato ed inserivo il file .manifest al suo interno.

In questo caso però stavo provando a creare un file di risorse nel seguente modo:

File -> Nuovo -> File -> Modello di risorsa
Tasto destro -> Importa (scelgo il file midi)
...
Ottengo così un file .rct

Stranamente quando compilo la dimensione dell'exe è identica a prima che creassi il file di risorse, è come se non avesse inserito all'interno dell'eseguibile il file midi nonostante il file .rtc sia presente in "esplora soluzioni" prima della compilazione, cosa sbaglio?
Cosa cambia tra "Modello di risorsa" e "File di risorse assembly"?
Scusate le numerose domande, grazie in anticipo!!

Brainkiller Profilo | Guru

Ciao,
prova a leggere questo Thread:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=3972

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Gossip Profilo | Newbie

Ti ringrazio moltissimo di avermi risposto, non ci speravo +.
Sono riuscito a farlo funzionare con un immagine:

Dim thisExe As System.Reflection.Assembly
thisExe = System.Reflection.Assembly.GetExecutingAssembly()
Dim file As System.IO.Stream = _
thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg")
Me.PictureBox1.Image = Image.FromStream(file)

Non so cosa mettere al posto di "Image.FromStream(file)" per un suono in modo da utilizzarlo nel codice postato prima
Grazie ancora

Gossip Profilo | Newbie

Ho risolto in questo modo:

- Ho aggiungo il file midi da "Esplora soluzioni" al progetto
- Ho impostato la proprietà "Operazione di generazione" del file midi in "Risorsa incorporata"
- Ho scritto il seguente codice:

Dim thisExe As System.Reflection.Assembly
Dim file As System.IO.Stream

thisExe = System.Reflection.Assembly.GetExecutingAssembly

file = thisExe.GetManifestResourceStream("Suoni.song.mid")

'crea un array di byte dallo stream
Dim bytearray As Byte()

ReDim bytearray(CInt(file.Length) - 1)
file.Read(bytearray, 0, CInt(file.Length))
file.Close()

'scrive l'array di byte in un file
Dim FileLibero As Integer = FreeFile()

FileOpen(FileLibero, Application.StartupPath & "\song.mid", OpenMode.Binary, OpenAccess.Write)
FilePut(FileLibero, bytearray)
FileClose(FileLibero)

'Suona il file creato
Dim audio1 As Audio
audio1 = New Audio(Application.StartupPath + "\song.mid")
audio1.Play()

E'possibile non creare il file midi nella dir del programma ma farlo suonare direttamente dall'array di byte creato?

Naturalmente se scrivo così non funziona:
audio1 = New Audio(bytearray)
audio1.Play()


Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5