Dans ce code, j'ai un problème lors du traitement, si le fichier est vide. Même s'il y a erreur (comme dans le cas où le fichier est vide), la fenêtre qui indique que c'est en cour d'enregistrement s'ouvre quand même, et ça fait tout bugger après.
Si quelqu'un pouvait me dire où est le problème dans ce code, ça me rendrait vraiment service...
Ce code requière la lib PureTTS (à moins de mettre les fonctions concernées en commentaire).
voilà le code.
Code : Tout sélectionner
EnableExplicit
#Im_x = 800
#imy = 125
#bordure = 20
Global FileName.s, FileLength, WavFile.s, Name$
Define.s Dossier, Contenu
Define VoicesList, Voice
Procedure Start() ; Est appelé lorsque l'enregistrement du fichier démarre.
If FileName And WavFile
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 800, 60, "Enregistrement de " + GetFilePart(FileName) + "...", #PB_Window_BorderLess | #WS_BORDER | #WS_SYSMENU | #WS_MINIMIZEBOX | #PB_Window_ScreenCentered, WindowID(1)) = 0 Or CreateGadgetList(WindowID(0)) = 0 Or CreateStatusBar(0, WindowID(0)) = 0
TTSStop()
MessageRequester("Erreur", "Impossible d'ouvrire la fenêtre.", #MB_ICONSTOP)
SetActiveWindow(1)
EndIf
CreateImage(1, #im_x + 2 * #bordure, 25)
LoadFont(0, "arial", 14, #PB_Font_Bold)
StartDrawing(ImageOutput(1))
DrawingFont(FontID(0))
FrontColor(RGB(50, 150, 255))
DrawingMode(1)
DrawText(50, 2, "Enregistrement de " + GetFilePart(FileName) + "...")
StopDrawing()
ImageGadget(10, 0, 0, #Im_X + 2 * #Bordure, 20, ImageID(1))
ProgressBarGadget(11, 350, 20, 100, 20, 0, 100, #PB_ProgressBar_Smooth | #PB_ProgressBar_Vertical)
GadgetToolTip(11, "0% effectués")
ButtonGadget(12, 350, 40, 100, 20, "Annuler")
AddStatusBarField(WindowWidth(0))
ResizeWindow(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(0) + StatusBarHeight(0))
DisableWindow(1, 1)
HideWindow(1, 1)
SetActiveWindow(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
TTSStop()
DeleteFile(WavFile)
FreeGadget(10)
FreeGadget(11)
FreeGadget(12)
CloseGadgetList()
FreeStatusBar(0)
CloseWindow(0)
DisableWindow(1, 0)
HideWindow(1, 0)
SetActiveWindow(1)
Case #PB_Event_Gadget
Select EventGadget()
Case 12
TTSStop()
DeleteFile(WavFile)
FreeGadget(10)
FreeGadget(11)
FreeGadget(12)
CloseGadgetList()
FreeStatusBar(0)
CloseWindow(0)
DisableWindow(1, 0)
HideWindow(1, 0)
SetActiveWindow(1)
EndSelect
EndSelect
Delay(0)
ForEver
EndIf
EndProcedure
Procedure Position(Position) ; Définit la position pour la barre de progression d'enregistrement.
If FileName And WavFile
Define Diviser, Pourcents
Diviser = FileLength / Position
Pourcents = 100 / Diviser
SetGadgetState(11, Pourcents)
GadgetToolTip(11, Str(Pourcents) + "% effectués")
StatusBarText(0, 0, Str(Pourcents) + " effectués")
EndIf
EndProcedure
Procedure Stop() ; Est appelé lorsque l'enregistrement est terminé.
If FileName And WavFile
FreeGadget(10)
FreeGadget(11)
FreeGadget(12)
CloseGadgetList()
FreeStatusBar(0)
CloseWindow(0)
DisableWindow(1, 0)
HideWindow(1, 0)
SetActiveWindow(1)
EndIf
EndProcedure
If TTSInit( @Start(), @Stop(), @Position()) = 0
MessageRequester("Erreur", "L'environement de parole n'a pas pu être initialiser.", #MB_ICONSTOP)
End
EndIf
If OpenWindow(1, #PB_Ignore, #PB_Ignore, 600, 60, "Audio Texte", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_TitleBar) = 0 Or CreateGadgetList(WindowID(1)) = 0
MessageRequester("Erreur", "Impossible d'ouvrir la fenêtre.", #MB_ICONSTOP)
End
EndIf
TextGadget(0, 0, 0, 100, 20, "Dossier :")
StringGadget(1, 100, 0, 450, 20, "")
ButtonGadget(2, 550, 0, 50, 20, "...", #PB_Button_Default)
TextGadget(3, 0, 20, 150, 20, "Voix à utiliser :")
ListViewGadget(4, 150, 20, 450, 20)
ButtonGadget(5, 0, 40, 150, 20, "Commencer", #PB_Button_Right)
ButtonGadget(6, 150, 40, 150, 20, "Quitter", #PB_Button_Left)
For VoicesList = 0 To TTSEngCount()
AddGadgetItem (4, -1, TTSEngName(VoicesList))
Next
SetActiveGadget(1)
SetGadgetState(4, 0)
SetActiveGadget(1)
TTSSpeak("La voix " + TTSEngName(0) + " est actuellement sélectionné comme voix utilisée pour l'enregistrement. Pour la changer, allez dans la liste des voix, et sélectionnez une autre voix. La voix prononcera son nom lorsque vous changerez d'élément dans la liste.")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
TTSEnd()
End
Case #PB_Event_Gadget
Select EventGadget()
Case 2
SetGadgetText(1, PathRequester("Choisissez le dossier où sont stokés les fichiers textes :", ""))
Case 4
TTSStop()
Voice = GetGadgetState(4)
Name$ = GetGadgetText(4)
TTSSelect(Voice)
TTSSpeak(Name$)
Case 5
Dossier = GetGadgetText(1)
If Dossier
If Right(Dossier, 1) <> "\" : Dossier + "\" : EndIf
If ExamineDirectory(0, Dossier, "*.txt")
SetCurrentDirectory(Dossier)
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
FileName = DirectoryEntryName(0)
If DirectoryEntrySize(0) = 0
MessageRequester("Information", "La taille du fichier '" + FileName + "' est de zéro octets. Sa conversion est donc inutile et ne sera donc pas faite.", #MB_ICONEXCLAMATION)
FileName = "\\"
Continue
EndIf
If ReadFile(0, FileName) = 0
MessageRequester("Erreur", "Impossible d'ouvrire le fichier '" + FileName + "' pour le lire. Il ne sera donc pas converti en fichier audio.", #MB_ICONSTOP)
FileName = "\\"
Continue
EndIf
If FileName <> "\\" And FileName <> ""
WavFile = ReplaceString(FileName, "txt", "wav", 1, 4)
FileLength = Lof(0)
Contenu = Space(FileLength)
ReadData(0, @Contenu, FileLength)
CloseFile(0)
TTSSpeak(Contenu, WavFile)
EndIf
EndIf
Wend
FinishDirectory(0)
MessageRequester("Information", "La conversion des fichiers est terminée.", #MB_ICONASTERISK)
Else
MessageRequester("Erreur", "Ne peut récupérer le contenu du dossier '" + Dossier + "'. Cela peut être du à l'absence de fichier de type '.txt' ou à l'inexistence de ce dossier. Si ce dossier existe, vérifiez que vous y avez accès.", #MB_ICONSTOP)
EndIf
Else
MessageRequester("Erreur", "Veuillez sélectionner le dossier où sont stoqués les fichier textes (.txt) à convertire en fichier audio.", #MB_ICONEXCLAMATION)
EndIf
Case 6
TTSEnd()
End
EndSelect
EndSelect
Delay(0)
ForEver
End
