Fichier ogg en lecture.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Fichier ogg en lecture.

Message par bloiiing »

Bonjour,

J'ai un petit programme qui me sert à déclencher un enregistrement .ogg en lecture à une heure donnée. Ici à 4h00 du matin, pendant mon sommeil. La lecture se déclenche bien à 30 secondes près, mais elle s'arrête au bout de 5 à 6 minutes environ. Je n'arrive pas à comprendre pourquoi le fichier ne se lit pas jusqu'au bout. Il fait environ 25 minutes. Est-ce que quelqu'un voit pourquoi?

Voici le code, il n'est pas long:

Code : Tout sélectionner

If InitSound() = 0

  MessageRequester("Error", "Sound system is not available",  0)

  End

EndIf



;Début du programme

delai.l = 30000

Volume.b = 75

OpenWindow(0, 300, 300, 230, 30, "Meditation software")

Alarm = ParseDate("%yy/%mm/%dd/%hh/%ii", "11/12/14/04/00");Réglage de la date et de l'heure de déclenchement du fichier .ogg

Repeat

  Delay( delai )

Until Alarm <= Date()

;SoundFileName$ = OpenFileRequester("Choose a .ogg file", "", "OGG|*.ogg", 0)

SoundFileName$ = "D:\Chris2.ogg"

If SoundFileName$

  UseOGGSoundDecoder()

  If LoadSound(0, SoundFileName$)

    Canal = PlaySound(0, #PB_Sound_MultiChannel, 1)

    SoundVolume(0, Volume, Canal)

    WEvent = WindowEvent()

    If WEvent = #PB_Event_CloseWindow

      StopSound(0, Canal)

      End

    EndIf

    MessageRequester("Sound", "Playing the sound..."+#LF$+"Click to quit..", 0)

  Else

    MessageRequester("Error", "Can't load the sound.", 0)

  EndIf

EndIf

End
Merci d'avance.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fichier ogg en lecture.

Message par Ar-S »

Je n'ai pas de fichiers assez long pour tester mais j'ai ajouté un thread pour ne pas "freezer ta fenêtre".
L'heure s'affiche jusqu'à l'heure souhaité.
Tu dois modifier heureAlarme$ et SoundFileName$

Code : Tout sélectionner

; Alarme par Ar-S / 14-12-2011
; Lancement d'un fichier OGG à une heure précise.
; PB 4.51

InitSound()

Enumeration
  #Win
  #BT
  #AFF
  #T
EndEnumeration
Global Value,threadoff,heureAlarme$,SoundFileName$
threadoff = 0

; ---- ELEMENTS A MODIFIER
heureAlarme$ = "17:39:10"
Global SoundFileName$ = "F:\MUSIQUE_ET_SON\MP3\Bitmap_Brother_mix.ogg"
; --------------------------
  

Procedure ThreadMessage(*ARS)
  Repeat
    Shared SoundFileName$
    DateDirect$ = FormatDate("%hh:%ii:%ss", Date())
    SetGadgetText(#AFF, DateDirect$)
    
    If DateDirect$ = heureAlarme$
      UseOGGSoundDecoder()
      If LoadSound(0, SoundFileName$, #PB_Sound_Streaming)
        PlaySound(0, #PB_Sound_MultiChannel, 75)
      EndIf

      threadoff = 0
    EndIf
    Delay(1000) ; 1 seconde
  Until threadoff = 0
EndProcedure

Procedure OpenWindow_WIN()
  If OpenWindow(#Win, 450, 200, 400, 140, "test thread", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    ButtonGadget(#BT, 5, 95, 390, 40, "Quitter")
    StringGadget(#AFF, 5, 5, 390, 30, "",#ES_CENTER)
 
    If threadoff = 0
      threadoff + 1
      thread=CreateThread(@ThreadMessage(),ARS)
      
    Else 
      threadoff - 1
    EndIf
    
  EndIf
EndProcedure

OpenWindow_WIN()

Repeat
  Select WaitWindowEvent()
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #BT
          threadoff = 0
          End
      
          Case #AFF
      EndSelect
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Win
          CloseWindow(#Win)
          threadoff = 0
          Break
      EndSelect
  EndSelect
ForEver

~~~~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
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Re: Fichier ogg en lecture.

Message par bloiiing »

Ca ne marche pas et je ne sais pas pourquoi. Peut-être parce qu'il lit un son dans un thread?

J'ai enlevé l'option #PB_Sound_Streaming car le son ne se loadait pas sinon.

Merci de ta réponse.
Avatar de l’utilisateur
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Re: Fichier ogg en lecture.

Message par bloiiing »

J'ai rajouté la ligne suivante après la fonction PlaySound():

Code : Tout sélectionner

MessageRequester("Sound", "Playing the sound (loop)..."+#LF$+"Click to quit..", 0)
Et ça lit le son pendant 5 minutes et ça s'arrête ensuite. En fait, dans ton exemple, il lit le son et passe tout de suite à l'instruction suivante. Il n'attend pas que le son soit fini de jouer....

Je ne sais pas comment faire pour lire un son jusqu'à sa fin.

A+
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fichier ogg en lecture.

Message par Ar-S »

Laisse la lecture dans le thread mais ajoute un Delay (xxx) ou xxx représente la durée du morceau en MS après le playsound()
~~~~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
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Re: Fichier ogg en lecture.

Message par bloiiing »

En fait, je viens de remettre l'option:

Code : Tout sélectionner

#PB_Sound_Streaming
et avec la boite d'alerte ça marche. Mais je ne comprend pas pourquoi. J'ai essayé sur 8 minutes, ça a largement passé le cap des 5 minutes. Je verrai plus tard si le fichier passe entièrement, sinon je ferai ce que tu préconises, à savoir ajouter un delay(). Mais je ne sais pas comment récupérer la durée d'un fichier ogg. Je ne me suis pas encore penché sur la question. Je chercherai dans la doc, mais pour l'instant la boite d'alerte me convient.

Merci pour le petit programme qui est beaucoup plus joli que le mien. :)

A+
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fichier ogg en lecture.

Message par Ar-S »

Je ne pensais pas que tu irais chercher la durée d'un ogg via PB (je ne sais pas si c'est possible), je pensais que tu convertirais simplement la durée en ms que du dois connaitre vu que tu as le CD ;)

Sinon je suis en plein dans ce style de manip mais j'utilise Fmodex. C'est une très bonne lib permettant de jouer plein de formats audios et bien plus encore. L'avantage, c'est qu'on peut aussi récupérer la durée, noter le positionnement de la lecture etc...
Par contre je ne la trouve pas simple à utiliser (je galère pas mal depuis hier mais ça prend forme).
Tu peux récupérer le code fmodex.pbi à inclure dans ton code ici :
http://www.purearea.net/pb/CodeArchiv/M ... FModEx.pbi

Tu trouveras d'autres codes intéressant ici : http://www.purearea.net/pb/CodeArchiv/French.html#14

Je précise que je suis en PB 4.51 pour mon player car j'ai pas testé Fmod sur 4.60
~~~~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