Donc voilà comment je fais maintenant.
(Basé sur l'idée de Falsam sur l'utilisation de script HTML (et du webgadget)
Principe simple:
- Utiliser le WebGadget mais en fenêtre cachée
- La fenêtre est pilotée depuis une autre pour tester
- Pour changer de volume ou de chaine, le programme re-créé le script HTML et relance la page (bon, ça fait 1 seconde sans son, mais on ne change pas de volume tout le temps)
- Intérêt du système: plus besoin de Fmodex et le nouvel encodage de Radiofrance fonctionne
Programme de test minimal mais qui fonctionne
Code : Tout sélectionner
EnableExplicit
Enumeration window
#audio
#MainForm
#WebForm
#StatusBar
#Sound_Up
#Sound_Dn
EndEnumeration
Declare Make_HTML()
Global stream.s, HTML.s
Global stream = "http://direct.franceinter.fr/live/franceinter-midfi.mp3"
Global Volume = 5
OpenWindow(#MainForm, 100, 100, 300, 80, "")
ButtonGadget(#Sound_Up, 10, 10, 100, 30, "Sound +")
ButtonGadget(#Sound_Dn, 110, 10, 100, 30, "Sound -")
CreateStatusBar(#StatusBar, WindowID(#MainForm))
AddStatusBarField(#PB_Ignore)
OpenWindow(#WebForm, 88, 244, 190, 160, "Web Radio", #PB_Window_Invisible, WindowID(#MainForm))
WebGadget (#audio, 0, 0, 170, 137, "")
Make_HTML()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #Sound_Up
If Volume < 9
Volume + 1
Make_HTML()
EndIf
Case #Sound_Dn
If Volume > 2
Volume -1
Make_HTML()
EndIf
EndSelect
EndSelect
ForEver
Procedure Make_HTML()
StatusBarText(#StatusBar, 0, "Volume 0." + Str(Volume))
;HTML
HTML = "<meta http-equiv='X-UA-Compatible' content='IE=edge' />"
HTML + "<body bgcolor=black scroll=no>"
HTML + "<audio id = 'stream' autoplay controls>"
HTML + "<source src='" + stream + "'>"
HTML + "</audio>"
;Script
HTML + "<script>"
HTML + "var audio = document.getElementById('stream');"
HTML + "audio.volume = 0." + Volume + ";"
HTML + "</script>"
SetGadgetItemText(#audio, #PB_Web_HtmlCode , HTML)
EndProcedure
End
Pas encore testé pour voir l'occupation mémoire et CPU par rapport à la solution Fmodex.
Ca va me permettre de supprimer 300 lignes (+ 2000 de FmodEx.pbi auquels je ne comprenais pas grand chose) dans mon Desk et MediaPlayer.
Edit: Ça fonctionne, mais une fois intégré dans mon code (ACME Desk), j'ai une coupure d'environ une secondes toute les 30 secondes environ (?). Question de buffer web ? Je vais voir si je peux le mettre en thread (à mon avis non puisque c'est un gadget).
Edit 2: En fait, même cet exemple a des coupures, mais seulement au début.