I am writing a game in OpenOffice Calc and would like to play various MP3 Sounds when the user wins with a certain score level. Anyone have a Macro to trigger a specific MP3 Audio file? I tried inserting an MP3 Audio file, Then using record macro to see what happened when I clicked the PLAY arrow when I high lighted the Audio Icon, but the macro never recorded commands for selecting the Icon, nor clicking the Play botton that appeared at the bottom.
Also, The INSERT Audio-Video command just adds a link to the MP3 File. If I throw out the MP3 file, the button no longer works. I would like to attach the MP3 Audio files to my Calc Workbook, so the sounds would play and I would not have to provide the separate MP3 files along with my application.
[Solved] Calc Macro to play an MP3 Audio File.
[Solved] Calc Macro to play an MP3 Audio File.
Last edited by MrProgrammer on Sat Sep 03, 2022 6:32 pm, edited 1 time in total.
Reason: Tagged ✓ [Solved] -- MrProgrammer, forum moderator
Reason: Tagged ✓ [Solved] -- MrProgrammer, forum moderator
OpenOffice 4.1.14 on Mac Catalina(10.15.7), RasPi4B (TwisterOS-8/2023update) & MS Wnds10
Re: Calc Macro to play an MP3 Audio File.
I have made a tetris like game on Calc with simple sound effect and I used the following macro to play wav file: I do not know the manager name for Mac OS X environment but it would be found in the list of availabled service names. And see API doc for css.media.Manager service about the service.
Code: Select all
Sub InitSounds()
If GetGuiType() = 1 Then
oSounMgr = CreateUnoService("com.sun.star.media.Manager_DirectX")
Else
oSounMgr = CreateUnoService("com.sun.star.media.Manager_GStreamer")
End If
If NOT IsNull(oSounMgr) Then
oSfa = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
sBaseURL = CreateUnoService("com.sun.star.util.PathSubstitution")._
substituteVariables("$(inst)/share/gallery/sounds", True)
sSound1 = sBaseURL & "/laser.wav"
If oSfa.exists(sSound1) Then
oPlayer1 = oSounMgr.createPlayer(sSound1)
'oPlayer1.setRate(1.1)
oPlayer1.setPlaybackLoop(False)
oPlayer1.setMediaTime(0.0)
oPlayer1.setVolumeDB(GetSoundVolume())
End If
End If
End Sub
Sub PlayJoin()
If NOT IsNull(oPlayer1) Then
oPlayer1.setMediaTime(0.0)
oPlayer1.start()
End If
End Sub
Please, edit this thread's initial post and add "[Solved]" to the subject line if your problem has been solved.
Apache OpenOffice 4-dev on Xubuntu 14.04
Apache OpenOffice 4-dev on Xubuntu 14.04
-
- Posts: 1
- Joined: Wed Aug 19, 2015 9:52 pm
Re: Calc Macro to play an MP3 Audio File.
Thanks for the code. Surprisingly, on my Ubuntu 15.04 and LibreOffice 4.4.2.2., the UNO call had changed:
oSounMgr = CreateUnoService("com.sun.star.comp.media.Manager_GStreamer")
old: com.sun.star.media.Manager_GStreamer
You wonder how I found that: There were some code comparisons old-new in Google, where these changed definitions were reported.
No other documentation available whatsoever.
Didn't check the Windows version though.
It seems that Apache is working on a new XPlayer, yet "unpublished". No Idea how to get that one to work in OO or Libreoffice. Anybody has ?
https://www.openoffice.org/api/docs/com ... layer.html
Furthermore, I streamlined the code for my purposes.
Instead of the bInit boolean, I loop the procedure through a DoEvents while the music is playing and then destroy the objects.
I also inverted the checks and implemented some warnings instead of just quitting - file check first, otherwise it is useless to create the player.
The setMediaTime does not seem to have any effect. Surprisingly, the setVolumeDB (found in Xplayer) does work! Miracles happen.
So here we go:
oSounMgr = CreateUnoService("com.sun.star.comp.media.Manager_GStreamer")
old: com.sun.star.media.Manager_GStreamer
You wonder how I found that: There were some code comparisons old-new in Google, where these changed definitions were reported.
No other documentation available whatsoever.
Didn't check the Windows version though.
It seems that Apache is working on a new XPlayer, yet "unpublished". No Idea how to get that one to work in OO or Libreoffice. Anybody has ?
https://www.openoffice.org/api/docs/com ... layer.html
Furthermore, I streamlined the code for my purposes.
Instead of the bInit boolean, I loop the procedure through a DoEvents while the music is playing and then destroy the objects.
I also inverted the checks and implemented some warnings instead of just quitting - file check first, otherwise it is useless to create the player.
The setMediaTime does not seem to have any effect. Surprisingly, the setVolumeDB (found in Xplayer) does work! Miracles happen.
So here we go:
Code: Select all
REM ***** BASIC *****
option explicit
Sub Main
PlaySound("/home/archeo5/Music/arusha-findings/Drakies/Drakensberg Boys_ Choir-2009 _Hamba Nathi _.mp3")
End Sub
Sub PlaySound(i_soundpath as string)
dim oPlayer1 as object
dim sUrlSound as string
dim oSounMgr as object
' if bInit then
if not isnull(oSounMgr) then
S_Start_New
exit sub
endif
' sUrlSound = F_get_Sound_URL("MySound.mp3")
sUrlSound = "file://" & i_soundpath
If not fileexists(sUrlSound) Then
msgbox sUrlSound & " does not exist",16
else
If GetGuiType() = 1 Then
oSounMgr = CreateUnoService("com.sun.star.media.Manager_DirectX")
Else
'.comp. was not documented !!
oSounMgr = CreateUnoService("com.sun.star.comp.media.Manager_GStreamer")
' com.sun.star.media.Manager_GStreamer
End If
If IsNull(oSounMgr) Then
msgbox "Sound Mgr not set",16
else
oPlayer1 = oSounMgr.createPlayer(sUrlSound)
oPlayer1.setMediaTime(0.0)
oPlayer1.setVolumeDB(-10)
' msgbox oPlayer1.getduration()
oPlayer1.setPlayBackLoop( 0 )
oPlayer1.start(0)
while oPlayer1.isplaying()
doevents
wend
oPlayer1 = nothing
oSounMgr = nothing
msgbox "sound ended",16
End If
End If
End Sub
Ubuntu 15.04 LibreOffice 4.4.2.2.
Re: Calc Macro to play an MP3 Audio File.
I've tried using czellweger 's code above (with a different MP3), and I get an "Object variable not set" error in each of the following lines:
oPlayer1.setMediaTime(0.0)
oPlayer1.setVolumeDB(-10)
oPlayer1.setPlayBackLoop( 0 )
oPlayer1.start(0)
while oPlayer1.isplaying()
why is this ?
oPlayer1.setMediaTime(0.0)
oPlayer1.setVolumeDB(-10)
oPlayer1.setPlayBackLoop( 0 )
oPlayer1.start(0)
while oPlayer1.isplaying()
why is this ?
OpenOffice 4.1.2 on Windows XP
Re: Calc Macro to play an MP3 Audio File.
The url handling in the code is only for linux. Better replace this line:
with:
Full edited code:
Code: Select all
sUrlSound = "file://" & i_soundpath
Code: Select all
sUrlSound = ConvertToUrl(i_soundpath)
Code: Select all
Sub Main
PlaySound("E:\Musik\Allemande Buxtehude.mp3")
End Sub
Sub PlaySound(i_soundpath as string)
dim oPlayer1 as object
dim sUrlSound as string
dim oSounMgr as object
' if bInit then
if not isnull(oSounMgr) then
S_Start_New
exit sub
endif
' sUrlSound = F_get_Sound_URL("MySound.mp3")
sUrlSound = ConvertToUrl(i_soundpath)
If not fileexists(sUrlSound) Then
msgbox sUrlSound & " does not exist",16
else
If GetGuiType() = 1 Then
oSounMgr = CreateUnoService("com.sun.star.media.Manager_DirectX")
Else
'.comp. was not documented !!
oSounMgr = CreateUnoService("com.sun.star.comp.media.Manager_GStreamer")
' com.sun.star.media.Manager_GStreamer
End If
If IsNull(oSounMgr) Then
msgbox "Sound Mgr not set",16
else
oPlayer1 = oSounMgr.createPlayer(sUrlSound)
oPlayer1.setMediaTime(0.0)
oPlayer1.setVolumeDB(-10)
' msgbox oPlayer1.getduration()
oPlayer1.setPlayBackLoop( 0 )
oPlayer1.start(0)
while oPlayer1.isplaying()
doevents
wend
oPlayer1 = nothing
oSounMgr = nothing
msgbox "sound ended",16
End If
End If
End Sub
Win7 Pro, Lubuntu 15.10, LO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html
Re: Calc Macro to play an MP3 Audio File.
That's fixed it. Many thanks Musikai
OpenOffice 4.1.2 on Windows XP