Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.flac)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.flac)

Message par falsam »

■ Fmod Ex est une bibliothéque C++ multiplate-forme (Windows, Linux, Macintosh, Android, XBox, Playstation, Nintendo (WII, 3DS et U), Iphone qui permet la création de module de son.

Fmod Ex supporte une vingtaine de formats musicaux (MP3, FLAC, WAV , WMA, XMA, etc ....) et supporte aussi la lecture de flux internet audios.

■ Le code minimaliste que je vous présente et un lecteur de fichier audio.
Lire un fichier audio (*.mp3;*.wav;*.ogg;*.flac)
Régler le volume
Jouer, mettre en pause, reprendre la lecture et arrêter de jouer.

Pour pouvoir exploiter Fmod Ex vous devez copier dans le dossier de votre projet les fichiers fmodex.dll ainsi que fmodex.pbi. Ces deux fichiers sont fournis en annexe de ce post.

Le code étant documenté, je ne ferais pas de commentaire supplémentaire.

Code : Tout sélectionner

;Fmod Ex : Jouer un titre musical
EnableExplicit

IncludeFile "fmodex.pbi"

Enumeration
  #Mainform
  #File
  #OpenFile
  #Play
  #Pause
  #Stop
  #Volume
EndEnumeration

Define.l Event, GEvent, TiEvent

Global WindowStyle.i=#PB_Window_SystemMenu|#PB_Window_ScreenCentered

Global fmodsystem.i, Channel.i, Sound.i, Volume.f = 0.5, PauseStatus.b
Global File.s

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 300, 100, "Fmod Player", WindowStyle)
  StringGadget(#File, 10, 20, 230, 22, "", #PB_String_ReadOnly)
  ButtonGadget(#OpenFile, 245, 20, 50, 22, "Select")
  TextGadget(#PB_Any, 10, 50, 30, 20, "Vol")
  TrackBarGadget(#Volume, 45, 45, 200, 24, 0, 100)
  SetGadgetState(#Volume, 50)
  
  ButtonGadget(#Play, 55, 70, 60, 22, "Start")
  ButtonGadget(#Pause, 117, 70, 60, 22, "Pause")
  ButtonGadget(#Stop, 183, 70, 60, 22, "Stop")
  
EndProcedure

Open_MainForm()
  
;Déclarer l'objet FMOD System
FMOD_System_Create(@fmodsystem)
  
;Initialiser le system (32 canaux) un seul suffirait pour cet exemple
FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)


Repeat
  Event   = WaitWindowEvent(100)    
  GEvent  = EventGadget()
    
  Select Event
            
    Case #PB_Event_Gadget
      Select GEvent
        Case #OpenFile
          
          ;Décharge le son précédent
          If Sound <> 0
            FMOD_Sound_Release(Sound)
          EndIf
          
          File = OpenFileRequester("Sélectionner un fichier mp3","","Musique|*.mp3;*.wav;*.ogg;*.flac",0)
          If File <> ""
            SetGadgetText(#File, GetFilePart(File))
            FMOD_System_CreateStream(fmodsystem, @File, #FMOD_SOFTWARE, 0, @sound)
          EndIf
          
        Case #Volume
          Volume = GetGadgetState(#Volume)/100
          FMOD_Channel_SetVolume(Channel, Volume)
                  
        Case #Play  
          ;PlaySound va jouer le son sur un des canaux libre
          ;la variable Channel contiendra le handle du canal utilisé par le son.
          FMOD_System_PlaySound(fmodsystem, #FMOD_CHANNEL_FREE, sound, 0, @channel)
          
          ;Et on ajuste le volume (le son est compris entre 0.0 et 1.0)
          FMOD_Channel_SetVolume(Channel, Volume)
          
        Case #Pause
          ;FMOD_Channel_GetPaused permet de savoir si le son sur le canal est en pause ou pas
          FMOD_Channel_GetPaused(Channel, @PauseStatus) 
          
          If PauseStatus = #False
            FMOD_Channel_SetPaused(Channel, #True) ;Pause
            SetGadgetText(#Pause, "Reprendre")
          Else
            FMOD_Channel_SetPaused(Channel, #False) ;Reprise de la lecture
            SetGadgetText(#Pause, "Pause")
          EndIf
          
        Case #Stop
          FMOD_Channel_Stop(Channel)
          
      EndSelect
        
    Case #PB_Event_CloseWindow
      FMOD_Channel_Stop(Channel)
      FMOD_System_Release(fmodsystem)
      End
      
  EndSelect
ForEver
■ Annexe
Les DLL (x86 & x64) et l'include necessaires au fonctionnement des codes est disponible sur la platform collaborative GitHub.

:arrow: https://github.com/pbcodex/fmodex


■ A voir aussi.
-Afficher les tags (Exemple : Artiste et Titre) d'un titre musical.
-Affichage du spectre musical, de la durée et temps restant d'un titre musical.
-Lire un flux shoutcast.
Dernière modification par falsam le sam. 23/nov./2013 22:29, modifié 5 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par falsam »

Ajouter de l'écho.

Juste après la ligne

Code : Tout sélectionner

;Initialiser le system (32 canaux) un seul suffirait pour cet exemple
FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)
ajouter maintenant

Code : Tout sélectionner

;Ajoute un echo 
FMOD_System_CreateDSPByType(fmodsystem, #FMOD_DSP_TYPE_ECHO, @Echo)
FMOD_System_AddDSP(fmodsystem, Echo)  
FMOD_DSP_SetParameter(Echo, #FMOD_DSP_ECHO_DELAY, 30) ;Echo de 30 ms
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Fmod Ex :Extraire les tags

Message par falsam »

Afficher les tags (Exemple : Artiste et Titre) d'un titre musical.

La fonction FMOD_Sound_GetNumTags() Récupère le nombre de mots-clés appartenant à un son (*.mp3;*.wav;*.ogg;*.flac).

Code : Tout sélectionner

FMOD_Sound_GetNumTags(Sound, @TagCount, #Null) 
Sound est le handle du son initialisé par la la fonction FMOD_System_CreateStream() que nous avons déja vu précédement.

TagCount est une variable numérique qui contiendra le nombre de tag défini pour ce son.

Laisser #Null ou 0 pour le troisième paramètre.

La structure FMOD_TAG contiendra la liste de ces tags.

■ Utiliser ensuite la fonction FMOD_Sound_GetTag() dans une boucle pour lire ces tags.

la structure FMOD_TAG est décrite de cette manière.

Structure FMOD_TAG
      type.l           Le type de cette balise.
      datatype.l     Le type de données que contient cette balise.
      name.l          Le nom de cette balise dire "TITLE", "ARTIST", etc.
      _data.l          Pointeur sur les données du tag
      datalen.l       Longueur des données contenues dans cette balise
      udated.l        Vrai si cette balise a été mis à jour depuis le dernier accés avec FMOD_Sound_GetTag()
EndStructure

Pour afficher les tags dans l'exemple qui va suivre, nous allons nous intéresser aux valeurs des variables Name et datalen.

On aurait pu penser que les valeur ARTIST et TITLE suffirait pour afficher l'auteur et le titre en cours de lecture. Et bien non.

■ Suivant les titres Name pourra prendre comme valeur :
ARTIST, TPE1, TPE2, TP1 pour l'artiste.
TITTLE, TIT1, TIT2, TT2 pour le titre d'un son.

Allez il est temps que je vous montre un exemple mettant en oeuvre ce que je viens de dire.
C'est ce que nous allons mettre en oeuvre avec l'exemple ci-dessous.

Code : Tout sélectionner

;Fmod Ex : Jouer un titre musical
EnableExplicit

IncludeFile "fmodex.pbi"

Enumeration
  #Mainform
  #File
  #OpenFile
  #Play
  #Pause
  #Stop
  #Volume
  
  #TagAuthor
  #TagTitle
EndEnumeration

Define.l Event, GEvent, TiEvent

Global WindowStyle.i=#PB_Window_SystemMenu|#PB_Window_ScreenCentered

Global fmodsystem.i, Channel.i, Sound.i, Volume.f = 0.5, PauseStatus.b
Global File.s

Procedure TagUpdate(Sound)
  Protected TagCount, Tag.FMOD_TAG, i, Title.s, Artist.s
  
  ;La fonction FMOD_Sound_GetNumTags() récupère le nombre de mots-clés appartenant à un son.
  FMOD_Sound_GetNumTags(Sound, @TagCount, #Null) 
  
  For i=0 To TagCount-1
      
      FMOD_Sound_GetTag(Sound, 0, i, @Tag) 
      ;Debug "TAG Struct:" 
      ;Debug Tag\type 
      ;Debug Tag\datatype 
      ;Debug Tag\name 
      ;Debug Tag\_data 
      ;Debug Tag\datalen 
      ;Debug Tag\udated     
      Select PeekS(Tag\name)
        Case "ARTIST", "TPE1", "TPE2", "TP1"
          If Artist=""
            Artist = PeekS(Tag\_data, Tag\datalen)
          EndIf
                    
        Case "TITLE", "TIT1", "TIT2", "TT2"
          If Title=""
            Title = PeekS(Tag\_data, Tag\datalen)
          EndIf
                      
      EndSelect
      
      Debug PeekS(Tag\name) + " "+PeekS(Tag\_data, Tag\datalen) 
    Next
    
    SetGadgetText(#TagAuthor, Artist)
    SetGadgetText(#TagTitle, Title)
EndProcedure

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 300, 183, "Fmod Player", WindowStyle)
  StringGadget(#File, 10, 20, 230, 22, "", #PB_String_ReadOnly)
  ButtonGadget(#OpenFile, 245, 20, 50, 22, "Select")
  TextGadget(#PB_Any, 10, 50, 30, 20, "Vol")
  TrackBarGadget(#Volume, 45, 45, 200, 24, 0, 100)
  SetGadgetState(#Volume, 50)
  
  TextGadget(#TagAuthor, 5, 80, 280, 22, "")
  TextGadget(#TagTitle, 5, 105, 280, 22, "")
  
  ButtonGadget(#Play, 55, 155, 60, 22, "Start")
  ButtonGadget(#Pause, 117, 155, 60, 22, "Pause")
  ButtonGadget(#Stop, 183, 155, 60, 22, "Stop")
  
EndProcedure

Open_MainForm()
  
;Déclarer l'objet FMOD System
FMOD_System_Create(@fmodsystem)
  
;Initialiser le system (32 canaux) un seul suffirait pour cet exemple
FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)

Repeat
  Event   = WaitWindowEvent(100)    
  GEvent  = EventGadget()
    
  Select Event
            
    Case #PB_Event_Gadget
      Select GEvent
        Case #OpenFile
          
          ;Décharge le son précédent
          If Sound <> 0
            FMOD_Sound_Release(Sound)
          EndIf
          
          File = OpenFileRequester("Sélectionner un fichier mp3","","Musique|*.mp3;*.wav;*.ogg;*.flac",0)
          If File <> ""
            SetGadgetText(#File, GetFilePart(File))
            FMOD_System_CreateStream(fmodsystem, @File, #FMOD_SOFTWARE, 0, @sound)
            
            
            TagUpdate(Sound)
          EndIf
          
        Case #Volume
          Volume = GetGadgetState(#Volume)/100
          FMOD_Channel_SetVolume(Channel, Volume)
                  
        Case #Play  
          ;PlaySound va jouer le son sur un des canaux libre
          ;la variable Channel contiendra le handle du canal utilisé par le son.
          FMOD_System_PlaySound(fmodsystem, #FMOD_CHANNEL_FREE, sound, 0, @channel)
          
          ;Et on ajuste le volume (le son est compris entre 0.0 et 1.0)
          FMOD_Channel_SetVolume(Channel, Volume)
          
        Case #Pause
          ;FMOD_Channel_GetPaused permet de savoir si le son sur le canal est en pause ou pas
          FMOD_Channel_GetPaused(Channel, @PauseStatus) 
          
          If PauseStatus = #False
            FMOD_Channel_SetPaused(Channel, #True) ;Pause
            SetGadgetText(#Pause, "Reprendre")
          Else
            FMOD_Channel_SetPaused(Channel, #False) ;Reprise de la lecture
            SetGadgetText(#Pause, "Pause")
          EndIf
          
        Case #Stop
          FMOD_Channel_Stop(Channel)
          
      EndSelect
        
    Case #PB_Event_CloseWindow
      FMOD_Channel_Stop(Channel)
      FMOD_System_Release(fmodsystem)
      End
      
  EndSelect
ForEver
Dernière modification par falsam le sam. 23/nov./2013 22:29, modifié 2 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par Ar-S »

Merci pour ces complétions fort utiles !
Je n'ai pas testé le dernier code, as tu testé avec une webradio ?
Si oui les tags changent-ils lorsqu'un morceaux change ?
(si tu n'as pas testé je le ferai bien sous peu de toute façon ^^)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par falsam »

@Ar-S : Comme tu le verras, Les infos tags de flux audio type Shoutcast sont de type icy-* et n'ont rien à voir avec les balises des fichiers audios.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par falsam »

Affichage du spectre musical.
Affichage de la durée et temps restant d'un titre musical.
Se déplacer dans le titre musical.

La documentation est dans le code qui n'est pas du tout skinné mais qui permet d'entrevoir les possibilité de Fmod Ex.

Code : Tout sélectionner

;Fmod Ex : Jouer un titre musical
EnableExplicit

IncludeFile "fmodex.pbi"

Enumeration Font
  #FontGlobal
  #FontAuthor
  #FontTitle
  #FontTime
  
EndEnumeration

Enumeration
  #Mainform
  #File
  #OpenFile
  #Play
  #Pause
  #Stop
  #Volume
  #Spectrum
  #SoundPosition
  
  #TagAuthor
  #TagTitle
EndEnumeration

Define.l Event, GEvent, TiEvent

Global WindowStyle.i=#PB_Window_SystemMenu|#PB_Window_ScreenCentered

Global fmodsystem.i, Channel.i, Sound.i, Volume.f = 0.5, Lenght.i, PauseStatus.b
Global File.s

;Convertir des millisecondes en HH:MM:SS 
Procedure.s GetHourFormat(TimeMS.i)
  Protected Val.i = 1000*3600, Rest.i
  Protected HH.i, MM.i, SS.i
  
  HH = TimeMS/Val
  Rest = TimeMS - HH*Val
  
  Val/60
  MM = Rest/Val
  
  Rest = Rest - MM*Val
  Val/60
  
  SS = Rest/val
  
  ProcedureReturn RSet(Str(HH),2,"0") + ":" + RSet(Str(MM),2,"0") + ":" + RSet(Str(SS),2,"0")
  
EndProcedure

;Affichage de l'activité du son
;Affichage de la durée et temps restant d'un titre musical
Procedure ShowSpectrum()
  Protected Dim SpectrumArray.f(128), i.i, j.i, Max, Position.i
  
  ;FMOD_Channel_GetSpectrum(() Récupère le spectre du signal de sortie en cours de lecture.
  ;SpectrumArray est un tableau représente les amplitudes de chaque bande de fréquence.
  ;Le nombre d'amplitudes doit etre une puissance de 2 (Min 64 Max 8192) 
  FMOD_Channel_GetSpectrum(Channel, SpectrumArray(), 64, 0, 0 )
  
  StartDrawing(CanvasOutput(#Spectrum))
  
  ;Clear de l'histogramme
  Box(0, 0, 290, 100, RGB(245, 245, 245)) 
  
  ;Cadre autour de l'histogramme
  DrawingMode(#PB_2DDrawing_Outlined) 
  Box(0, 0, 290, 100, RGB(0, 0, 0)) 
  
  ;Dessin des points
  DrawingMode(#PB_2DDrawing_Default)
  For i=0 To 50
    Max= SpectrumArray(i)*300 
    
    Box(i*6, 100-max, 4, max-2, RGB(0, 191, 255)) 
    Box(i*6, 95-max, 4, 3, RGB(255, 0, 0)) ;Points rouges
  Next 
  
  ;Affichage durée du titre musicale
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(#FontTime))
  DrawText(10, 10, GetHourFormat(Lenght), RGB(128, 128, 128))
  
  ;Durée et temps restant d'un titre musical
  FMOD_Channel_GetPosition(Channel, @Position, #FMOD_TIMEUNIT_MS)  
  SetGadgetState(#SoundPosition, Position)
  DrawText(200, 10, GetHourFormat(Position), RGB(128, 128, 128))
  StopDrawing()

EndProcedure

Procedure TagUpdate(Sound)
  Protected TagCount, Tag.FMOD_TAG, i, Title.s, Artist.s
  
  ;La fonction FMOD_Sound_GetNumTags() récupère le nombre de mots-clés appartenant à un son.
  FMOD_Sound_GetNumTags(Sound, @TagCount, #Null) 
  
  For i=0 To TagCount-1      
      FMOD_Sound_GetTag(Sound, 0, i, @Tag) 
      Select PeekS(Tag\name)
        Case "ARTIST", "TPE1", "TPE2", "TP1"
          If Artist=""
            Artist = PeekS(Tag\_data, Tag\datalen)
          EndIf
                    
        Case "TITLE", "TIT1", "TIT2", "TT2"
          If Title=""
            Title = PeekS(Tag\_data, Tag\datalen)
          EndIf
                      
      EndSelect
    Next
    
    SetGadgetText(#TagAuthor, Artist)
    SetGadgetText(#TagTitle, Title)
EndProcedure

Procedure Open_MainForm()
  LoadFont(#FontGlobal, "Tahoma", 10)
  SetGadgetFont(#PB_Default, FontID(#FontGlobal)) 
  
  LoadFont(#FontAuthor, "Tahoma", 15)
  LoadFont(#FontTitle, "Tahoma", 12)
  
  LoadFont(#FontTime, "Tahoma", 11, #PB_Font_Bold)
   
  OpenWindow(#Mainform, 0, 0, 300, 305, "Fmod Player", WindowStyle)
  StringGadget(#File, 10, 20, 230, 22, "", #PB_String_ReadOnly)
  ButtonGadget(#OpenFile, 245, 20, 50, 22, "Select")
  
  TextGadget(#PB_Any, 10, 43, 30, 20, "Vol")
  TrackBarGadget(#Volume, 45, 45, 200, 24, 0, 100)
  SetGadgetState(#Volume, 50)
  
  ;Auteur & Titre
  TextGadget(#TagAuthor, 5, 80, 280, 22, "")
  SetGadgetFont(#TagAuthor, FontID(#FontAuthor)) 
  TextGadget(#TagTitle, 5, 105, 280, 22, "")
  SetGadgetFont(#TagTitle, FontID(#FontTitle))
  
  ;Spectrum, Temps et Temps restant
  CanvasGadget(#Spectrum, 5, 140, 290, 100)
  TrackBarGadget(#SoundPosition, 5, 250, 290, 24, 0, 100)
  
  
  ButtonGadget(#Play, 40, 275, 70, 22, "Start")
  ButtonGadget(#Pause, 120, 275, 70, 22, "Pause")
  ButtonGadget(#Stop, 200, 275, 70, 22, "Stop")
  
  AddWindowTimer(#Mainform, 100, 20)
  
EndProcedure

Open_MainForm()
  
;Déclarer l'objet FMOD System
FMOD_System_Create(@fmodsystem)
  
;Initialiser le system (32 canaux) un seul suffirait pour cet exemple
FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)


Repeat
  Event   = WaitWindowEvent(10)    
  GEvent  = EventGadget()
  TiEvent = EventTimer()
 
  
  Select Event
      
    Case #PB_Event_Timer
      Select TIEvent
          Case 100
            ShowSpectrum() 
        EndSelect
        
    Case #PB_Event_Gadget
      Select GEvent
        Case #OpenFile
          
          ;Décharge le son précédent
          ;Commenter ces trois ligne pour voir la difference
          If Sound <> 0
            FMOD_Sound_Release(Sound)
          EndIf
          
          File = OpenFileRequester("Sélectionner un fichier mp3","","Musique|*.mp3;*.wav;*.ogg;*.flac",0)
          If File <> ""
            SetGadgetText(#File, GetFilePart(File))
            FMOD_System_CreateStream(fmodsystem, @File, #FMOD_SOFTWARE, 0, @sound)
            
            TagUpdate(Sound)
          EndIf
          
        Case #Volume
          Volume = GetGadgetState(#Volume)/100
          FMOD_Channel_SetVolume(Channel, Volume)
          
          
        Case #SoundPosition
          FMOD_Channel_SetPosition(Channel, GetGadgetState(#SoundPosition), #FMOD_TIMEUNIT_MS)
          
        Case #Play  
          ;PlaySound va jouer le son sur un des canaux libre
          ;la variable Channel contiendra le handle du canal utilisé par le son.
          FMOD_System_PlaySound(fmodsystem, #FMOD_CHANNEL_FREE, sound, 0, @channel)
                    
          ;Et on ajuste le volume (le son est compris entre 0.0 et 1.0)
          FMOD_Channel_SetVolume(Channel, Volume)
          
          ;Longueur du titre musical
          FMOD_Sound_GetLength(Sound, @Lenght, #FMOD_TIMEUNIT_MS)
          
          ;Et on ajuste le trackbar
          SetGadgetAttribute(#SoundPosition, #PB_TrackBar_Maximum, Lenght)
          
          SetGadgetText(#Pause, "Pause")
          
        Case #Pause
          ;FMOD_Channel_GetPaused permet de savoir si le son sur le canal est en pause ou pas
          FMOD_Channel_GetPaused(Channel, @PauseStatus) 
          
          If PauseStatus = #False
            FMOD_Channel_SetPaused(Channel, #True) ;Pause
            SetGadgetText(#Pause, "Reprendre")
          Else
            FMOD_Channel_SetPaused(Channel, #False) ;Reprise de la lecture
            SetGadgetText(#Pause, "Pause")
          EndIf
          
        Case #Stop
          FMOD_Channel_Stop(Channel)
          
      EndSelect
        
    Case #PB_Event_CloseWindow
      FMOD_Channel_Stop(Channel)
      FMOD_System_Release(fmodsystem)
      End
      
  EndSelect
ForEver
Dernière modification par falsam le sam. 23/nov./2013 22:30, modifié 2 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par venom »

Bravo pour ce taf falsam,

Le résultat est top







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par Ar-S »

A ton dernier code, j'ai un "Overflow in the global data block" lorsque
- Je charge
- Je joue
- Je fait pause : => Crack
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par Micoute »

Bonjour falsam et merci pour ce partage inestimable, quand tu te lance, c'est vraiment à fond car, c'est vraiment complet et ça me donne mêmes des idées de Relooking en rajoutant quelques couleurs et polices digitales !

Par contre, comme Ar-s, il décroche quand on fait une pause, mais il y a forcément une solution où chacun pourra pallier ce défaut.

Merci encore !!!
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par Ar-S »

falsam a écrit :@Ar-S : Comme tu le verras, Les infos tags de flux audio type Shoutcast sont de type icy-* et n'ont rien à voir avec les balises des fichiers audios.
Effectivement ça ne passe pas même avec un flux de radio MP3.

Petite correction dans ton code.
Le volume max étant 1 et le min 0, tu obtiendras une plus grande finesse de changement du volume en divisant par 100 plutôt que par 10.

Code : Tout sélectionner

Volume = GetGadgetState(#Volume)/10
;par
Volume = GetGadgetState(#Volume)/100
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par falsam »

Merci Ar-s. Code corrigé et je corrige aussi les autres exemples.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par falsam »

Ar-S a écrit :A ton dernier code, j'ai un "Overflow in the global data block" lorsque
- Je charge
- Je joue
- Je fait pause : => Crack
@Ar-s et Micoute. Pouvez vous remplacer la ligne

Code : Tout sélectionner

 FMOD_System_CreateStream(fmodsystem, @File, #FMOD_SOFTWARE, 0, @sound)
par

Code : Tout sélectionner

FMOD_System_CreateStream(fmodsystem, @File, #FMOD_DEFAULT, 0, @sound)
ou bien encore

Code : Tout sélectionner

FMOD_System_CreateStream(fmodsystem, @File, #FMOD_DEFAULT, 0, @sound)
et me dire si ça change quelques chose ?

Pouvez vous me dire aussi sous quel OS ?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par Ar-S »

Même soucis ds les 2 cas. W8 x64
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par falsam »

Ar-S a écrit :Même soucis ds les 2 cas. W8 x64
Sous Windows 7 je n'ai pas ce souci. Je vais faire des tests avec ton environnement. Tu utilises le compilateur 64 bits ?

Petit complément : Pourrez tu me faire un copier/coller du résultat de ce code ?

Code : Tout sélectionner

IncludeFile "fmodex.pbi"

FMOD_System_Create(@fmodsystem)
  
FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)

FMOD_System_GetVersion(fmodsystem, @Version)
Debug "fmodex.pbi "+ Hex(#FMOD_VERSION)
Debug "fmodex.dll "+ Hex(version)

FMOD_System_Release(fmodsystem)
Après écoute de différents titres sous windows8, je n'ai pas réussi à reproduire ton bug. la version de fmodex.dll que J'utilise est la version 4.44.26 avec un include prévu pour la 4.06.06.

Exécute le code ci-dessus que j'ai modifié pour voir si tu as ces mêmes versions.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fmod Ex : Jouer un titre musical (*.mp3;*.wav;*.ogg;*.fl

Message par Ar-S »

Ma DLL est en effet plus ancienne.
fmodex.dll 43000
L'include est le même. Je mets à jour et edit le topic.

----edit----

Pbi et dll à identique à ta version, le soucis perdure. Je compile bien en x86
Dernière modification par Ar-S le sam. 23/nov./2013 16:58, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre