Page 1 sur 2

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

Publié : jeu. 21/nov./2013 18:27
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.

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

Publié : jeu. 21/nov./2013 18:39
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

Fmod Ex :Extraire les tags

Publié : ven. 22/nov./2013 16:18
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

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

Publié : ven. 22/nov./2013 23:24
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 ^^)

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

Publié : sam. 23/nov./2013 0:08
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.

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

Publié : sam. 23/nov./2013 0:56
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

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

Publié : sam. 23/nov./2013 1:32
par venom
Bravo pour ce taf falsam,

Le résultat est top







@++

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

Publié : sam. 23/nov./2013 2:04
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

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

Publié : sam. 23/nov./2013 9:40
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 !!!

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

Publié : sam. 23/nov./2013 11:50
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

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

Publié : sam. 23/nov./2013 12:03
par falsam
Merci Ar-s. Code corrigé et je corrige aussi les autres exemples.

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

Publié : sam. 23/nov./2013 12:28
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 ?

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

Publié : sam. 23/nov./2013 13:02
par Ar-S
Même soucis ds les 2 cas. W8 x64

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

Publié : sam. 23/nov./2013 13:05
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.

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

Publié : sam. 23/nov./2013 16:31
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