n'ayant pas trouvé un code qui joue un son sur les 3 principaux O.S (Windows, unix, macos) en utilisant les services media de O.O L.O, je vous propose un module son qui contient deux procédures :
Une qui permet de jouer un son ou une musique à partir d'un fichier audio.
Code : Tout sélectionner
JouerSon(LeSon As String)
Une qui permet de jouer un son qui se trouve dans la galerie sons de O.O, L.O (ex : train.wav)
Code : Tout sélectionner
JouerSonGalerie(LeSon As String)
Pour pouvoir utiliser le service média adéquat il faut que le code détecte l'O.S sur lequel il est exécuté. J'utilise la fonction de LibreOfficiant OSName :
Code : Tout sélectionner
Function OSName As String
''' Return platform name as "MAC", "UNIX", "WIN" '''
' LibreOfficiant 05/2019
With GlobalScope.Basiclibraries
If Not .IsLibraryLoaded("Tools") Then .LoadLibrary("Tools")
End With
Dim keyNode As Object ' com.sun.star.configuration.ConfigurationAccess '
keyNode = Tools.Misc.GetRegistryKeyContent("org.openoffice.Office.Common/Help")
OSName = keyNode.GetByName("System")
' inferred from "Tools.UCB.ShowHelperDialog" '
End Function ' (Tools).OSName
com.sun.star.media.Manager_DirectX pour Windows
com.sun.star.comp.media.Manager_GStreamer pour Unix (nécessite que la bibliothèque Gstreamer soit installée dans l'O.S)).
com.sun.star.media.Manager_MacAVF pour Macos (difficile à trouver celui-là : je n'ai pas trouvé sur internet de code qui l'utilise).
L'objet player est en variable globale pour éviter qu'il soit détruit à la fin de la procédure où il est utilisé. Si on le déclare dans une procédure, il faut attendre que le son soit joué avant de terminer la procédure (par une boucle testant l'état du player). Cela empêche de lancer une autre macro. Avec l'objet player en variable globale, le son est joué en arrière plan.
En pièce jointe un classeur contenant deux modules.
1 - Le module ModSonJP son décrit précédemment.
2 - Un module ModTestSonJP qui permet de tester les deux procédures du module Son.
Dans le classeur il y a deux boutons et une combobox :
La Combobox est chargée à l'activation du document, avec la liste des sons disponibles dans la galerie de sons, par la macro ListerSonsGalerie du module ModTestSonJP.
Le premier bouton permet de jouer le fichier qui se trouve dans la cellule A1 par la macro CmdJouerSonA1 du module ModTestSonJP.
Le deuxième bouton permet de jouer le fichier choisi dans la combobox par la macro CmdJouerSonGalerie du module ModTestSonJP.
Testé sous Windows 10 avec LibreOffice 7.3.4.2 et OpenOffice 4.1.13
sous Ubuntu 20.04 avec LibreOffice 7.3.4.2
sous Macos Catalina 10.15 "Virtuel" avec OpenOffice 4.1.12 ( à confirmer que cela fonctionne avec un "vrai" Mac)
Ami calmant, J.P