FmodEx : Jouer un flux shoutcast

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: FmodEx : Jouer un flux shoutcast

Message par Marc56 »

@falsam
Avec ta modif, ça marche bien en x86 ou x64

@Ar-s
Avec ton pbi, ça marche aussi

Mais dans les deux cas, en ascii uniquement pas en Unicode :(

Je trouve sur le net plein de pages concernant unicode avec fmodex, mais ça concerne toujours des problèmes de noms de fichiers.

Je pense que pour l'instant je vais devoir repasser tout en ascii :| mais le jour où Fred passera PB en unicode only, ce sera cuit. (à moins qu'il y ait une solution d'ici là)

Merci en tous cas à vous deux pour les patchs :)

Voila ce que donne mon appli compilée sans le mode unicode

Image

Ce sont toutes les coordonnées des zones qui sont décalées
(elles sont affectées dynamiquement)
Je vais trouver d'où ça vient. Effectivement , si ça joue sur les .i et .l ça s'explique.

Edit: Trouvé! :P
J’utilisais pour mes coordonnées x et y de chaque zone une variable .c qui en unicode va de 0 à 65353 mais en ascii de 0 à 255, d'où l'entassement de mes zones vers le haut en mode asii :idea:
Tout a une logique en Basic! :D
@Ar-s, c'est ta petite phrase « Comme souvent, le .l pour du x64 ça chie... On passe en .i » qui ma donné l'idée d'aller chercher par là.

Code : Tout sélectionner

Structure Softs
    Run.s
    Exe.s
    ToolTip_Key.s
    ToolTip_Text.s
    ID_Zone.i
    ID_Ico.i
    x.i     ; old x.c
    y.i     ; old y.c
EndStructure
Dernière modification par Marc56 le dim. 10/avr./2016 16:16, modifié 2 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: FmodEx : Jouer un flux shoutcast

Message par falsam »

@Ar-s : J'ai essayé avec ton include et le souci est le même. Les tags ne s'affiche pas avec une compilation x64.
Configuration : Windows 11 Famille 64-bit - PB 6.20 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 : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: FmodEx : Jouer un flux shoutcast

Message par Ar-S »

Heu si ça marche, enfin je compile en 5.31 x64 ... j'ai pas installé le 5.42 x64 ça vient peut être de là.

Tu as essayé en mettant

Code : Tout sélectionner

 For i=0 To TagCount-1      
    FMOD_Sound_GetTag(Sound, 0, i, @Tag) 
    Debug "tag "+Str(i) + " : " + UCase(PeekS(Tag\name))
~~~~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
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: FmodEx : Jouer un flux shoutcast

Message par Ar-S »

J'ai installé pb 5.42x64
tout s'affiche bien dans le debug

Code : Tout sélectionner

;Fmodex : Jouer un flux internet radio

EnableExplicit

IncludeFile "fmodexX64.pbi" ; <== important sinon les champs sont vides

Enumeration Font
  #FontGlobal
  #FontAuthor
  #FontTitle
EndEnumeration

Enumeration Window
  #Mainform
EndEnumeration

Enumeration Gadget
  #WebRadio
  #Pause
  #Volume
  
  #Spectrum
  
  #TagICYName
  #TagICYUrl
  #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, N.i

Structure Radio
  Url.s
  Name.s
EndStructure
Global NewList WebRadio.Radio(), Url.s

Procedure WebRadioLoad()
  Protected Buffer.s, i.i
  
  Restore WebRadio
  For i=1 To 8
    AddElement(WebRadio())
    
    Read.s Buffer     
    WebRadio()\Url = Buffer
    
    Read.s Buffer     
    WebRadio()\Name = Buffer
    
    AddGadgetItem(#WebRadio, -1, WebRadio()\Name)
    SetGadgetItemData(#WebRadio, i-1, i-1)
  Next 
  
  SetGadgetState(#WebRadio, 0)
  
EndProcedure

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 
  
  StopDrawing()
  
EndProcedure


Procedure TagUpdate(Sound)
  Protected TagCount, Tag.FMOD_TAG, i, Title.s, Artist.s, ICYName.s, ICYUrl.s
  
  
  ;La fonction FMOD_Sound_GetNumTags() récupère le nombre de mots-clés appartenant à un son.
  FMOD_Sound_GetNumTags(Sound, @TagCount, #Null) 
  Debug "Il y a " + Str(TagCount) + " tags"
  
  For i=0 To TagCount-1      
    FMOD_Sound_GetTag(Sound, 0, i, @Tag) 
    Debug "tag "+Str(i) + " : " + UCase(PeekS(Tag\name))
    
    Select UCase(PeekS(Tag\name))
      Case "ARTIST", "TPE1", "TPE2", "TP1"
        If Artist=""
          Artist = PeekS(Tag\_data, Tag\datalen, #PB_UTF8)
        EndIf
        
      Case "TITLE", "TIT1", "TIT2", "TT2"
        If Title=""
          Title = PeekS(Tag\_data, Tag\datalen, #PB_UTF8)
        EndIf
        
      Case "ICY-NAME"
        ICYName = PeekS(Tag\_data, Tag\datalen, #PB_UTF8)
        
      Case "ICY-URL"
        ICYUrl =   PeekS(Tag\_data, Tag\datalen, #PB_UTF8)

        
    EndSelect
  Next
  
  If Artist <> GetGadgetText(#TagAuthor)
    SetGadgetText(#TagAuthor, Artist)
  EndIf
  
  If Title <> GetGadgetText(#TagTitle)
    SetGadgetText(#TagTitle, Title)
  EndIf
  
  If ICYName <> GetGadgetText(#TagICYName) Or N<>0
    If Len(ICYName) > 47
      N+1
      If N > Len(ICYName)-47
        N = 0
      EndIf
    Else
      N=0
    EndIf
    
    SetGadgetText(#TagICYName, Mid(ICYName, N, 47))
  EndIf
  
  If ICYUrl <> GetGadgetText(#TagICYUrl)
    SetGadgetText(#TagICYUrl, ICYUrl)
  EndIf
  
EndProcedure

Procedure Open_MainForm()    
  LoadFont(#FontGlobal, "Tahoma", 10)
  SetGadgetFont(#PB_Default, FontID(#FontGlobal)) 
  
  LoadFont(#FontAuthor, "Tahoma", 15)
  LoadFont(#FontTitle, "Tahoma", 12)
  
  OpenWindow(#Mainform, 0, 0, 300, 315, "Play Shoutcast", WindowStyle)
  ComboBoxGadget(#WebRadio, 10, 10, 280, 24)
  
  TextGadget(#PB_Any, 5, 45, 30, 20, "Vol")
  TrackBarGadget(#Volume, 45, 45, 251, 24, 0, 100)
  SetGadgetState(#Volume, 50)
  
  ;Auteur & Titre
  TextGadget(#TagAuthor, 5, 72, 290, 22, "?")
  SetGadgetFont(#TagAuthor, FontID(#FontAuthor)) 
  TextGadget(#TagTitle, 5, 95, 290, 22, "?")
  SetGadgetFont(#TagTitle, FontID(#FontTitle))
  
  ;Nom de la radio et site
  TextGadget(#TagICYName, 5, 120, 290, 22, "?")
  TextGadget(#TagICYUrl, 5, 150, 280, 22, "?")
  
  ;Spectrum
  CanvasGadget(#Spectrum, 5, 175, 290, 100)
  ButtonGadget(#Pause, 117, 285, 50, 24, "Pause")
  
  AddWindowTimer(#Mainform, 100, 100)
  AddWindowTimer(#Mainform, 101, 500)
EndProcedure

Procedure Start()
  Open_MainForm()
  WebRadioLoad()
  
  ;Déclarer l'objet FMOD System
  FMOD_System_Create(@fmodsystem)
  
  ;Initialiser le system (32 canaux) 
  ;Un seul canal suffirait pour cet exemple.
  ;Le maximum est de 4093 canaux.
  FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)
  
  ;CreateStream permet de commencer la lecture avant le chargement complet de l'url
  FirstElement(WebRadio())
  Url = WebRadio()\Url
  FMOD_System_CreateStream(fmodsystem, @Url, #FMOD_CREATESTREAM, 0, @sound)
  
  TagUpdate(Sound)
  
  ;On joue le son sur le canal 1 (@Channel contiendra le handle du cannal 1)
  FMOD_System_PlaySound(fmodsystem, 1, sound, 0, @channel)
  
  ;Et on ajuste le volume (le son est compris entre 0.0 et 1.0)
  FMOD_Channel_SetVolume(Channel, 0.5)
  
  ;le son (@Sound) et intimement lié à son canal (@Channel)
  
EndProcedure

start()

Repeat
  Event   = WaitWindowEvent(100)    
  GEvent  = EventGadget()
  TiEvent = EventTimer()
  
  Select Event
      
    Case #PB_Event_Timer
      Select TIEvent
        Case 100
          ShowSpectrum() 
          
        Case 101
          TagUpdate(Sound)
          
      EndSelect
      
    Case #PB_Event_Gadget
      
      Select GEvent
        Case #WebRadio
          SelectElement(Webradio(), GetGadgetState(#WebRadio))
          FMOD_System_CreateStream(fmodsystem, @Webradio()\Url, #FMOD_CREATESTREAM, 0, @sound)
          TagUpdate(Sound)
          FMOD_System_PlaySound(fmodsystem, 1, sound, 0, @channel)
          FMOD_Channel_SetVolume(Channel, GetGadgetState(#Volume)/100)
          
        Case #Volume
          Volume = GetGadgetState(#Volume)/100
          FMOD_Channel_SetVolume(Channel, Volume)
          
        Case #Pause
          ;FMOD_Channel_GetPaused permet de savoir si le son sur le canal est en pause ou pas
          TagUpdate(Sound)
          FMOD_Channel_GetPaused(Channel, @PauseStatus) 
          
          If PauseStatus = #False
            FMOD_Channel_SetPaused(Channel, #True) ;Pause
            SetGadgetText(#Pause, "Play")
          Else
            FMOD_Channel_SetPaused(Channel, #False) ;Reprise de la lecture
            SetGadgetText(#Pause, "Pause")
          EndIf
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      FMOD_Channel_Stop(Channel)
      FMOD_System_Release(fmodsystem)
      End
      
  EndSelect
ForEver

DataSection
  Webradio:
  
  Data.s "http://server1.chilltrax.com:9000", "Chilltrax"
  Data.s "http://broadcast.infomaniak.ch/frequencejazz-high.mp3","Jazz Radio"
  Data.s "http://stream.pulsradio.com:5000", "Pulse Radio"
  Data.s "http://stream1.chantefrance.com/Chante_France", "Chante France"
  Data.s "http://streaming202.radionomy.com:80/70s-80s-90s-riw-vintage-channel","RIWVintage Channel"
  Data.s "http://mfm.ice.infomaniak.ch/mfm-128.mp3", "MFM Radio"
  Data.s "http://broadcast.infomaniak.net/tsfjazz-high.mp3", "TSF Jazz"
  Data.s "http://199.101.51.168:8004", "Blues Connection"
EndDataSection

~~~~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 : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: FmodEx : Jouer un flux shoutcast

Message par falsam »

Ok avec le débug j'ai bien les tags. Par contre ils ne portent pas le meme nom suivant le type de compilation !!! C'est délirant ça.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: FmodEx : Jouer un flux shoutcast

Message par Marc56 »

Comment faire maintenant pour utiliser FmodEx avec PB 5.50 ? (puisque PB ne compile plus qu'en mode Unicode)
:(
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: FmodEx : Jouer un flux shoutcast

Message par Micoute »

Il faut aussi garder la version 5.42 LTS.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: FmodEx : Jouer un flux shoutcast

Message par Marc56 »

Micoute a écrit :Il faut aussi garder la version 5.42 LTS.
Oui, c'est que je vais faire, mais c'est dommage de devoir se priver des nouvelles fonction (et de celles à venir) :|

Autre problème: un projet ouvert et modifié dans la 5.50 B1 refuse ensuite de s'ouvrir dans la 5.42 LTS même s'il n'y a eut aucune modification dans les sources.
Il faut modifier le fichier projet à la main ou reprendre l'ancien.
Pas trop embêtant, mais à prendre en compte.

Message
Projet
---------------------------
Impossible de charger le fichier projet.
xxxxxx .pbp


Edit: Ça ne se produit pas sur un nouveau projet, donc c'est dans le mien (Desk) qu'il y a un problème :cry:

Astuce: pour ceux qui ne connaissent pas le truc, sous Windows, pour les applications écrites avec les outils standard, les boites de messages (Erreurs) sont copiables/collable de graphique vers texte (ctrl+c sur le msgbox et ctrl+v dans le texte). Inutile de faire des copies d'écran

:wink:
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: FmodEx : Jouer un flux shoutcast

Message par Shadow »

Merci de l'astuce Marc56 :wink:
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: FmodEx : Jouer un flux shoutcast

Message par Ar-S »

Même si le soucis viens surement de la compilation en unicode, n'oubliez pas que c'est la version beta1 de pb..
~~~~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 : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: FmodEx : Jouer un flux shoutcast

Message par Micoute »

Je n'oublie pas et c'est pour cette raison que je garde la version 4.52 très active pour le moment, il faut savoir rétrograder quand c'est nécessaire.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: FmodEx : Jouer un flux shoutcast

Message par Marc56 »

FmodEx étant une dll déjà compilée, je ne pense pas que ça influence quoi que ce soit que le programme appelant soit compilé en unicode ou ascii ?
C'est donc, je pense dans "fmodex.pbi" qu'il faut modifier les appels utilisant des chaines ?
(avec les nouvelles fonctions UTF8() et Ascii()) ?

Je vais aussi chercher dans la doc de FmodEx, comment accéder aux fonctions de la dll directement, puisque quand je liste le fichier "fmodex.pbi", je n'utilise qu'une infime partie des fonctions proposées.
(Je n'ai besoin que de lire un flux web / arrêter le lecture et régler le volume)

Ou alors trouver une autre dll
8O
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Re: FmodEx : Jouer un flux shoutcast

Message par Fred »

Il n'y aucune raison que ca ne marche pas en unicode.
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: FmodEx : Jouer un flux shoutcast

Message par Marc56 »

Merci Fred.

J'ai été reprendre dans le topic de Falsam http://www.purebasic.fr/french/viewtopi ... =6&t=14096 un exemple le plus court possible pour tester le shoutcast (webradio)

J'ai repris dans le package https://github.com/pbcodex/fmodex l'exemple « Fmod Ex - Play Shoutcast.pb »

Sur PB 5.42 LTS x86 ou x64, mode unicode désactivé: OK :) , mode unicode activé: KO :cry:
Sur PB 5.50 B1 (donc uniquement unicode): KO (normal)

Quand ça ne marche pas, aucun message d'erreur ni plantage, donc difficile de voir où chercher :|

Je pense que d'autres programmes utilisent surement cette DLL avec des langages travaillant en unicode, donc le problème doit je pense venir du .pbi ?

Machine principale: W10 x64
Pour écarter une mauvaise configuration, j'ai aussi testé sur une VM XP: même chose (le programme marche bien sauf si on coche unicode)
El Papounet
Messages : 57
Inscription : mer. 09/juin/2010 23:47

Re: FmodEx : Jouer un flux shoutcast

Message par El Papounet »

Marc56 a écrit : Quand ça ne marche pas, aucun message d'erreur ni plantage, donc difficile de voir où chercher :|
Je pense que d'autres programmes utilisent surement cette DLL avec des langages travaillant en unicode, donc le problème doit je pense venir du .pbi ?
Regarde du côté du vrapper

Code : Tout sélectionner

Prototype.l FMOD_System_CreateStream_Prototype (system.l, Name_or_data.l, Mode.l, *exinfo, *Sound)
et utilise les pseudotypes, en particulier pour l'url

Code : Tout sélectionner

Name_or_data.l
en remplaçant par

Code : Tout sélectionner

Name_or_data.p-assci
Ensuite, lors de l'appel de la fonction il faut passer l'url sous forme de chaine et non pas le pointeur comme fait actuellement.
Ainsi:

Code : Tout sélectionner

Url ="http://server1.chilltrax.com:9000"
FMOD_System_CreateStream(fmodsystem, @Url, #FMOD_CREATESTREAM, 0, @sound)
Devient:

Code : Tout sélectionner

Url ="http://server1.chilltrax.com:9000"
FMOD_System_CreateStream(fmodsystem, Url, #FMOD_CREATESTREAM, 0, @sound)
Je pense qu'après cette modification le programme compilé en unicode fonctionne aussi.
Répondre