Integrer des sons mp3 directement dans la form, sans etre obligé de transporter les fichiers avec l'executable

Soyez le premier à donner votre avis sur cette source.

Vue 3 427 fois - Téléchargée 615 fois

Description

Votre application est au point, ca fait des tocs, des hi-hans, des brrs, que vous avez sous forme de fichiers MP3 dans votre dossier. Avec Windows Multimedia control, vous lisez ces fichiers à la demande.
C'est simple, mais pourquoi ne pas integrer directement ces sons dans votre Form ? J'ai pas trouvé grand chose à ce sujet. Je cherchais un genre de controle picture qui au lieu d'integrer l'image, contienne un son jouable à volonté .
L'astuce que j'ai trouvé, c'est d'utiliser justement une picturebox pour contenir le MP3, sous forme d'image bitmap, et de restituer les blocs d'origine en fichier provisoire MP3 sur le disque.
L'executable peut alors travailler n'importe ou sur votre dique dur, une clé USB, pas besoin de faire suivre vos fichiers sons
Il vous faut Le Windows Multimédia Control, une form avec 4 textbox, 3 boutons, un picturebox et un checbox (voir le ZIP)

Source / Exemple :


Dim lig As String * 256 ' on définit des blocs de 256 octets
Private Sub Command1_Click()
nfich = FileLen(Text1) / 256          ' Combien de blocs dans le fichier
Open Text1 For Random As #1 Len = 256 ' Ouverture du fichier MP3
Open Text2 For Random As #2 Len = 256 ' ouverture du fichier bitmap
For i = 1 To Int(nfich)
Get #1, i, lig                        ' lecture des blocs
Put #2, i + 1, lig                    ' copie dans le bitmap, apres l'entete
Next
Close
Picture1.Picture = LoadPicture(Text2) ' chargement du bitmap dans le controle picture
 
End Sub

Private Sub Command2_Click()
SavePicture Picture1.Image, Text3     ' Ecriture du bitmap dans le fichier provisoire
nfich = FileLen(Text3) / 256          ' Combien de blocs à écrire
Open Text3 For Random As #1 Len = 256 ' Ouverture du fichier bitmap
Open Text4 For Random As #2 Len = 256 ' ouverture du fichier mp3
For i = 2 To Int(nfich)
Get #1, i, lig                        ' Lecture des blocs dans le fichier bitmap
Put #2, i - 1, lig                    ' Restitution de l'image du MP3 avec son entete
Next
Close
Kill Text3                            ' Le bitmap n'est plus nécessaire sur le disque
End Sub

Private Sub Command3_Click()
On Error Resume Next
MMC.Command = "Close"                 ' fermeture en cas de double clic
MMC.FileName = Text4                  ' Fichier à lire
MMC.Command = "Open"                  ' Ouverture du player
MMC.Command = "Play"                  ' Lecture du MP3
If Check1.Value = 1 Then
Kill Text4                            ' Si on n'a pas besoin de le laisser sur le disque
End If
End Sub

Private Sub MMC_Done(NotifyCode As Integer)
MMC.Command = "Close"                ' fermeture du player
End Sub

Conclusion :


j'ai utilisé ce petit programme pour un jeu de petits chevaux, que les enfants se repassent d'une clé USB à l'autre. un seul executable pour tout, sans installation particuliere

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
373
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013

Bonjour,
Avec un fichier binaire, tu peux lire autant d'octets que tu le veux, tu n'es pas limité à 1.
De plus en binaire, tu es sure de lire vraiment la valeur des octets sans interprétation.
Pour les ressources, c'est simple, en vb6 (je suppose que tu codes en vb6) Dans le menu complements/gestionnaire de complements,
tu as une fenêtre dans laquelle tu selectionnes les complements que tu veux, là en l'occurence tu choisis "editeur de ressources VB 6".
Tu coches "Charger/Decharger" et "Charger au démarrage" cliques ensuite sur OK et un nouvel outil apparait dans la barre d'outils de VB.
Il ressemble à un cube vert avec une main. Si tu cliques dessus, une fenetre s'ouvre et te permet d'ajouter ce que tu veux qui sera compilé avec l'appli.
Messages postés
13
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
5 février 2014

Merci du message JLN,
J'aimerais savoir de quelles ressources tu parles ça m’intéresse parce que c'est justement ce que je cherchais avant d'inventer ce bout de code
Pour l'ouverture en mode binaire, j'avoue que je ne m'en suis jamais servi parce que lire octet par octet me semble très lent
j'ai choisi des blocs de 256 octets,mais on peut utiliser des morceaux jusqu'à 32767 octets.
Ça va très bien pour des petits bruits de quelques secondes, mais pour des sons plus longs, voire de la musique, ça peut devenir assez lent et on peut monter sans problème jusqu’à 1koctets. Ne pas oublier de dimensionner la variable lig en conséquence

Seule précaution que j'ai oublié de mentionner, c'est pour le codage : Il faut choisir un fichier bitmap vierge (text2), de longueur supérieure à celle du MP3 que l'on veut stocker, puisque l’entête bitmap d'origine de 256 octets est conservée et qui contient la longueur du bitmap .Sinon le MP3 sera tronqué

Avec Paintshop c'est facile: on dessine un bout de carré blanc dont les dimensions sont telles que la taille du BMP affichée en bas à droite soit de quelques K octets de plus que le MP3 a stocker. On peut mettre autant de picture.box dans la même form que nécessaire, avec les images-MP3.bmp en propriété picture à la conception du code, et décoder le bon au moment on ou on a besoin. Ces picturebox peuvent être insérées en propriété 'visible False' et autoredraw true
Messages postés
373
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013

Astuce intéréssante, mais il existe les ressources dans lesquelles tu peux placer audio, image, video etc...
Pourquoi faire simple ??? Néanmoins pour l'astuce je met 8 d'autant que le code n'est pas compliqué et que ca peut suffir certaines fois.
Juste une chose, pourquoi ouvrir en random plutot qu'en binaire ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.