Librarie BASS vers un serveur IceCast

Codes specifiques à Windows
hub73
Messages : 126
Inscription : sam. 16/janv./2021 20:17

Librarie BASS vers un serveur IceCast

Message par hub73 »

Bonjour à vous.
Toujours dans notre projet de webradio.
Je cherche a envoyer le son de mon programme directement jusqu'à notre serveur Icecast, au passage en intégrant le plugin vst StereoTool.
Je pose des questions sur le forum FMOD de Un4seen (ils ne sont pas familiers avec purebasic) . Et nous sommes parvenus à ceci :

Code : Tout sélectionner

Procedure Son_envoyer_vers_serveur()
  
  Protected HENCODE_encoder
  Protected NomServeur.s 
  Protected MotDePasse.s 
  Protected Nom.s 
  Protected Content.s 
  Protected Url.s 
  Protected Genre.s  
  Protected Description.s
  Protected Header.s
  Protected Commande.s
  
  Protected NomVst.s
  
  Protected Retour

  Protected channel
  
  Protected FDSP
  
  Commande = StringToUTF("oggenc -M %d -m %d -r -R 44100 -")
  
  NomServeur = "146.59.233.129:8000/floralies.ogg" ; address:port/mount" (Icecast).
  NomServeur = "http://lesfloralies.ovh:8000/floralies.ogg" ; address:port/mount" (Icecast).
  MotDePasse = "roucky73"
  Nom = "Radio Les Floralies 2"
  ;Content = ""
  Url = "http://www.lesfloralies.info"
  Genre = "other"
  Description = "Webradio à Castelnaudary France"
  Header = ""
  
;  Commande = "oggenc -M %d -m %d -r -R 44100 -"
  
  BASS_RecordInit(gParametres\Dispositif_sonore)
  BASS_RecordSetDevice(gParametres\Dispositif_sonore)
  Channel = BASS_RecordStart (0, 2, #BASS_RECORD_PAUSE|#BASS_SAMPLE_FLOAT,#Null, #Null)
  
  NomVst = "C:\Users\user\Documents\radio_programmation_purebasic_broadcast\vst_stereo_tool_64.dll"
  
  FDSP  = BASS_VST_ChannelSetDSP(Channel, @NomVst, #BASS_Unicode, 0);
  ; panel sholud To be  a second form Or in the Mainform remember the Sterotool Editor is Not small
   OpenWindow_vst(0,0)
  BASS_VST_EmbedEditor(FDSP, WindowID(Window_vst))  
  
  ;HENCODE_encoder = BASS_Encode_Start(channel, @Commande, #BASS_ENCODE_NOHEAD | #BASS_ENCODE_AUTOFREE, #Null, 0); // setup the encoder
  HENCODE_encoder = BASS_Encode_Start(channel, @Commande, #BASS_ENCODE_NOHEAD, #Null, 0); // setup the encoder
  
  If HENCODE_encoder = 0
    MessageRequester ("Erreur","Erreur de l'encodeur OGG Bass : " + BASS_ErrorGetCode())
  Else
    Ajouter_au_log ("Encodeur OGG Bass fonctionne.", #LOG_DEMARRAGE)
EndIf

  ;BASS_Encode_CastInit(handle.l, server.p-utf8, pass.p-utf8, content.p-utf8, name.p-utf8, url.p-utf8, genre.p-utf8), desc.p-utf8, headers.p-utf8, bitrate.l, pub.l)
;  BASS_Encode_CastInit(HENCODE_encoder, NomServeur$, MotDePasse$, Content$, #BASS_ENCODE_TYPE_OGG, Nom$, "url", "genre", #Null, #Null, 128, #Null) // start the cast
  Retour = BASS_Encode_CastInit(HENCODE_encoder, NomServeur, MotDePasse, #BASS_ENCODE_TYPE_OGG, Nom, Url , Genre, Description, Header, 192, 1) ; débute le cast
  
  If Retour = 1
    Ajouter_au_log ("Connecté au serveur IceCast.", #LOG_DEMARRAGE)
  Else  
    Select BASS_ErrorGetCode() 
      Case #BASS_ERROR_BUSY
        MessageRequester ("Erreur","Le serveur IceCast est déja occupé !")
       Default 
         MessageRequester ("Erreur","Connection serveur IceCast Erreur : " + BASS_ErrorGetCode())
    EndSelect
  EndIf
  
 EndProcedure
J'ai du son dans mon casque, le vst StereoTool s'ouvre dans une nouvelle fenêtre, la connexion avec le serveur IceCast semble être ok. Mais je n'ai pas de son casté au final. Dans StereoTool, je n'ai pas d'activité.
Il doit me manquer quelquechose au niveau du routage du son...
Si l'un d'entre vous à déja travaillé sur le sujet... ou voit quelquechose de flagrant dans ce code qui m'échappe...
Merci beaucoup.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Librarie BASS vers un serveur IceCast

Message par Ar-S »

A l'époque j'avais hésité entre Bass et Fmod mais mon choix ayant été porté vers Fmod, je n'ai aucune experience de Bass :oops:
~~~~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
hub73
Messages : 126
Inscription : sam. 16/janv./2021 20:17

Re: Librarie BASS vers un serveur IceCast

Message par hub73 »

Merci pour votre réponse. J'espère parvenir à un résultat avec l'aide du forum anglais et celui consacré à BASS. Je vous tient au courant si je parviens à faire fonctionner tout çà !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Librarie BASS vers un serveur IceCast

Message par Ar-S »

Oui avec plaisir
~~~~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
hub73
Messages : 126
Inscription : sam. 16/janv./2021 20:17

Re: Librarie BASS vers un serveur IceCast

Message par hub73 »

Avec l'aide des codeurs du forum anglais de purebasic et de la librairie de Bass :

Code : Tout sélectionner

Procedure.s StringToANSI(s.s)

	#AutoLength=-1
	Protected buffer.s
	buffer=Space(StringByteLength(s,#PB_Ascii))
	PokeS(@buffer,s,#AutoLength,#PB_Ascii)

	ProcedureReturn buffer

EndProcedure
Procedure Son_desactiver_vst()
  
  BASS_VST_ChannelRemoveDSP(gParametres\Channel_cast, gParametres\FDSP)
  CloseWindow (WindowID(Window_vst))
  
EndProcedure  

Procedure Son_activer_vst()
  
  Protected NomVst.s
  
  NomVst = "C:\Users\user\Documents\radio_programmation_purebasic_broadcast\vst_stereo_tool_64.dll"
  gParametres\FDSP  = BASS_VST_ChannelSetDSP(gParametres\Channel_cast, @NomVst, #BASS_Unicode, 0);
  ;; panel should To be  a second form Or in the Mainform remember the Sterotool Editor is Not small
   OpenWindow_vst(0,0)
  BASS_VST_EmbedEditor(gParametres\FDSP, WindowID(Window_vst))  
  ;BASS_VST_SetScope(FDSP, 0)  
  
EndProcedure

Procedure.l RecordingCallBack(Channel.l, *buffer, length.f, user.f)
  
  Protected Result.l
  
  Result = BASS_Encode_IsActive(Channel); //  <> 0 continue recording if encoder is live
  
  ;BASS_ChannelGetData(Channel.l, *buffer, length.f)
  BASS_Encode_Write(Channel.l,*buffer,length.f)
  
  ProcedureReturn Result
  
EndProcedure

Procedure Son_fermer_cast()
  
  BASS_Encode_Stop (gParametres\Channel_cast)
  
EndProcedure


Procedure EncoderNotify(Enchandle.l, status.l, user.f)
  
  If status < $10000
    Ajouter_au_log ("Encodeur, Serveur déconnectés", #LOG_ERREUR)
    Son_fermer_cast()
    Son_envoyer_vers_serveur()
  EndIf
  
EndProcedure


Procedure Son_envoyer_vers_serveur()
  
  Protected HENCODE_encoder.l
  Protected NomServeur.s 
  Protected MotDePasse.s
  Protected Nom.s
  Protected Url.s
  Protected Genre.s  
  Protected Description.s
  Protected Header.s
  Protected Commande.s
  
  Protected Retour
  
  NomServeur = StringToANSI("146.59.233.129:8000/floralies.ogg") ; address:port/mount" (Icecast).
  MotDePasse = StringToANSI("source:*****")
  Nom = StringToANSI("Radio Les Floralies 2")
  Url = StringToANSI("http://lesfloralies.ovh:8000/floralies.ogg")
  Genre = StringToANSI("other")
  Description = StringToANSI ("Webradio à Castelnaudary France")
  Header = StringToANSI("")
  
  Retour = BASS_RecordInit(gParametres\Dispositif_sonore)
  If Retour = 0
   MessageRequester ("Erreur","RecordInit : " + BASS_ErrorGetCode()) 
  EndIf
  
  Retour = BASS_RecordSetDevice(gParametres\Dispositif_sonore)
  If Retour = 0
   MessageRequester ("Erreur","RecordSetDevice : " + BASS_ErrorGetCode()) 
  EndIf
  
  gParametres\Channel_cast = BASS_RecordStart (48000, 2, #BASS_RECORD_PAUSE | #BASS_SAMPLE_FLOAT, @RecordingCallback(), #Null);)
  
  If gParametres\Channel_cast = 0
    MessageRequester ("Erreur","RecordStart : " + BASS_ErrorGetCode()) 
  EndIf  
  
  Son_activer_vst()
  
  Protected Options.s
  Options = StringToANSI("--bitrate 192")
  
  HENCODE_encoder = BASS_Encode_Ogg_Start(gParametres\Channel_cast, @options, #BASS_UNICODE | #BASS_ENCODE_AUTOFREE, #Null, #Null); // setup the encoder
 
  If HENCODE_encoder = 0
    MessageRequester ("Erreur","Erreur de l'encodeur OGG Bass : " + BASS_ErrorGetCode())
  Else
    Ajouter_au_log ("Encodeur OGG Bass fonctionne. ("+ Str(HENCODE_encoder) + ")", #LOG_DEMARRAGE)
  EndIf
  
  Protected Content.s
  
  Content = StringToANSI (#BASS_ENCODE_TYPE_OGG)
  
  Retour = BASS_Encode_CastInit(HENCODE_encoder, @NomServeur, @MotDePasse, @content, @Nom, @Url , @Genre, @Description, @Header, 0, 0) ; débute le cast
  
  If Retour = 1
    Ajouter_au_log ("Connecté au serveur IceCast. (" + Str(Retour) + ")", #LOG_DEMARRAGE)
  Else  
    Select BASS_ErrorGetCode() 
      Case #BASS_ERROR_BUSY
        MessageRequester ("Erreur","Le serveur IceCast est déja occupé !")
       Default 
         MessageRequester ("Erreur","Connection serveur IceCast Erreur : " + BASS_ErrorGetCode())
    EndSelect
  EndIf
  
  BASS_ChannelPlay(gParametres\Channel_cast, 0)
  
  BASS_Encode_SetNotify(HENCODE_encoder, @EncoderNotify(), 0)
  
EndProcedure
Et finalement celà fonctionne, après une semaine de recherches ! Et en plus avec le VST StereoTool !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Librarie BASS vers un serveur IceCast

Message par Ar-S »

Merci je testerai ça à l'occase.
~~~~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
hub73
Messages : 126
Inscription : sam. 16/janv./2021 20:17

Re: Librarie BASS vers un serveur IceCast

Message par hub73 »

Dans tous les cas, l'intégration de la librairie BASS dans un programme Purebasic fonctionne très bien. La documentation est très bien faite et à jour. Je trouve l'intégration de FMOD plus hasardeuse, avec moins de possibilités. L'inclusion d'un VST avec Bass est très simple. La connexion avec IceCast fonctionne bien. Le forum d'aide est assez réactif aussi. Le tout était de trouver les bons exemples et réussir à bien convertir en PB.

Je suis vraiment content, mon programme écrit en Purebasic intègre la lecture des morceaux de musique, de l'automation, une traçabilité via une bdd et des logs, il se relance s'il plante, met à jour les informations sur le site de la webradio. Le son est traité par le vst StereoTool intégré, puis le tout est envoyé au serveur Icecast.

Toujours en Purebasic, un cartoucheur qui est capable d'intégrer également des interventions voix dans une playliste, propose un prompteur. Egalement un autre logiciel de gestion des phonogrammes et des informations du site web dynamique.

Tout ceci n'existerait pas non plus sans l'aide que j'ai pu trouver ici. Grand merci à tous.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Librarie BASS vers un serveur IceCast

Message par Ar-S »

Bravo à toi, ça a l'air hyper complet.
~~~~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