INTERACT FORUM
More => Old Versions => JRiver Media Center 20 for Windows => Topic started by: MarkCoutinho on January 30, 2015, 07:13:31 am
-
I've got a Windows batch that opens a specific webpage every hour. I want a simple sound ("C:\Windows\Media\chimes.wav") to be played just after that page opens.
However: I'm playing music all day long with MC.
So this is what has to be done:
- add "C:\Windows\Media\chimes.wav" to "Playing now"
- play that tune
- skip to next song of the original "Playing now"
Is this possible and, if yes: how should this be done?
Thanks for your help!
-
Would the non-exclusive option work? (http://wiki.jriver.com/index.php/Exclusive_Access (http://wiki.jriver.com/index.php/Exclusive_Access)) Then your batch file could also launch the chime and MC would just continue.
-
I need answers to two questions:
* Do you need to play the sound on the same sound device that MC is using for playback? (If no, and you have an alternate sound output, and you don't care if playback continues through the chime sound, then this is easier.)
* Only if answer #1 is yes: Do you need MC to play the sound for some reason (due to volume settings or fancy DSP or something) or is it okay if the script itself plays the chime?
If the answer to both is yes, it will be difficult (without disabling exclusive access), and will probably require some more advanced scripting.
If either answer is no, then it is easy and I can write the script for you.
-
Actually, I thought of a way to do it even if both answers are yes. You'd have to make a second "chime zone" but you can do it.
It'd be easier for question two's answer to be no, though.
-
I need answers to two questions:
* Do you need to play the sound on the same sound device that MC is using for playback? (If no, and you have an alternate sound output, and you don't care if playback continues through the chime sound, then this is easier.)
Yes, because I only have one sound device
* Only if answer #1 is yes: Do you need MC to play the sound for some reason (due to volume settings or fancy DSP or something) or is it okay if the script itself plays the chime?
Yes, MC has to play it. I have MC all day long on, playing music. For that reason (in my opinion) another program is not able to take over the sound channel or play simultaneously with the music to the same output
If the answer to both is yes, it will be difficult (without disabling exclusive access), and will probably require some more advanced scripting.
If either answer is no, then it is easy and I can write the script for you.
Thanks for your time and input!
-
Yes, MC has to play it. I have MC all day long on, playing music. For that reason (in my opinion) another program is not able to take over the sound channel or play simultaneously with the music to the same output
Irrelevant. Because Exclusive Access is enabled (and it is better to have it enabled, all around), you must stop playback in MC on that device to allow the same sound output to be used for the chime.
There's no other way, other than to disable Exclusive Access. So, your choices are:
* Stop playback, play the chime, then resume playback with the next track.
* Add the chime.wav sound to the MC playlist as the next track to play (preserving the existing list), and advance to it.
Since the second option isn't easy to do with MC's command line options (so you'd have to resort to a script using MCWS or COM), I can easily write you one that does the first.
But not tonight. I'm tired. Bump this thread again tomorrow if I haven't already responded.
-
Well, the second option actually will do exactly what I want it to do. So if you'd be so kind to show me the script, I'd be very much obliged!
-
Well, the second option actually will do exactly what I want it to do. So if you'd be so kind to show me the script, I'd be very much obliged!
That's very challenging and would take a LOT of effort. So, sorry, no. You're on your own if you insist.
I can write the other one, which will work equally well.
-
How's this for an off-the-wall option:
Buy a Raspberry Pi ($35). Set it up with a speaker (<$10).
Once you've successfully opened your web page, you can send it a command to beep or play a tone. It could either be connected by USB or ethernet.
...and that way you are not mucking around with MC (just letting it play music as you want).
....although perhaps un-clicking exclusive mode is far simpler...
-
MC-Play_Sound_Resume.wsf
<package>
<job id="vbs">
<script language="VBScript">
Option Explicit
dim WshShell
'Create our handy dandy Shell object
set WshShell = WScript.CreateObject("WScript.Shell")
'Stop playback in MC
WshShell.Run "MC20.exe /Stop"
WScript.Sleep 300
'Create the WMPlayer Object
dim wmPlayer
set wmPlayer = CreateObject("WMPlayer.ocx")
'Play audio
wmPlayer.URL = "C:\Windows\Media\chimes.wav"
wmPlayer.controls.play
While wmPlayer.playState <> 1 ' 1 == stopped
WScript.Sleep 100
Wend
'Close the audio file
wmPlayer.close
'Restart MC with the next track
WshShell.Run "MC20.exe /Next"
WScript.Sleep 100
WshShell.Run "MC20.exe /Play"
</script>
</job>
</package>
Download: http://glynor.com/files/jriver/MC-Play_Sound_Resume.zip
-
That should work just fine. But, if you'd prefer to play the chime sound through MC itself (maybe for volume level reasons), the easiest method will be to:
* Import Chimes.wav into MC
* Make a second zone in MC for chime Playing (this will prevent the current Playing Now list from getting messed up).
* Instead of playing the chimes directly in the script, you'd play it in MC on this alternate zone
* After the chimes.wav has played, then switch back to the regular zone and resume, just like this one does.
However, that won't be quite as reliable because there's no easy way to tell when MC is done playing the file (which I can do with the wmPlayer control). So, you'll just have to sleep the script for 1200 ms. If you ever change the Chimes.wav out for a different length file, you'd have to modify the script, and I think it'll be a bit more fragile.
So, if you can use the one I posted above, that would probably be a better choice.
-
I was quite stupid in my answer: I meant the SECOND option would do what I wanted. So your solution is just fine.
I downloaded your wsf, but I'm not sure how to get it working.
I've written a small batch-file which opens a website. After that line I put a timer (TIMEOUT 3600, which is an hour) and your script should be started at that stage. Can I 'call' it in my batch or do I have to make a conversion/transformation before I can use it?
Thanks for your help so far!
-
The application that calls wsf files (and vbscript files too) is either cscript.exe or wscript.exe. The only difference between these two choices is that wscript.exe will show "windowed" controls if the script has anything to show, and cscript.exe shows a normal black cmd window (like a BAT file does). In this case, since my script doesn't show anything, it doesn't matter what you choose generally. I'd use wscript.exe so you don't get an extra, blank, black cmd window.
So, add this line into your BAT file where you want my script to run:
wscript.exe MC-Play_Sound_Resume.wsf
If you need the BAT file to continue asynchronously before the WSF script completes, then you can use this instead:
start "" cmd /c wscript.exe MC-Play_Sound_Resume.wsf
-
If instead, you just want to include the thing you did in your bat file in my script, it uses lines like this to do the same thing as the BAT file:
WshShell.Run "MC20.exe /Stop"
So, if you wanted to open (for example), your web browser to Google using your default web browser, you could add:
WshShell.Run "http://google.com"
The script's version of the sleep command is WScript.Sleep <MS TO SLEEP>
So, if you wanted to open Google, and then sleep for 3600000 ms (1 hour), before anything else? You'd modify the script as follows:
<package>
<job id="vbs">
<script language="VBScript">
Option Explicit
dim WshShell
'Create our handy dandy Shell object
set WshShell = WScript.CreateObject("WScript.Shell")
'Open Google
WshShell.Run "http://google.com/"
'Chill out for an hour
WScript.Sleep 3600000
'Stop playback in MC
WshShell.Run "MC20.exe /Stop"
WScript.Sleep 300
'Create the WMPlayer Object
dim wmPlayer
set wmPlayer = CreateObject("WMPlayer.ocx")
'Play audio
wmPlayer.URL = "C:\Windows\Media\chimes.wav"
wmPlayer.controls.play
While wmPlayer.playState <> 1 ' 1 == stopped
WScript.Sleep 100
Wend
'Close the audio file
wmPlayer.close
'Restart MC with the next track
WshShell.Run "MC20.exe /Next"
WScript.Sleep 100
WshShell.Run "MC20.exe /Play"
</script>
</job>
</package>
Doing it all from within a WSF script has the benefit that it can run completely hidden and doesn't show the black CMD window at all, like a BAT file does.
-
You're great! Thanks! It works like a chime, ehhh... charm!
Only thing I have to do now is to find a not-annoying sound that's louder than this chimes.wav, because when that's played I can hardly hear it :-) (not even after I've optimized it in Media Editor).
Thanks again for your wonderful help.