[Résolu][Basic] Contrôle du lecteur de médias

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
hdiamant
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 20 avr. 2007 11:53
Localisation : Montpellier

[Résolu][Basic] Contrôle du lecteur de médias

Message par hdiamant »

Bonjour,

J'ai trouvé en théorie comment lire et contrôler la lecture d'un fichier media sur les pages suivantes de l'API :

http://api.openoffice.org/docs/common/r ... eatePlayer
et
http://api.openoffice.org/docs/common/r ... layer.html

Mettre en pratique la doc de l'api est bougrement difficile ! Si j'ai bien compris, il y a un module (com.sun.star.media), un service (XManager) et une méthode CreatePlayer dont l'usage parait simple.

Comment à partir de cela lancer la lecture d'un fichier?

Voici ce que j'ai essayé :

Code : Tout sélectionner

Sub Main
Dim monmedia as object

monmedia = CreateUnoService("com.sun.star.media.XManager")

Xray monmedia

monmedia.start(ConvertToURL("/mnt/prod/PRODUCTION/LesMercredis.wav"))

End Sub
Xray me renvoie que l'objet monmedia est null. Je n'arrive à aucune information sur le module media, c'est à se demander s'il existe.

Que l'API précise "NOT PUBLISHED" veut-il dire que le module "media" n'est pas accessible par Basic?

Merci par avance !
Dernière modification par hdiamant le 14 janv. 2010 10:07, modifié 4 fois.
Cordialement, H.D.
-----------------------------------------------------
Ubuntu 14.04 - LibreOffice 4.2.3.3 - MySQL
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26064
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Controle du mediaplayer

Message par Dude »

hdiamant a écrit :Si j'ai bien compris, il y a un module (com.sun.star.media), un service (XManager)
Ouaip sauf que pour une raison qui m'échappe le Wiki est faux. Le nom du service semble être différent pour cause de plateforme :
- com.sun.star.media.Manager_DirectX pour Windows
et
- com.sun.star.media.Manager_Java pour les autres

hdiamant a écrit :et une méthode CreatePlayer dont l'usage parait simple
Simple mais je ne vois pas dans ton code où tu crées le fameux lecteur.

Voici une procédure qui fonctionne sous Windows XP

Code : Tout sélectionner

Sub JoueUnSon
	' Du code offert par le forum francophone OpenOffice.org
	' http://user.services.openoffice.org/fr
	oSon = "file:///P:/test_ooo/dude_zik.wav" ' Le son à charger
	oManager = CreateUnoService("com.sun.star.media.Manager_DirectX")
	oLecteur = oManager.createPlayer( oSon )
	oLecteur.start() ' Je joue le son
	wait 5000 ' J'attends 5 sec.
	oLecteur.stop() ' et je coupe le son
End Sub
8)
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
hdiamant
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 20 avr. 2007 11:53
Localisation : Montpellier

Re: [Basic] Controle du mediaplayer

Message par hdiamant »

Merci Dude,

J'ai essayé le code suivant qui est une adaptation de ton code à mon environnement mais sans succès. Xray trouve un "Object Null" et donc impossible d'appliquer la méthode CreatePlayer.

Code : Tout sélectionner

Sub Main
Dim oManager as object, oLecteur as object, oSon as string
oSon =  ConvertToURL("/mnt/prod/PRODUCTION/LesMercredis.wav")

oManager = CreateUnoService("com.sun.star.media.Manager_Java")

xray oManager

oLecteur = oManager.createPlayer( oSon )
oLecteur.start()

End Sub
J'ai tenté Xray sur un poste windows et sur lequel ta macro fonctionne à merveille et il apparait que le nom interne de l'objet d'origine est com.sun.star.comp.avmedia.Manager_DirectX.
Dernière modification par hdiamant le 07 janv. 2010 15:19, modifié 1 fois.
Cordialement, H.D.
-----------------------------------------------------
Ubuntu 14.04 - LibreOffice 4.2.3.3 - MySQL
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26064
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Controle du mediaplayer

Message par Dude »

On rappelle que l'aide F1 stipule :
Sur les systèmes UNIX, l'application Lecteur de médias requiert l'API Java Media Framework (JMF). Téléchargez et installez les fichiers JMF et ajoutez le chemin vers le jmf.jar installé au chemin de la classe sous Outils - Options - OpenOffice.org - Java.
Ta JMF est-elle à jour ?

:?:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
hdiamant
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 20 avr. 2007 11:53
Localisation : Montpellier

Re: [Basic] Contrôle du lecteur de médias

Message par hdiamant »

Ta JMF est-elle à jour ?
Je pense qu'elle l'est puisque j'arrive à lire des fichiers audio et vidéo en passant par le lecteur dans Outils/Lecteur de médias.

à tout hasard, j'ai refait l'installation en suivant l'aide ici : http://wiki.services.openoffice.org/wik ... _Framework

Mais j'en suis toujours au même stade : Xray me renvoie Object Null
Cordialement, H.D.
-----------------------------------------------------
Ubuntu 14.04 - LibreOffice 4.2.3.3 - MySQL
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26064
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Contrôle du lecteur de médias

Message par Dude »

hdiamant a écrit :Je pense qu'elle l'est
...
Mais j'en suis toujours au même stade : Xray me renvoie Object Null
Donc, elle ne l'est pas. As-tu un chemin de classe vers le jmf.jar ?

Je viens de faire le test sous une Fedora 12 avec la version 3.1.1 officielle et le JMF 2.1.1e. Le service Manager_Java fonctionne et j'entends de la musique avec une macro.
fed_jmf.png
8)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
hdiamant
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 20 avr. 2007 11:53
Localisation : Montpellier

Re: [Basic] Contrôle du lecteur de médias

Message par hdiamant »

J'ai remplacé la version ubuntu d'open office par la version officielle et eurêka, il y a du son.

En revanche, je ne parviens pas à faire jouer et arrêter le son à ma guise. J'ai essayé, non sans naïveté, ces macros avec des variables publiques.

Code : Tout sélectionner

Sub JoueUnSon
	oSon =  ConvertToURL("/mnt/prod/PRODUCTION/LesMercredis.wav")	
	oManager = CreateUnoService("com.sun.star.media.Manager_Java")
	oLecteur = oManager.createPlayer( oSon )
	oLecteur.start()
End Sub

Sub StopUnSon
	oLecteur.stop()
End Sub

Sub RePlayUnSon
	oLecteur.stop()
End Sub
Cela ne fonctionne pas.

Comme mon projet est d'écrire à partir d'un fichier multimédia sur lequel je devrai effectuer un certain nombre d'opérations comme start, pause, obtenir le time code, je me demande s'il ne faut pas que je m'oriente vers un listener et l'attribution des fonctions voulues à certaines touches.

Est-il possible de créer un listener pour certaines touches seulement, tout en laissant libre l'accès du clavier ?

Merci

Est-ce que j'ai manqué quelque chose?
Cordialement, H.D.
-----------------------------------------------------
Ubuntu 14.04 - LibreOffice 4.2.3.3 - MySQL
hdiamant
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 20 avr. 2007 11:53
Localisation : Montpellier

Re: [Basic] Contrôle du lecteur de médias

Message par hdiamant »

Le code suivant fonctionne et me permet d'ouvrir un son, de faire pause, d'avancer ou de reculer en utilisant les touches F6, F7 et F8 et c'est presque tout ce que je désirai faire. Merci !

Code : Tout sélectionner

Sub AddKeyHandler
oKeyHandler = CreateUnoListener("KeyHandler_","com.sun.star.awt.XKeyHandler")
thisComponent.currentController.addKeyHandler(oKeyHandler)
End Sub

function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean
KeyHandler_keyPressed = false 
	with oLecteur
	Select case oKeyEvent.keycode
	case 772:
	if .isPlaying(oSon) Then  .stop(oSon) Else .start(oSon)
	KeyHandler_keyPressed = True	
	case 773:
	KeyHandler_keyPressed = True	
	.setmediatime(.getmediatime() -3)
	case 774:
	KeyHandler_keyPressed = True	
	.setmediatime(.getmediatime() +3)
	end select
	end with
end function

Function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) As Boolean
KeyHandler_keyReleased = False
End Function

Sub KeyHandler_disposing
End Sub

Sub RemoveKeyHandler
thisComponent.currentController.removeKeyHandler(oKeyHandler)
End Sub
Le seul hic, c'est que pour maintenir la macro du son ouverte je suis incapable d'ouvrir une fenêtre du player. Du coup, j'utilise un print que je ferme à la fin, lorsque j'ai fini mon travail.

Je vais ouvrir un nouveau sujet sur ce point.

Un grand merci à Dude pour son aide précieuse !
Cordialement, H.D.
-----------------------------------------------------
Ubuntu 14.04 - LibreOffice 4.2.3.3 - MySQL