Extraire images et sons Div Game Studio
Publié : dim. 03/mai/2026 22:15
Extraire images et sons Div Game Studio
PB : 6.40
Os : Windows 11
Ces codes sont destinés à tout ceux qui souhaiterais réutiliser leurs graphismes
réalisé avec Div Game Studio
Les fichiers nécessaires pour tester ce trouve dans l'ISO téléchargeable ici
https://winworldpc.com/product/div-games-studio/1x
Dans les dossiers suivants ce trouvent :
FPG : Fichiers graphiques des jeux.
MAP : Graphismes et bibliothèques.
FNT : Archives des polices.
PCM : Son des jeux.
***********************************************
Ce code permet d'extraire les images.
Un curseur de zoom est disponible pour les petites image.
Chaque image inclue dans le fichier peut être sélectionnée avec le ComboBox.
Un bouton servira à enregistrer toutes les image dans le dossier du fichier au format bmp.
Pour charger un fichier, le bouton est en haut à droite de la fenêtre.
*****************************************************************************
Ce code permet d'extraire les sons.
Un curseur de volume et une ProgressBar est disponible.
Certains paramètres peuvent être avec modifié à l'aide de ComboBox.
Un bouton servira à enregistrer le son dans le dossier du fichier au format wav.
Pour charger un fichier, le bouton est en haut à droite de la fenêtre.
Les valeur par défaut correspondent aux fichiers Pcm
La fréquence d'échantillonnage est fixée à 5400Hz ( valeur estimée ).
La modification manuelle des valeurs est possible.
PB : 6.40
Os : Windows 11
Ces codes sont destinés à tout ceux qui souhaiterais réutiliser leurs graphismes
réalisé avec Div Game Studio
Les fichiers nécessaires pour tester ce trouve dans l'ISO téléchargeable ici
https://winworldpc.com/product/div-games-studio/1x
Dans les dossiers suivants ce trouvent :
FPG : Fichiers graphiques des jeux.
MAP : Graphismes et bibliothèques.
FNT : Archives des polices.
PCM : Son des jeux.
***********************************************
Ce code permet d'extraire les images.
Un curseur de zoom est disponible pour les petites image.
Chaque image inclue dans le fichier peut être sélectionnée avec le ComboBox.
Un bouton servira à enregistrer toutes les image dans le dossier du fichier au format bmp.
Pour charger un fichier, le bouton est en haut à droite de la fenêtre.
Code : Tout sélectionner
;Global Titre$ = "Format Dgs-V20260228"
Global Titre$ = "Format Dgs-V20260503" ; Ajouté Zoom
#FileOpen = 0
#TrackBarZoomInit = 7
#TailleImageMaxi = 32
Structure PointU
x .w
y .w
EndStructure
Structure InfoFpg
IdImage .i
Type .s
Code .l
Longueur .l
Description .s
NomDuFichier .s
Largeur .l
Hauteur .l
GlissementVert .l
PointNb .l
List Point.PointU()
EndStructure
Structure DivRGB
R .a
G .a
B .a
EndStructure
Global Filtre$ = "Images Div|*.fpg;*.map;*.fnt|Fichiers Fpg|*.fpg|Fichiers Map|*.map|Fichiers Fnt|*.fnt|Tous les fichiers|*.*"
Global FilenameOpen$ = GetCurrentDirectory() + ""
Global Filename$ = ""
Global FichierType$ = ""
Global TxtTmp$ = ""
Global *MemoryID = AllocateMemory( 1 , #PB_Memory_NoClear )
Global Dim CouleurPalette.l (255)
Global NewList ListImage .InfoFpg ()
Global .l ValTmp_L
Global Dim TbZoom .f ( 14 )
TbZoom ( 0 ) = 1/8
TbZoom ( 1 ) = 1/7
TbZoom ( 2 ) = 1/6
TbZoom ( 3 ) = 1/5
TbZoom ( 4 ) = 1/4
TbZoom ( 5 ) = 1/3
TbZoom ( 6 ) = 1/2
TbZoom ( 7 ) = 1.00 ; Zoom = 1
TbZoom ( 8 ) = 2.00
TbZoom ( 9 ) = 3.00
TbZoom ( 10 ) = 4.00
TbZoom ( 11 ) = 5.00
TbZoom ( 12 ) = 6.00
TbZoom ( 13 ) = 7.00
TbZoom ( 14 ) = 8.00
Global Dim TbZoomTxt .s ( 14 )
TbZoomTxt ( 0 ) = "1/8"
TbZoomTxt ( 1 ) = "1/7"
TbZoomTxt ( 2 ) = "1/6"
TbZoomTxt ( 3 ) = "1/5"
TbZoomTxt ( 4 ) = "1/4"
TbZoomTxt ( 5 ) = "1/3"
TbZoomTxt ( 6 ) = "1/2"
TbZoomTxt ( 7 ) = "1" ; Zoom = 1
TbZoomTxt ( 8 ) = "2"
TbZoomTxt ( 9 ) = "3"
TbZoomTxt ( 10 ) = "4"
TbZoomTxt ( 11 ) = "5"
TbZoomTxt ( 12 ) = "6"
TbZoomTxt ( 13 ) = "7"
TbZoomTxt ( 14 ) = "8"
; *****************
; Form Designer for PureBasic - 6.40
;{
Global Win_0
Global Text_Fichier, String_Fichier, Button_Fichier, Frame_ImageBmp, ScrollArea_ImageBmp, ImageGadget_Bmp, Button_Quitter, Text_Code, String_Code16, String_Code10, Text_Longueur, String_Longueur16, String_Longueur10, Text_Description, String_Description, Text_NomDuFichier, String_NomDuFichier, Text_Largeur, String_Largeur16, String_Largeur10, Text_Hauteur, String_Hauteur16, String_Hauteur10, Text_GlissementVert, String_GlissementVert16, String_GlissementVert10, Text_PointNb, String_PointNb16, String_PointNb10, Text_Type, String_Type, Combo_Image, Button_Extraire, Editor_CaracteresInclus, TrackBar_Zoom, Text_ValeurZoom
Declare ObjComboImageOnClik(EventType)
Declare ObjButtonQuitterOnClik(EventType)
Declare ObjButtonExtraireOnClik(EventType)
Declare ObjTrackBarZoomEvent(EventType)
Declare BoutonFichierOnClick(EventType)
Procedure OpenWin_0(x = 0, y = 0, width = 760, height = 490)
Win_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Text_Fichier = TextGadget(#PB_Any, 10, 10, 50, 25, "Fichier")
String_Fichier = StringGadget(#PB_Any, 60, 10, 650, 25, "")
Button_Fichier = ButtonGadget(#PB_Any, 720, 10, 30, 25, ". . .")
Frame_ImageBmp = FrameGadget(#PB_Any, 300, 50, 400, 400, "Image.", #PB_Frame_Container)
ScrollArea_ImageBmp = ScrollAreaGadget(#PB_Any, 0, 0, 400, 400, 640, 400, 1, #PB_ScrollArea_Flat | #PB_ScrollArea_Center)
ImageGadget_Bmp = ImageGadget(#PB_Any, 0, 0, 100, 100, 0)
CloseGadgetList()
CloseGadgetList()
Button_Quitter = ButtonGadget(#PB_Any, 560, 460, 140, 20, "Quitter")
Text_Code = TextGadget(#PB_Any, 10, 70, 100, 20, "Code du graph")
String_Code16 = StringGadget(#PB_Any, 110, 70, 90, 20, "", #PB_String_ReadOnly | #PB_String_UpperCase)
String_Code10 = StringGadget(#PB_Any, 200, 70, 90, 20, "", #PB_String_Numeric | #PB_String_ReadOnly)
Text_Longueur = TextGadget(#PB_Any, 10, 90, 100, 20, "Longueur")
String_Longueur16 = StringGadget(#PB_Any, 110, 90, 90, 20, "", #PB_String_ReadOnly | #PB_String_UpperCase)
String_Longueur10 = StringGadget(#PB_Any, 200, 90, 90, 20, "", #PB_String_Numeric | #PB_String_ReadOnly)
Text_Description = TextGadget(#PB_Any, 10, 110, 100, 20, "Description")
String_Description = StringGadget(#PB_Any, 110, 110, 180, 20, "", #PB_String_ReadOnly)
Text_NomDuFichier = TextGadget(#PB_Any, 10, 130, 100, 20, "Nom du fichier")
String_NomDuFichier = StringGadget(#PB_Any, 110, 130, 180, 20, "", #PB_String_ReadOnly)
Text_Largeur = TextGadget(#PB_Any, 10, 150, 100, 20, "Largeur")
String_Largeur16 = StringGadget(#PB_Any, 110, 150, 90, 20, "", #PB_String_ReadOnly | #PB_String_UpperCase)
String_Largeur10 = StringGadget(#PB_Any, 200, 150, 90, 20, "", #PB_String_Numeric | #PB_String_ReadOnly)
Text_Hauteur = TextGadget(#PB_Any, 10, 170, 100, 20, "Hauteur")
String_Hauteur16 = StringGadget(#PB_Any, 110, 170, 90, 20, "", #PB_String_ReadOnly | #PB_String_UpperCase)
String_Hauteur10 = StringGadget(#PB_Any, 200, 170, 90, 20, "", #PB_String_Numeric | #PB_String_ReadOnly)
Text_GlissementVert = TextGadget(#PB_Any, 10, 190, 100, 20, "Glissement V.")
String_GlissementVert16 = StringGadget(#PB_Any, 110, 190, 90, 20, "", #PB_String_ReadOnly | #PB_String_UpperCase)
String_GlissementVert10 = StringGadget(#PB_Any, 200, 190, 90, 20, "", #PB_String_Numeric | #PB_String_ReadOnly)
Text_PointNb = TextGadget(#PB_Any, 10, 210, 100, 20, "PointNb")
String_PointNb16 = StringGadget(#PB_Any, 110, 210, 90, 20, "", #PB_String_ReadOnly | #PB_String_UpperCase)
String_PointNb10 = StringGadget(#PB_Any, 200, 210, 90, 20, "", #PB_String_Numeric | #PB_String_ReadOnly)
Text_Type = TextGadget(#PB_Any, 10, 50, 100, 20, "Type")
String_Type = StringGadget(#PB_Any, 110, 50, 90, 20, "", #PB_String_ReadOnly)
Combo_Image = ComboBoxGadget(#PB_Any, 10, 350, 280, 25)
Button_Extraire = ButtonGadget(#PB_Any, 300, 460, 140, 20, "Extraire toutes les images")
Editor_CaracteresInclus = EditorGadget(#PB_Any, 10, 240, 280, 100, #PB_Editor_ReadOnly)
TrackBar_Zoom = TrackBarGadget(#PB_Any, 720, 50, 20, 400, 0, 14, #PB_TrackBar_Ticks | #PB_TrackBar_Vertical)
DisableGadget(TrackBar_Zoom, 1)
Text_ValeurZoom = TextGadget(#PB_Any, 710, 460, 40, 20, "", #PB_Text_Center | #PB_Text_Border)
EndProcedure
Procedure Win_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
;CaseEnd
Case #PB_Event_Gadget
Select EventGadget()
Case Button_Fichier
BoutonFichierOnClick(EventType())
;CaseEnd
Case Button_Quitter
ObjButtonQuitterOnClik(EventType())
;CaseEnd
Case Combo_Image
ObjComboImageOnClik(EventType())
;CaseEnd
Case Button_Extraire
ObjButtonExtraireOnClik(EventType())
;CaseEnd
Case TrackBar_Zoom
ObjTrackBarZoomEvent(EventType())
;CaseEnd
EndSelect
;CaseEnd
EndSelect
ProcedureReturn #True
EndProcedure
;} *****************
OpenWin_0 ( )
SetWindowTitle ( Win_0 , Titre$ )
SetGadgetState ( TrackBar_Zoom , #TrackBarZoomInit )
SetGadgetText ( Text_ValeurZoom , TbZoomTxt ( GetGadgetState( TrackBar_Zoom ) ) )
Procedure ClearGadget ( )
SetGadgetText ( String_Code16 , "" )
SetGadgetText ( String_Code10 , "" )
SetGadgetText ( String_Longueur16 , "" )
SetGadgetText ( String_Longueur10 , "" )
SetGadgetText ( String_Description , "" )
SetGadgetText ( String_Largeur16 , "" )
SetGadgetText ( String_Largeur10 , "" )
SetGadgetText ( String_Hauteur16 , "" )
SetGadgetText ( String_Hauteur10 , "" )
SetGadgetText ( String_GlissementVert16 , "" )
SetGadgetText ( String_GlissementVert10 , "" )
SetGadgetText ( String_PointNb16 , "" )
SetGadgetText ( String_PointNb10 , "" )
ClearGadgetItems ( Editor_CaracteresInclus )
EndProcedure
Procedure AfficheEnteteFichier ( *Adr )
FichierType$ = PeekS( *Adr , 3 , #PB_Ascii )
SetGadgetText ( String_Type , FichierType$ )
EndProcedure
Procedure ChargePaletteCouleur ( *Adr )
Protected *Adresse.DivRGB = *Adr
For n = 0 To 255
CouleurPalette (n) = RGB( *Adresse\R << 2, *Adresse\G << 2 , *Adresse\B << 2 )
*Adresse + 3
Next
EndProcedure
Procedure .i ChargeImageBmp ( *Adr )
Protected .i MonImageTmp
Protected .a Pen
Protected .i Pos = 0
MonImageTmp = CreateImage( #PB_Any , ListImage()\Largeur , ListImage()\Hauteur )
StartDrawing( ImageOutput( MonImageTmp ) )
For y.u = 0 To ListImage()\Hauteur - 1
For x.u = 0 To ListImage()\Largeur - 1
Pen = PeekA( *Adr + Pos )
Plot( X , Y , CouleurPalette( Pen ) )
Pos + 1
Next
Next
StopDrawing()
ProcedureReturn MonImageTmp
EndProcedure
Procedure AfficheInfoFichierFpg ( )
Protected .a Compt = 0
SetGadgetText ( String_Code16 , "$" + RSet( Hex( ListImage()\Code ) , 8 , "0" ) )
SetGadgetText ( String_Code10 , Str( ListImage()\Code ) )
SetGadgetText ( String_Longueur16 , "$" + RSet( Hex( ListImage()\Longueur ) , 8 , "0" ) )
SetGadgetText ( String_Longueur10 , Str( ListImage()\Longueur ) )
SetGadgetText ( String_Description , ListImage()\Description )
SetGadgetText ( String_NomDuFichier , ListImage()\NomDuFichier )
SetGadgetText ( String_Largeur16 , "$" + RSet( Hex( ListImage()\Largeur ) , 8 , "0" ) )
SetGadgetText ( String_Largeur10 , Str( ListImage()\Largeur ) )
SetGadgetText ( String_Hauteur16 , "$" + RSet( Hex( ListImage()\Hauteur ) , 8 , "0" ) )
SetGadgetText ( String_Hauteur10 , Str( ListImage()\Hauteur ) )
SetGadgetText ( String_PointNb16 , "$" + RSet( Hex( ListImage()\PointNb ) , 8 , "0" ) )
SetGadgetText ( String_PointNb10 , Str( ListImage()\PointNb ) )
SetGadgetText ( String_GlissementVert16 , "$" + RSet( Hex( ListImage()\GlissementVert ) , 8 , "0" ) )
SetGadgetText ( String_GlissementVert10 , Str( ListImage()\GlissementVert ) )
If ListImage()\PointNb > 0
ForEach ListImage()\Point()
Compt + 1
TxtTmp$ = "Point N°" + Str( Compt ) + " x=" + Str( ListImage()\Point()\x ) + " ; y=" + Str( ListImage()\Point()\y )
AddGadgetItem( Editor_CaracteresInclus , -1 , TxtTmp$ )
Next
EndIf
EndProcedure
Procedure AfficheImage ( _TrackBar_Zoom.a = 1.0 )
Protected .i ImageTmp
Protected .f Largeur , Hauteur , Zoom
Protected .s ZoomTxt
If _TrackBar_Zoom < #TrackBarZoomInit
If ListImage()\Largeur > #TailleImageMaxi And ListImage()\Hauteur > #TailleImageMaxi
Zoom = TbZoom ( _TrackBar_Zoom )
ZoomTxt = TbZoomTxt ( _TrackBar_Zoom )
Else
Zoom = TbZoom ( #TrackBarZoomInit )
ZoomTxt = TbZoomTxt ( #TrackBarZoomInit )
EndIf
Else
Zoom = TbZoom ( _TrackBar_Zoom )
ZoomTxt = TbZoomTxt ( _TrackBar_Zoom )
EndIf
SetGadgetText( Text_ValeurZoom , ZoomTxt )
Largeur = ListImage()\Largeur * Zoom
Hauteur = ListImage()\Hauteur * Zoom
If ImageTmp : FreeImage( ImageTmp ) : EndIf
ImageTmp = CreateImage ( #PB_Any , Largeur , Hauteur )
ResizeGadget ( ImageGadget_Bmp , #PB_Ignore , #PB_Ignore , Largeur , Hauteur )
SetGadgetAttribute ( ScrollArea_ImageBmp , #PB_ScrollArea_InnerWidth , Largeur )
SetGadgetAttribute ( ScrollArea_ImageBmp , #PB_ScrollArea_InnerHeight , Hauteur )
If StartVectorDrawing ( ImageVectorOutput( ImageTmp , #PB_Unit_Pixel ) )
ResetCoordinates ( #PB_Coordinate_User )
ScaleCoordinates ( Zoom , Zoom , #PB_Coordinate_User )
MovePathCursor ( 0 , 0 )
DrawVectorImage ( ImageID( ListImage()\IdImage ) , 255 )
StopVectorDrawing ( )
SetGadgetState ( ImageGadget_Bmp , ImageID( ImageTmp ) )
EndIf
EndProcedure
; *****************
; Les procédures d'événements
Procedure BoutonFichierOnClick (EventType)
Protected .i length
Protected .i MemoryIndex , MemoryOffset
Protected .l TmpLarge , TmpHaut
FilenameOpen$ = OpenFileRequester("Ouvrir ...", FilenameOpen$, Filtre$, 0 )
If FilenameOpen$
Filename$ = GetFilePart( FilenameOpen$ )
SetGadgetText ( String_Fichier , Filename$ )
If OpenFile( #FileOpen , FilenameOpen$ )
length = Lof( #FileOpen )
*MemoryID = ReAllocateMemory( *MemoryID , length , #PB_Memory_NoClear )
If *MemoryID
ReadData( #FileOpen , *MemoryID , length)
EndIf
CloseFile( #FileOpen )
EndIf
ClearGadget ( )
ForEach ListImage()
FreeList ( ListImage()\Point() )
FreeImage ( ListImage()\IdImage )
Next
ClearList ( ListImage ( ) )
ClearGadgetItems ( Combo_Image )
MemoryIndex = 0
AfficheEnteteFichier ( *MemoryID )
Select UCase( FichierType$ )
Case "FPG"
ChargePaletteCouleur ( *MemoryID + 8 )
MemoryIndex = 1352 ; $0548
While MemoryIndex < length
MemoryOffset = 0
AddElement( ListImage() )
ListImage()\Code = PeekL( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 4
ListImage()\Longueur = PeekL( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 4
ListImage()\Description = PeekS( *MemoryID + MemoryIndex + MemoryOffset , 32 , #PB_Ascii ) : MemoryOffset + 32
ListImage()\NomDuFichier = PeekS( *MemoryID + MemoryIndex + MemoryOffset , 12 , #PB_Ascii ) : MemoryOffset + 12
ListImage()\Largeur = PeekL( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 4
ListImage()\Hauteur = PeekL( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 4
ListImage()\PointNb = PeekL( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 4
If ListImage()\PointNb > 0
For i.a = 1 To ListImage()\PointNb
AddElement( ListImage()\Point() )
ListImage()\Point()\x = PeekW( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 2
ListImage()\Point()\y = PeekW( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 2
Next
EndIf
ListImage()\IdImage = ChargeImageBmp ( *MemoryID + MemoryIndex + MemoryOffset ) :
TxtTmp$ = RSet( Str( ListImage()\Code ) , 3 , "0" ) + "-" + ListImage()\NomDuFichier + " : " + ListImage()\Description
AddGadgetItem( Combo_Image , -1 , TxtTmp$ )
MemoryIndex + ListImage()\Longueur
Wend
SetGadgetState ( Combo_Image , 0 )
SelectElement ( ListImage() , GetGadgetState( Combo_Image ) )
AfficheInfoFichierFpg ( )
AfficheImage ( GetGadgetState( TrackBar_Zoom ) )
;CaseEnd
Case "MAP"
MemoryIndex = 8
AddElement( ListImage() )
ListImage()\Largeur = PeekU( *MemoryID + MemoryIndex ) : MemoryIndex + 2
ListImage()\Hauteur = PeekU( *MemoryID + MemoryIndex ) : MemoryIndex + 2
ListImage()\Code = PeekL( *MemoryID + MemoryIndex ) : MemoryIndex + 4
ListImage()\Description = PeekS( *MemoryID + MemoryIndex , 32 , #PB_Ascii ) : MemoryIndex + 32
ChargePaletteCouleur ( *MemoryID + MemoryIndex ) : MemoryIndex = 1392
ListImage()\PointNb = PeekU( *MemoryID + MemoryIndex )
If ListImage()\PointNb > 0
For i.a = 1 To ListImage()\PointNb
AddElement( ListImage()\Point() )
ListImage()\Point()\x = PeekW( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 2
ListImage()\Point()\y = PeekW( *MemoryID + MemoryIndex + MemoryOffset ) : MemoryOffset + 2
Next
EndIf
ListImage()\IdImage = ChargeImageBmp ( *MemoryID + MemoryIndex )
TxtTmp$ = RSet( Str( ListImage()\Code ) , 3 , "0" ) + "-" + ListImage()\NomDuFichier + " : " + ListImage()\Description
AddGadgetItem( Combo_Image , -1 , TxtTmp$ )
SetGadgetState ( Combo_Image , 0 )
SelectElement ( ListImage() , GetGadgetState( Combo_Image ) )
AfficheInfoFichierFpg ( )
AfficheImage ( GetGadgetState( TrackBar_Zoom ) )
;CaseEnd
Case "FNT"
ChargePaletteCouleur ( *MemoryID + 8 )
MemoryIndex = 1352
ValTmp_L = PeekI( *MemoryID + MemoryIndex ) : MemoryIndex + 4
If ValTmp_L & 01 : AddGadgetItem( Editor_CaracteresInclus , -1 , "X - Nombres" )
Else : AddGadgetItem( Editor_CaracteresInclus , -1 , "0 - Nombres" )
EndIf
If ValTmp_L & 02 : AddGadgetItem( Editor_CaracteresInclus , -1 , "X - Majuscules" )
Else : AddGadgetItem( Editor_CaracteresInclus , -1 , "0 - Majuscules" )
EndIf
If ValTmp_L & 04 : AddGadgetItem( Editor_CaracteresInclus , -1 , "X - Minuscules" )
Else : AddGadgetItem( Editor_CaracteresInclus , -1 , "0 - Minuscules" )
EndIf
If ValTmp_L & 08 : AddGadgetItem( Editor_CaracteresInclus , -1 , "X - Symboles" )
Else : AddGadgetItem( Editor_CaracteresInclus , -1 , "0 - Symboles" )
EndIf
If ValTmp_L & 16 : AddGadgetItem( Editor_CaracteresInclus , -1 , "X - Etendus" )
Else : AddGadgetItem( Editor_CaracteresInclus , -1 , "0 - Etendus" )
EndIf
For ValTmp_L = 0 To 255
TmpLarge = PeekL( *MemoryID + MemoryIndex )
TmpHaut = PeekL( *MemoryID + MemoryIndex + 4 )
MemoryOffset = PeekL( *MemoryID + MemoryIndex + 12 )
If MemoryOffset > 0 And ( TmpLarge * TmpHaut > 0 )
AddElement( ListImage() )
ListImage()\Largeur = PeekL( *MemoryID + MemoryIndex ) : MemoryIndex + 4
ListImage()\Hauteur = PeekL( *MemoryID + MemoryIndex ) : MemoryIndex + 4
ListImage()\GlissementVert = PeekL( *MemoryID + MemoryIndex ) : MemoryIndex + 4
MemoryOffset = PeekL( *MemoryID + MemoryIndex ) : MemoryIndex + 4
ListImage()\Code = ValTmp_L
ListImage()\IdImage = ChargeImageBmp ( *MemoryID + MemoryOffset )
TxtTmp$ = "Car N° " + RSet( Str( ListImage()\Code ) , 3 , "0" )
AddGadgetItem( Combo_Image , -1 , TxtTmp$ )
Else
MemoryIndex + 16
EndIf
Next
SetGadgetState ( Combo_Image , 0 )
SelectElement ( ListImage() , GetGadgetState( Combo_Image ) )
AfficheInfoFichierFpg ( )
AfficheImage ( GetGadgetState( TrackBar_Zoom ) )
;CaseEnd
EndSelect
If ListSize( ListImage() )
DisableGadget( TrackBar_Zoom , 0 )
Else
DisableGadget( TrackBar_Zoom , 1 )
EndIf
EndIf
EndProcedure
Procedure ObjButtonQuitterOnClik(EventType)
End
EndProcedure
Procedure ObjButtonExtraireOnClik(EventType)
Filename$ = GetFilePart( FilenameOpen$ , #PB_FileSystem_NoExtension )
ForEach ListImage()
TxtTmp$ = Filename$ + "-" + RSet( Str( ListImage()\Code ) , 3 , "0" ) + "-" + ListImage()\NomDuFichier + "-" + ListImage()\Description + ".bmp"
SaveImage( ListImage()\IdImage , TxtTmp$ , #PB_ImagePlugin_BMP )
Next
MessageRequester( "Information !" , "L'extraction est terminé." , #PB_MessageRequester_Info )
EndProcedure
Procedure ObjComboImageOnClik(EventType)
If EventType = #PB_EventType_Change
ClearGadget ( )
SelectElement ( ListImage() , GetGadgetState( Combo_Image ) )
AfficheInfoFichierFpg ( )
AfficheImage ( GetGadgetState( TrackBar_Zoom ) )
EndIf
EndProcedure
Procedure ObjTrackBarZoomEvent(EventType)
AfficheImage ( GetGadgetState( TrackBar_Zoom ) )
EndProcedure
; *****************
; La boucle principale
Repeat
Evenement = WaitWindowEvent()
Select EventWindow()
Case Win_0
Win_0_Events(Evenement)
;CaseEnd
EndSelect
Until Evenement = #PB_Event_CloseWindow
*****************************************************************************
Ce code permet d'extraire les sons.
Un curseur de volume et une ProgressBar est disponible.
Certains paramètres peuvent être avec modifié à l'aide de ComboBox.
Un bouton servira à enregistrer le son dans le dossier du fichier au format wav.
Pour charger un fichier, le bouton est en haut à droite de la fenêtre.
Les valeur par défaut correspondent aux fichiers Pcm
La fréquence d'échantillonnage est fixée à 5400Hz ( valeur estimée ).
La modification manuelle des valeurs est possible.
Code : Tout sélectionner
;Global Titre .s = "Format Pcm-V20260426"
;Global Titre .s = "Format Pcm-V20260427" ; SetCurrentDirectory
;Global Titre .s = "Format Pcm-V20260427a" ; TrackBar volume + ProgresseBar + CheckBox Boucle
Global Titre .s = "Format Pcm-V20260430" ; ProgresseBar à 100% en fin de lecture
Structure Wave
RiffChunkId .a[4] ; "RIFF"
RiffSize .l ; xxxx : Taille du fichier ( calculé )
RiffSubType .a[4] ; "WAVE"
Fmt_ChunkId .a[4] ; "fmt "
Fmt_ChunkSize .l ; 16 : Taille du bloc fmt
wFormatTag .u ; 1 : Type de compression :1 = PCM
NbChannels .u ; xx : Nombre de voies ( Combo )
NbSamplesPerSec .l; xxxx : Fréquence d'échantillonnage ( Combo )
NbAvgBytesPerSec .l ; xxxx : Nombre d’octets par seconde ( calculé )
NbBlockAlign .u ; xx : Nombre d’octets par échantillon ( calculé )
wBitsPerSample .u ; xx : Nombre de bits par échantillon ( Combo )
DataChunkId .a[4] ; "data"
DataChunkSize .l ; xxxx : Taille du fichier ( calculé )
DataSnd .a[0] ; Données audio
EndStructure
Global FilenameOpen .s = GetCurrentDirectory() ; 20260427
Global FilenameSave .s = ""
Global FontConsolas .i
Global *MemoryWave.Wave = AllocateMemory( 44 , #PB_Memory_NoClear )
Global TestAudio .i
Declare CalculeDatas ( )
Declare AfficheDatas ( )
Enumeration Fichier
#FileOpen
#FileSave
EndEnumeration
; *****************
;{ Code créé avec IceDesign
EnableExplicit
;- Global
Global Win0
Global Win0_Btn_Fichier, Win0_Btn_Play, Win0_Btn_Quitter, Win0_Btn_SauveAudio, Win0_Btn_Stop
Global Win0_CheckBox_Boucle, Win0_Combo_NbChannels, Win0_Combo_NbSamplesPerSec, Win0_Combo_wBitsPerSample, Win0_ProgressBar_Snd
Global Win0_Text_Fichier, Win0_Text_SubChunkId, Win0_Text_SubChunkSize, Win0_Text_Vol, Win0_TrackBar_Volume
Global Win0_Txt_1, Win0_Txt_10, Win0_Txt_11, Win0_Txt_12, Win0_Txt_2
Global Win0_Txt_3, Win0_Txt_4, Win0_Txt_5, Win0_Txt_6, Win0_Txt_7
Global Win0_Txt_8, Win0_Txt_9, Win0_Txt_NbAvgBytesPerSec, Win0_Txt_NbAvgBytesPerSecVal, Win0_Txt_NbBlockAlign
Global Win0_Txt_NbBlockAlignVal, Win0_Txt_NbChannels, Win0_Txt_NbSamplesPerSec, Win0_Txt_RiffChunkId, Win0_Txt_RiffChunkIdVal
Global Win0_Txt_RiffSize, Win0_Txt_RiffSizeVal, Win0_Txt_RiffSubType, Win0_Txt_RiffSubTypeVal, Win0_Txt_SubChunkIdVal
Global Win0_Txt_SubChunkSizeVal, Win0_Txt_WavSize, Win0_Txt_WavSizeVal, Win0_Txt_wBitsPerSample, Win0_Txt_wFormatTag
Global Win0_Txt_wFormatTagVal
Global Win0_Quit
;- Declare
Declare Open_Win0(X = 0, Y = 0, Width = 470, Height = 300)
Declare Event_Win0_Btn_Fichier()
Declare Event_Win0_Btn_Play()
Declare Event_Win0_Btn_Stop()
Declare Event_Win0_TrackBar_Volume()
Declare Event_Win0_Btn_SauveAudio()
Declare Event_Win0_Combo_NbChannels()
Declare Event_Win0_Combo_NbSamplesPerSec()
Declare Event_Win0_Combo_wBitsPerSample()
Declare Event_Win0_Btn_Quitter()
Declare Event_Close_Win0()
Procedure Event_Win0_Btn_Fichier()
Protected length.i
FilenameOpen = OpenFileRequester("Ouvrir ...", FilenameOpen , "Audio|*.pcm|Tous les fichiers|*.*", 0)
If FilenameOpen
SetCurrentDirectory( GetPathPart ( FilenameOpen ) )
FilenameSave = GetPathPart ( FilenameOpen ) + GetFilePart( FilenameOpen , #PB_FileSystem_NoExtension ) + ".wav"
SetGadgetText ( Win0_Text_Fichier , GetFilePart(FilenameOpen) )
DisableGadget ( Win0_Btn_SauveAudio , #False )
If OpenFile( #FileOpen, FilenameOpen )
length = Lof( #FileOpen )
*MemoryWave.Wave = ReAllocateMemory( *MemoryWave , 44 + length , #PB_Memory_NoClear )
If *MemoryWave
ReadData( #FileOpen , *MemoryWave , length)
MoveMemory( *MemoryWave , *MemoryWave + 44 , length )
EndIf
CloseFile( #FileOpen )
EndIf
PokeS( *MemoryWave + 0 , "RIFF", 4 , #PB_Ascii | #PB_String_NoZero )
PokeS( *MemoryWave + 8 , "WAVE", 4 , #PB_Ascii | #PB_String_NoZero )
PokeS( *MemoryWave + 12 , "fmt ", 4 , #PB_Ascii | #PB_String_NoZero )
PokeS( *MemoryWave + 36 , "data", 4 , #PB_Ascii | #PB_String_NoZero )
*MemoryWave\Fmt_ChunkSize = 16
*MemoryWave\wFormatTag = 1
*MemoryWave\DataChunkSize = length
*MemoryWave\RiffSize = length + 36
CalculeDatas( )
AfficheDatas( )
DisableGadget ( Win0_Btn_SauveAudio , #False )
DisableGadget ( Win0_Btn_Play , #False )
DisableGadget ( Win0_Btn_Stop , #False )
Else
DisableGadget ( Win0_Btn_SauveAudio , #True )
DisableGadget ( Win0_Btn_Play , #True )
DisableGadget ( Win0_Btn_Stop , #True )
SetGadgetText ( Win0_Text_Fichier , "" )
EndIf
EndProcedure
Procedure Event_Win0_Btn_Play()
If TestAudio : FreeSound( TestAudio ) : EndIf
TestAudio = CatchSound( #PB_Any , *MemoryWave )
SetGadgetAttribute( Win0_ProgressBar_Snd , #PB_ProgressBar_Minimum , 0 ) ; 20260427
SetGadgetAttribute( Win0_ProgressBar_Snd , #PB_ProgressBar_Maximum , SoundLength( TestAudio ) )
If GetGadgetState( Win0_CheckBox_Boucle ) = #PB_Checkbox_Checked ; 20260427
PlaySound( TestAudio , #PB_Sound_Loop , GetGadgetState( Win0_TrackBar_Volume ) )
Else
PlaySound( TestAudio , 0 , GetGadgetState( Win0_TrackBar_Volume ) )
EndIf
EndProcedure
Procedure Event_Win0_Btn_Stop()
If TestAudio
StopSound ( TestAudio )
SetGadgetState ( Win0_ProgressBar_Snd , 0 ) ; 20260427
EndIf
EndProcedure
Procedure Event_Win0_TrackBar_Volume()
If TestAudio : SoundVolume( TestAudio , GetGadgetState( Win0_TrackBar_Volume ) ) : EndIf ; 20260427
EndProcedure
Procedure Event_Win0_Btn_SauveAudio()
If CreateFile( #FileSave , FilenameSave )
WriteData( #FileSave , *MemoryWave , MemorySize( *MemoryWave ) )
CloseFile( #FileSave )
MessageRequester( "Information !" , "L'extraction est terminé." , #PB_MessageRequester_Info )
EndIf
EndProcedure
Procedure Event_Win0_Combo_NbChannels()
Select EventType()
Case #PB_EventType_Change
CalculeDatas( )
AfficheDatas( )
;CaseEnd
EndSelect
EndProcedure
Procedure Event_Win0_Combo_NbSamplesPerSec()
Select EventType()
Case #PB_EventType_Change
CalculeDatas( )
AfficheDatas( )
;CaseEnd
EndSelect
EndProcedure
Procedure Event_Win0_Combo_wBitsPerSample()
Select EventType()
Case #PB_EventType_Change
CalculeDatas( )
AfficheDatas( )
;CaseEnd
EndSelect
EndProcedure
Procedure Event_Win0_Btn_Quitter()
FreeMemory( *MemoryWave )
End
EndProcedure
Procedure Event_Close_Win0()
Win0_Quit = #True
EndProcedure
Macro SetTabOrder(Gadget)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows : SetWindowPos_(GadgetID(Gadget), #HWND_BOTTOM, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE) : CompilerEndIf
EndMacro
Procedure Open_Win0(X = 0, Y = 0, Width = 470, Height = 300)
Win0 = OpenWindow(#PB_Any, X, Y, Width, Height, "Title", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
If Win0
Win0_Text_Fichier = TextGadget(#PB_Any, 10, 10, 340, 20, "Fichier", #PB_Text_Border)
Win0_Btn_Fichier = ButtonGadget(#PB_Any, 440, 10, 20, 20, ". . .")
Win0_Txt_RiffChunkId = TextGadget(#PB_Any, 10, 40, 130, 20, "Riff Chunk Id")
Win0_Txt_1 = TextGadget(#PB_Any, 140, 40, 20, 20, ":", #PB_Text_Center)
Win0_Txt_RiffChunkIdVal = TextGadget(#PB_Any, 160, 40, 70, 20, "RIFF ", #PB_Text_Right)
Win0_Btn_Play = ButtonGadget(#PB_Any, 240, 40, 90, 30, "Play")
Win0_Btn_Stop = ButtonGadget(#PB_Any, 340, 40, 90, 30, "Stop")
Win0_TrackBar_Volume = TrackBarGadget(#PB_Any, 440, 40, 20, 230, 0, 100, #PB_TrackBar_Vertical)
Win0_Txt_RiffSize = TextGadget(#PB_Any, 10, 60, 130, 20, "Riff Size")
Win0_Txt_2 = TextGadget(#PB_Any, 140, 60, 20, 20, ":", #PB_Text_Center)
Win0_Txt_RiffSizeVal = TextGadget(#PB_Any, 160, 60, 70, 20, "11936 ", #PB_Text_Right)
Win0_Txt_RiffSubType = TextGadget(#PB_Any, 10, 80, 130, 20, "Riff Sub Type")
Win0_Txt_3 = TextGadget(#PB_Any, 140, 80, 20, 20, ":", #PB_Text_Center)
Win0_Txt_RiffSubTypeVal = TextGadget(#PB_Any, 160, 80, 70, 20, "WAVE ", #PB_Text_Right)
Win0_CheckBox_Boucle = CheckBoxGadget(#PB_Any, 240, 80, 190, 20, "Jouer en boucle", #PB_CheckBox_Center)
Win0_Text_SubChunkId = TextGadget(#PB_Any, 10, 110, 130, 20, "Sub Chunk Id")
Win0_Txt_4 = TextGadget(#PB_Any, 140, 110, 20, 20, ":", #PB_Text_Center)
Win0_Txt_SubChunkIdVal = TextGadget(#PB_Any, 160, 110, 70, 20, "fmt ", #PB_Text_Right)
Win0_ProgressBar_Snd = ProgressBarGadget(#PB_Any, 240, 120, 190, 10, 0, 100 ) ; #PB_ProgressBar_Smooth)
Win0_Text_SubChunkSize = TextGadget(#PB_Any, 10, 130, 130, 20, "Sub Chunk Size")
Win0_Txt_5 = TextGadget(#PB_Any, 140, 130, 20, 20, ":", #PB_Text_Center)
Win0_Txt_SubChunkSizeVal = TextGadget(#PB_Any, 160, 130, 70, 20, "16 ", #PB_Text_Right)
Win0_Txt_wFormatTag = TextGadget(#PB_Any, 10, 150, 130, 20, "wFormatTag")
Win0_Txt_6 = TextGadget(#PB_Any, 140, 150, 20, 20, ":", #PB_Text_Center)
Win0_Txt_wFormatTagVal = TextGadget(#PB_Any, 160, 150, 70, 20, "1(PCM) ", #PB_Text_Right)
Win0_Btn_SauveAudio = ButtonGadget(#PB_Any, 240, 150, 190, 50, "Enregistrer format Wav", #PB_Button_MultiLine)
Win0_Txt_NbChannels = TextGadget(#PB_Any, 10, 170, 130, 20, "Nb Channels")
Win0_Txt_7 = TextGadget(#PB_Any, 140, 170, 20, 20, ":", #PB_Text_Center)
Win0_Combo_NbChannels = ComboBoxGadget(#PB_Any, 160, 170, 70, 20, #PB_ComboBox_Editable)
Win0_Txt_NbSamplesPerSec = TextGadget(#PB_Any, 10, 190, 130, 20, "Nb Samples Per Sec")
Win0_Txt_8 = TextGadget(#PB_Any, 140, 190, 20, 20, ":", #PB_Text_Center)
Win0_Combo_NbSamplesPerSec = ComboBoxGadget(#PB_Any, 160, 190, 70, 20, #PB_ComboBox_Editable)
Win0_Txt_NbAvgBytesPerSec = TextGadget(#PB_Any, 10, 210, 130, 20, "Nb Avg Bytes Per Sec")
Win0_Txt_9 = TextGadget(#PB_Any, 140, 210, 20, 20, ":", #PB_Text_Center)
Win0_Txt_NbAvgBytesPerSecVal = TextGadget(#PB_Any, 160, 210, 70, 20, "88200 ", #PB_Text_Right)
Win0_Txt_NbBlockAlign = TextGadget(#PB_Any, 10, 230, 130, 20, "Nb Block Align")
Win0_Txt_10 = TextGadget(#PB_Any, 140, 230, 20, 20, ":", #PB_Text_Center)
Win0_Txt_NbBlockAlignVal = TextGadget(#PB_Any, 160, 230, 70, 20, "4 ", #PB_Text_Right)
Win0_Txt_wBitsPerSample = TextGadget(#PB_Any, 10, 250, 130, 20, "wBits Per Sample")
Win0_Txt_11 = TextGadget(#PB_Any, 140, 250, 20, 20, ":", #PB_Text_Center)
Win0_Combo_wBitsPerSample = ComboBoxGadget(#PB_Any, 160, 250, 70, 20, #PB_ComboBox_Editable)
Win0_Btn_Quitter = ButtonGadget(#PB_Any, 240, 260, 190, 30, "Quitter")
Win0_Txt_WavSize = TextGadget(#PB_Any, 10, 270, 130, 20, "Wav Size")
Win0_Txt_12 = TextGadget(#PB_Any, 140, 270, 20, 20, ":", #PB_Text_Center)
Win0_Txt_WavSizeVal = TextGadget(#PB_Any, 160, 270, 70, 20, "-1 ", #PB_Text_Right)
Win0_Text_Vol = TextGadget(#PB_Any, 430, 270, 40, 20, "VOL", #PB_Text_Center)
SetTabOrder(Win0_Combo_NbChannels) : SetTabOrder(Win0_Combo_NbSamplesPerSec) : SetTabOrder(Win0_Combo_wBitsPerSample) : SetTabOrder(Win0_Btn_Play) : SetTabOrder(Win0_Btn_Stop)
SetTabOrder(Win0_CheckBox_Boucle) : SetTabOrder(Win0_TrackBar_Volume) : SetTabOrder(Win0_Btn_SauveAudio) : SetTabOrder(Win0_Btn_Quitter)
BindGadgetEvent(Win0_Btn_Fichier, @Event_Win0_Btn_Fichier())
BindGadgetEvent(Win0_Btn_Play, @Event_Win0_Btn_Play())
BindGadgetEvent(Win0_Btn_Stop, @Event_Win0_Btn_Stop())
BindGadgetEvent(Win0_TrackBar_Volume, @Event_Win0_TrackBar_Volume())
BindGadgetEvent(Win0_Btn_SauveAudio, @Event_Win0_Btn_SauveAudio())
BindGadgetEvent(Win0_Combo_NbChannels, @Event_Win0_Combo_NbChannels())
BindGadgetEvent(Win0_Combo_NbSamplesPerSec, @Event_Win0_Combo_NbSamplesPerSec())
BindGadgetEvent(Win0_Combo_wBitsPerSample, @Event_Win0_Combo_wBitsPerSample())
BindGadgetEvent(Win0_Btn_Quitter, @Event_Win0_Btn_Quitter())
PostEvent(#PB_Event_SizeWindow, Win0, 0)
BindEvent(#PB_Event_CloseWindow, @Event_Close_Win0(), Win0)
ProcedureReturn #True
EndIf
EndProcedure
;}
Procedure AfficheDatas ( )
SetGadgetText( Win0_Txt_RiffChunkIdVal , "RIFF " )
SetGadgetText ( Win0_Txt_RiffSizeVal , Str( *MemoryWave\RiffSize ) )
SetGadgetText( Win0_Txt_RiffSubTypeVal , "WAVE " )
SetGadgetText( Win0_Txt_SubChunkIdVal , "fmt " )
SetGadgetText( Win0_Txt_SubChunkSizeVal , "16 " )
SetGadgetText ( Win0_Txt_wFormatTagVal , "1" )
SetGadgetText ( Win0_Txt_NbAvgBytesPerSecVal , Str( *MemoryWave\NbAvgBytesPerSec ) )
SetGadgetText ( Win0_Txt_NbBlockAlignVal , Str( *MemoryWave\NbBlockAlign ) )
SetGadgetText ( Win0_Txt_WavSizeVal , Str( *MemoryWave\DataChunkSize ) )
EndProcedure
Procedure CalculeDatas ( )
*MemoryWave\NbChannels = Val( GetGadgetText( Win0_Combo_NbChannels ) )
*MemoryWave\NbSamplesPerSec = Val( GetGadgetText( Win0_Combo_NbSamplesPerSec ) )
*MemoryWave\wBitsPerSample = Val( GetGadgetText( Win0_Combo_wBitsPerSample ) )
*MemoryWave\NbBlockAlign = *MemoryWave\NbChannels * *MemoryWave\wBitsPerSample / 8
*MemoryWave\NbAvgBytesPerSec = *MemoryWave\NbSamplesPerSec * *MemoryWave\NbBlockAlign
EndProcedure
InitSound()
; *****************
Open_Win0 ()
SetWindowTitle ( Win0 , Titre )
AddGadgetItem ( Win0_Combo_NbChannels , -1 , "1" )
AddGadgetItem ( Win0_Combo_NbChannels , -1 , "2" ) ; PCM Div Game Studio
AddGadgetItem ( Win0_Combo_NbChannels , -1 , "3" )
AddGadgetItem ( Win0_Combo_NbChannels , -1 , "4" )
AddGadgetItem ( Win0_Combo_NbChannels , -1 , "5" )
SetGadgetState ( Win0_Combo_NbChannels , 1 )
AddGadgetItem ( Win0_Combo_NbSamplesPerSec , -1, "5400" ) ; PCM Div Game Studio
AddGadgetItem ( Win0_Combo_NbSamplesPerSec , -1, "8000" )
AddGadgetItem ( Win0_Combo_NbSamplesPerSec , -1, "11025" )
AddGadgetItem ( Win0_Combo_NbSamplesPerSec , -1, "22050" )
AddGadgetItem ( Win0_Combo_NbSamplesPerSec , -1, "44100" )
AddGadgetItem ( Win0_Combo_NbSamplesPerSec , -1, "48000" )
AddGadgetItem ( Win0_Combo_NbSamplesPerSec , -1, "96000" )
SetGadgetState ( Win0_Combo_NbSamplesPerSec , 0 )
AddGadgetItem ( Win0_Combo_wBitsPerSample , -1, "8" ) ; PCM Div Game Studio
AddGadgetItem ( Win0_Combo_wBitsPerSample , -1, "16" )
AddGadgetItem ( Win0_Combo_wBitsPerSample , -1, "32" )
SetGadgetState ( Win0_Combo_wBitsPerSample , 0 )
DisableGadget ( Win0_Btn_SauveAudio , #True )
DisableGadget ( Win0_Btn_Play , #True )
DisableGadget ( Win0_Btn_Stop , #True )
SetGadgetState ( Win0_TrackBar_Volume , 25 )
CalculeDatas( )
AfficheDatas( )
;- Programme Principal
Repeat
If TestAudio
If SoundStatus( TestAudio ) = #PB_Sound_Playing ; 20260427
SetGadgetState ( Win0_ProgressBar_Snd , GetSoundPosition( TestAudio ) )
ElseIf SoundStatus( TestAudio ) = #PB_Sound_Stopped
SetGadgetState ( Win0_ProgressBar_Snd , SoundLength( TestAudio ) )
EndIf
Delay(100)
EndIf
Select WindowEvent()
EndSelect
Until Win0_Quit