Afficher une forme d'onde d'un fichier ogg.
Afficher une forme d'onde d'un fichier ogg.
Bonjour à tous.
Afin d'améliorer notre logiciel webradio de diffusion maison, ce serait cool de pouvoir travailler plus finement sur les transitions de fichiers sonores lus.
D'ou l'idée de pouvoir afficher la forme d'onde d'un fichier sonore au format OGG, pour faciliter le choix de positionnement d'un 'fade in ou fade out'. Egalement positionner un marqueur pour indiquer à l'animateur quand commence le chant (pour éviter qu'il parle dessus). Cela dans le logiciel d'édition de la playliste de la webradio, antérieur à celui de diffusion, si le code de génération de la forme d'onde est un peu lent, ce n'est pas trop grave.
pour vous donner une idée : https://www.radiodj.ro/wp-content/uploa ... editor.png
Je recherche sur les forums mais je ne trouve rien. Peut être est-t-il temps de passer via une librairie tierce genre FMOD ou BASS ?
D'ailleurs pensez vous que çà vaille le coup d'utiliser FMOD ou BASS en 'inclusion' du code purebasic pour lire les sons plutôt que la librairie 'sound' interne ?
Merci à vous. Notre webradio associative vous remercie de toute l'aide que vous nous apportez, cela à fait avancer le projet.
http://www.radiolesfloralies.fr
Afin d'améliorer notre logiciel webradio de diffusion maison, ce serait cool de pouvoir travailler plus finement sur les transitions de fichiers sonores lus.
D'ou l'idée de pouvoir afficher la forme d'onde d'un fichier sonore au format OGG, pour faciliter le choix de positionnement d'un 'fade in ou fade out'. Egalement positionner un marqueur pour indiquer à l'animateur quand commence le chant (pour éviter qu'il parle dessus). Cela dans le logiciel d'édition de la playliste de la webradio, antérieur à celui de diffusion, si le code de génération de la forme d'onde est un peu lent, ce n'est pas trop grave.
pour vous donner une idée : https://www.radiodj.ro/wp-content/uploa ... editor.png
Je recherche sur les forums mais je ne trouve rien. Peut être est-t-il temps de passer via une librairie tierce genre FMOD ou BASS ?
D'ailleurs pensez vous que çà vaille le coup d'utiliser FMOD ou BASS en 'inclusion' du code purebasic pour lire les sons plutôt que la librairie 'sound' interne ?
Merci à vous. Notre webradio associative vous remercie de toute l'aide que vous nous apportez, cela à fait avancer le projet.
http://www.radiolesfloralies.fr
Re: Afficher une forme d'onde d'un fichier ogg.
Je tente de remplacer dans mon code les commandes de la librairie interne 'sound' par celles de FMOD.
(https://github.com/pbcodex/FMODEX)
Savez-vous quelle commande FMOD remplace :
if IsSound (Son) <> 0
et
SoundStatus(Son)
?
Merci.
Code initial :
(https://github.com/pbcodex/FMODEX)
Savez-vous quelle commande FMOD remplace :
if IsSound (Son) <> 0
et
SoundStatus(Son)
?
Merci.
Code initial :
Code : Tout sélectionner
If IsSound (gSonLu) <> 0
Select SoundStatus(gSonLu)
Case #PB_Sound_Stopped
Phrase$ = Phrase$ + " Son arrêté "
Case #PB_Sound_Playing
Position = GetSoundPosition(gSonlu, #PB_Sound_Millisecond)
TempsTotal = SoundLength(gSonlu, #PB_Sound_Millisecond)
Phrase$ = Phrase$ + "Lecture en cours : " + Convertion_affichage_temps(Position) + " - Total : " + Convertion_affichage_temps(TempsTotal) + " - " + "Reste : " + Convertion_affichage_temps(TempsTotal-Position)
Case #PB_Sound_Paused
Position = GetSoundPosition(gSonlu, #PB_Sound_Millisecond)
TempsTotal = SoundLength(gSonlu, #PB_Sound_Millisecond)
Phrase$ = Phrase$ + "Lecture en pause : " + Convertion_affichage_temps(Position) + " - Total : " + Convertion_affichage_temps(TempsTotal) + " - " + "Reste : " + Convertion_affichage_temps(TempsTotal-Position)
EndSelect
EndIf
Re: Afficher une forme d'onde d'un fichier ogg.
Bonjour,
Falsam a donner un lien pour utiliser fmod / PB. Je sais qu'il y a des exemples fourni. Mais afficher l'onde directement avec PB, je ne sais pas si ça a déjà était fait.
Je sais qu'à l'époque zapman avait commencé un soft de musique. A voir sur le forum Français ou anglais.
@++
Falsam a donner un lien pour utiliser fmod / PB. Je sais qu'il y a des exemples fourni. Mais afficher l'onde directement avec PB, je ne sais pas si ça a déjà était fait.
Je sais qu'à l'époque zapman avait commencé un soft de musique. A voir sur le forum Français ou anglais.
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Afficher une forme d'onde d'un fichier ogg.
Merci Venom. J'ai testé SoundEditor de Zapman. Un éditeur de Son, cela fonctionnait avec des fichier WAV. Le Ogg semble plus difficile à analyser. J'ai effectué des recherches toute l'après midi et je n'ai rien trouvé de probant à exploiter. Donc je vais renoncer.
Re: Afficher une forme d'onde d'un fichier ogg.
Ah merci du nom. C'était ça
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Afficher une forme d'onde d'un fichier ogg.
Bonjour,
j'avais fait ça avec le fmodex(short).pbi il y a un moment, je te mets l'extrait du code si ça peut aider,
j'avais fait ça avec le fmodex(short).pbi il y a un moment, je te mets l'extrait du code si ça peut aider,
Code : Tout sélectionner
FMOD_System_Create(@fmodsystem)
FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)
File.s = "myfile.mp3"
Dim WaveArray.f(1024)
FMOD_System_CreateStream(fmodsystem, @File, #FMOD_SOFTWARE, 0, @sound)
FMOD_System_PlaySound(fmodsystem, #FMOD_CHANNEL_FREE, sound, 0, @channel)
;----MainLoop---------------------------------------------------------------
Repeat
event=WindowEvent()
FMOD_Channel_GetWaveData(Channel, WaveArray(), 1024, 0)
StartDrawing(CanvasOutput(#spectrum))
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0, 1026, 500,0)
DrawingMode(#PB_2DDrawing_Default)
For i=1 To 1024
YOldWave=(WaveArray(i-1)+1)*250
YCurrentWave=(WaveArray(i)+1)*250
LineXY(i-1,YOldWave,i,YCurrentWave,RGB(0,200,50))
LineXY(i-1,YOldWave+1,i,YCurrentWave+1,RGB(0,90,50))
LineXY(i-1,YOldWave-1,i,YCurrentWave-1,RGB(0,110,50))
Next
StopDrawing()
Until GetAsyncKeyState_(#VK_ESCAPE)
Re: Afficher une forme d'onde d'un fichier ogg.
Merci jmg49. J'ai testé le programme de l'oscillo et j'ai regardé son code source, c'est vraiment utile.
Par contre je ne sais pas pourquoi je ne parviens pas à faire fonctionner l'extrait ce code (modifié) pour tester. J'ai complété un peu, réalisé un formulaire avec un canvas appelé 'spectrum' . Mais aucun son et affichage se produit. (fichier ogg ou mp3). Si quelqu'un peut m'indiquer si le code suivant est correct ou pas et fonctionne pour lui (en changeant le fichier lu). Merci.
EndProcedure
Par contre je ne sais pas pourquoi je ne parviens pas à faire fonctionner l'extrait ce code (modifié) pour tester. J'ai complété un peu, réalisé un formulaire avec un canvas appelé 'spectrum' . Mais aucun son et affichage se produit. (fichier ogg ou mp3). Si quelqu'un peut m'indiquer si le code suivant est correct ou pas et fonctionne pour lui (en changeant le fichier lu). Merci.
Code : Tout sélectionner
XIncludeFile "formulaire_onde.pbf"
IncludeFile "fmodex(short).pbi"
Global fmodsystem.i, Channel.i, Sound.i, Volume.f = 0.5, PauseStatus.b,Analyse,Mutex,Length.i,Name.s,CurrentPos.i
Global File.s,thBSWContinue,PinState
FMOD_System_Create(@fmodsystem)
FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)
File.s = "C:\Users\Borne\Documents\Developpement\radio_programmation_purebasic\prod01.mp3"
Dim WaveArray.f(1024)
;----MainLoop---------------------------------------------------------------
OpenWindow_0 (0,0)
FMOD_System_CreateStream(fmodsystem, @File, #FMOD_SOFTWARE, 0, @sound)
FMOD_System_PlaySound(fmodsystem, #FMOD_CHANNEL_FREE, sound, 0, @channel)
FMOD_Channel_SetVolume(Channel, 1.0)
Repeat
event=WindowEvent()
FMOD_Channel_GetWaveData(Channel, WaveArray(), 1024, 0)
StartDrawing(CanvasOutput(spectrum))
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0, 1026, 500,0)
DrawingMode(#PB_2DDrawing_Default)
For i=1 To 1024
YOldWave=(WaveArray(i-1)+1)*250
YCurrentWave=(WaveArray(i)+1)*250
LineXY(i-1,YOldWave,i,YCurrentWave,RGB(0,200,50))
LineXY(i-1,YOldWave+1,i,YCurrentWave+1,RGB(0,90,50))
LineXY(i-1,YOldWave-1,i,YCurrentWave-1,RGB(0,110,50))
Next
StopDrawing()
Until GetAsyncKeyState_(#VK_ESCAPE)
Code : Tout sélectionner
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Global Window_0
Global Spectrum
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
Spectrum = CanvasGadget(#PB_Any, 10, 70, 570, 210)
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
ProcedureReturn #True
Re: Afficher une forme d'onde d'un fichier ogg.
Je n'ai aps exploré ton code, mais en attendant, ici, tu trouveras un autre exemple de spectro utilisant Fmodex
(c'est pour les webradio, mais le principe est identique))
https://www.purebasic.fr/french/viewtop ... =6&t=16135
Dans l'archive: Fmod Ex - Play Shoutcast(Add tags & Spectrum).pb
(c'est pour les webradio, mais le principe est identique))
https://www.purebasic.fr/french/viewtop ... =6&t=16135
Dans l'archive: Fmod Ex - Play Shoutcast(Add tags & Spectrum).pb
Re: Afficher une forme d'onde d'un fichier ogg.
Finalement je n'ai pas eu besoin de l'onde sonore pour déterminer le point d'entrée et de sortie lorsqu'une personne chante sur un morceau. C'est aussi bien à l'oreille. Par contre j'ai bien examiné le code et j'ai pu inclure un visuel dans le programme de diffusion de la webradio qui utilise maintenant FMOD. Trop bien, merci encore !