Processing Ajax...

Title

Message

Confirm

Confirm

Confirm

Confirm

Are you sure you want to delete this item?

Confirm

Are you sure you want to delete this item?

Confirm

Are you sure?

User Image
apa7c4
19 discussion posts
Hello,

I have been trying to figureout how to send keyboard commands to unfocused application. My goal was to create a C# Macro Script that controls Spotifys internal volume slider.

I know that Spotify has internal Shortcuts to control volume (CRTL + UP / CRTL + DOWN)

First I tried to make simple play and pause script that uses Spotifys internal shortcut key (Space) to see if my idea works. But I cannot get it to work if Spotify is not focused. I used Visual Studios spy++ to figure out what I'm missing, but could not get it to work.

Can anyone help whit this? What am I missing? I can see in the spy++ that SendMessage() and PostMessage() goes to the right handle, but Spotify does not respond to these commands.

My mess of a code attatched:

Code

using System;
using System.Drawing;

public static class VoiceBotScript
{
// Parametters
    private const uint WM_KEYDOWN = 0x0100;
    private const uint WM_KEYUP = 0x0101;
    private const uint VK_SPACE = 0x20;
    private const uint L_Param1 = 0x390001;
    private const uint L_Param2 = 0xC0390001;
    
    private const uint eka = 0x93;
    private const uint toka = 0x0;
    private const uint kolmas = 0x19f07c;
    
    private const uint eka2 = 0xAE;
    private const uint toka2 = 0x8;
    private const uint kolmas2 = 0x0;
    
    private const uint eka3 = 0x93;
    private const uint toka3 = 0x0;
    private const uint kolmas3 = 0x19eddc;

    [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "PostMessage")]
static extern int PostMessage(IntPtr hwnd, uint msg, uint wParam, uint lParam);

[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SendMessage")]
static extern int SendMessage(IntPtr hwnd, uint msg, uint wParam, uint lParam);

public static void Run(IntPtr windowHandle)
{
// your code goes here
IntPtr spotify = BFS.Window.GetWindowByText("Spotify*");
string teksti = spotify.ToString(); //muutetaan Stringiksi!

//BFS.Dialog.ShowMessageInfo(teksti); //debuggeri tulostus

string spotifyMain = BFS.Window.GetClass(spotify);
//BFS.Dialog.ShowMessageInfo(spotifyMain);

IntPtr spotifyChild1 = BFS.Window.GetChildWindowByClass(spotify, "CefBrowserWindow");
string teksti2 = spotifyChild1.ToString(); //muutetaan Stringiksi!
//BFS.Dialog.ShowMessageInfo(teksti2);

IntPtr spotifyChild2 = BFS.Window.GetChildWindowByClass(spotifyChild1, "Chrome_WidgetWin_0");
string teksti3 = spotifyChild2.ToString(); //muutetaan Stringiksi!
//BFS.Dialog.ShowMessageInfo(teksti3);

//bool spotifyIkkuna = BFS.Window.Focus(spotify); focucksen vaihto spotifyym
//bool ok = BFS.Input.SendKeys("^({VK_38})"); haluttu toiminto kun focus on vaihtunut

SendMessage(spotify, eka, toka, kolmas);
SendMessage(spotify, eka2, toka2, kolmas2);
SendMessage(spotify, eka3, toka3, kolmas3);
System.Threading.Thread.Sleep(100);
PostMessage(spotifyChild2, WM_KEYDOWN, VK_SPACE, L_Param1);
System.Threading.Thread.Sleep(100);
PostMessage(spotifyChild2, WM_KEYUP, VK_SPACE, L_Param2);

}
}
Dec 27, 2016  • #1
PabloMartinez's profile on WallpaperFusion.com
At the moment i only found this option, but there is a problem with the volume. It uses system volume control.

Code

private const uint WM_APPCOMMAND = 0x0319;

public enum SpotifyAction : long
    {
        PlayPause = 917504,
        Stop = 851968,
        PreviousTrack = 786432,
        NextTrack = 720896,
        FastForward = 49 << 16,
        Rewind = 50 << 16,
        Mute = 524288,
        VolumeDown = 589824,
        VolumeUp = 655360,
    }

Code

PostMessage(spotifyChild2, WM_APPCOMMAND, 0, new IntPtr((long)SpotifyAction.PlayPause));

And i added working example in attachment.
• Attachment: spotify (English United States).voicebot [9,466 bytes]
Dec 28, 2016  • #2
User Image
apa7c4
19 discussion posts
I did find that code example before.. and got it working but noticed that it uses system volume. That it is not what I'm hoping to achieve. Thanks for the help tho!

Maybe theres another way to control Spotifys volume separately? Maybe trough volume mixer? I found sample c# code to control Firefox volume in volume mixer, but its way over my head... needs study more.

http://stackoverflow.com/questions/14306048/controling-volume-mixer

...and another way was using app called CheVolume, but it is paid app (20USD)
Dec 29, 2016  • #3
PabloMartinez's profile on WallpaperFusion.com

Code

...
private enum WindowShowStyle : uint
{
        /// <summary>Hides the window and activates another window.</summary>
        /// <remarks>See SW_HIDE</remarks>
        Hide = 0,
        /// <summary>Activates and displays a window. If the window is minimized
        /// or maximized, the system restores it to its original size and
        /// position. An application should specify this flag when displaying
        /// the window for the first time.</summary>
        /// <remarks>See SW_SHOWNORMAL</remarks>
        ShowNormal = 1,
        /// <summary>Activates the window and displays it as a minimized window.</summary>
        /// <remarks>See SW_SHOWMINIMIZED</remarks>
        ShowMinimized = 2,
        /// <summary>Activates the window and displays it as a maximized window.</summary>
        /// <remarks>See SW_SHOWMAXIMIZED</remarks>
        ShowMaximized = 3,
        /// <summary>Maximizes the specified window.</summary>
        /// <remarks>See SW_MAXIMIZE</remarks>
        Maximize = 3,
        /// <summary>Displays a window in its most recent size and position.
        /// This value is similar to "ShowNormal", except the window is not
        /// actived.</summary>
        /// <remarks>See SW_SHOWNOACTIVATE</remarks>
        ShowNormalNoActivate = 4,
        /// <summary>Activates the window and displays it in its current size
        /// and position.</summary>
        /// <remarks>See SW_SHOW</remarks>
        Show = 5,
        /// <summary>Minimizes the specified window and activates the next
        /// top-level window in the Z order.</summary>
        /// <remarks>See SW_MINIMIZE</remarks>
        Minimize = 6,
          /// <summary>Displays the window as a minimized window. This value is
          /// similar to "ShowMinimized", except the window is not activated.</summary>
        /// <remarks>See SW_SHOWMINNOACTIVE</remarks>
        ShowMinNoActivate = 7,
        /// <summary>Displays the window in its current size and position. This
        /// value is similar to "Show", except the window is not activated.</summary>
        /// <remarks>See SW_SHOWNA</remarks>
        ShowNoActivate = 8,
        /// <summary>Activates and displays the window. If the window is
        /// minimized or maximized, the system restores it to its original size
        /// and position. An application should specify this flag when restoring
        /// a minimized window.</summary>
        /// <remarks>See SW_RESTORE</remarks>
        Restore = 9,
        /// <summary>Sets the show state based on the SW_ value specified in the
        /// STARTUPINFO structure passed to the CreateProcess function by the
        /// program that started the application.</summary>
        /// <remarks>See SW_SHOWDEFAULT</remarks>
        ShowDefault = 10,
        /// <summary>Windows 2000/XP: Minimizes a window, even if the thread
        /// that owns the window is hung. This flag should only be used when
        /// minimizing windows from a different thread.</summary>
        /// <remarks>See SW_FORCEMINIMIZE</remarks>
        ForceMinimized = 11
}

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool ShowWindow(IntPtr hWnd, WindowShowStyle nCmdShow);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetForegroundWindow(IntPtr hWnd);
...

And using

Code

...
ShowWindow(spotifyMain, WindowShowStyle.ShowNormal);
SetForegroundWindow(spotifyChild2);
// Ctrl+Right (Vol Up)
BFS.Input.SendKeys("^({VK_38})");
// Hide Spotify to tray.
ShowWindow(spotifyMain, WindowShowStyle.Hide);
...


Yes i found many solutions, but they all are poorly suited for use in VoiceBot. :(

Probably worth a look at autohotkey.dll for example irisclasson.com/2015/01/06/using-autohotkey-dll-with-c-in-a-wpf-application/
At the moment I have not much time to look for a solution, but later I'll try to find something.
• Attachment: spotify vol (English United States).voicebot [11,176 bytes]
Dec 30, 2016 (modified Dec 30, 2016)  • #4
User Image
apa7c4
19 discussion posts
Thank you so much for your help!

This was much harder task to complete than I expected. In case of Spotify I noticed that you can control the Apps internal volume with the Spotify for Android.

Even tho I did not find a ideal solution, I learned a lot. I have never used C# before.

I have some experience with Autohotkey, but not with the autohotkey.dll ...I will have to study this when I have the time.
Jan 5, 2017  • #5
PabloMartinez's profile on WallpaperFusion.com
I found an intermediate option. In Clipboard Fusion, there are methods like Audio.SetApplicationVolume, Audio.SetApplicationMute etc. and they work as needed.
Like this:

Code

var hWnd = BFS.Application.GetMainWindowByFile("*spotify.exe");
var appId = BFS.Application.GetAppIDByWindow(hWnd);
BFS.Audio.SetApplicationVolume(appId, 1f);

It also works with the system volume control, but it is adjusted relative to the system volume without changing its settings.

Feature request:
It would be great if they were added to VB.
Mar 17, 2017  • #6
Keith Lammers (BFS)'s profile on WallpaperFusion.com
Strange that theses aren't in VoiceBot, actually! I've added that to our list to fix up for the next version :)
Mar 22, 2017  • #7
PabloMartinez's profile on WallpaperFusion.com
Ok, thanks. And Keith, in DisplayFusion these methods are also missing.
Mar 22, 2017  • #8
Keith Lammers (BFS)'s profile on WallpaperFusion.com
Yep! They'll be in the next DF beta :)
Mar 22, 2017  • #9
PabloMartinez's profile on WallpaperFusion.com
Until a new version of VB is released you can use this library https://github.com/JohnnyCrazy/SpotifyAPI-NET.
Download the https://github.com/JohnnyCrazy/SpotifyAPI-NET/releases/latest archive and unzip it to a convenient folder for future use. In the script, set the path where the script save file with volume, then add to the reference SpotifyApi.dll and the libraries indicated in the comments. After running the script, say the required volume in the range 0 to 100.

After the new version is released, I'll edit the script and send the full profile to the repository.

Code

using System;
using System.Drawing;
using System.Linq;
using System.Speech.Recognition.SrgsGrammar;
using System.Speech.Recognition;
using System.Xml;
using SpotifyAPI.Local;

// Add to references | System.Core.dll | C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Speech.dll
// and | YourPathToSpotifyApi\SpotifyApi.dll from (https://github.com/JohnnyCrazy/SpotifyAPI-NET/releases/latest)

public static class VoiceBotScript
{
    public static void Run(IntPtr windowHandle)
    {
        // Path to open\save Volume.xml
        var dirPath = @"C:\Test\";
        
        // Open\save srgs file
        var srgsFile = SrgsCreator.GetFileWithVolume(dirPath);
        
        // Get recognition result
        var volumeRecogResult = SpeechRecognition.Recognition(srgsFile);
        BFS.General.ThreadWait(1000);
        
        // Show what recognize. For testing. Can be removed
        BFS.Dialog.ShowMessageInfo(volumeRecogResult.ToString());

        // Set volume. Values in range 0-100 float
        var spLocalApi = new SpotifyLocalAPI();
spLocalApi.SetSpotifyVolume(volumeRecogResult);
    }
}
// Speech recognition using a srgs file
class SpeechRecognition
{
    public static float Recognition(string volumeList)
    {  
        var volumeRecogResult = "";
        var sre = new SpeechRecognitionEngine();
        var grammar = new Grammar(volumeList);
        
        sre.LoadGrammar(grammar);
        try
        {
            sre.SetInputToDefaultAudioDevice();
            var result = sre.Recognize();
            if (result != null)
                volumeRecogResult = result.Text;
            else
                Recognition(volumeList);
        }
        catch (NullReferenceException ex)
        {
            BFS.Dialog.ShowMessageError(ex.Message);
        }
        finally
        {
            sre.UnloadGrammar(grammar);
        }
        
        return float.Parse(volumeRecogResult);
    }
}

// Create basic srgs file without regard to pronunciation
class SrgsCreator
{
    public static string GetFileWithVolume(string dirPath)
    {
        var volumeFile = dirPath + "Volume.xml";
        
        if (System.IO.File.Exists(volumeFile))
            return volumeFile;
        
        var choices = new Choices();
        var volArr = Enumerable.Range(1, 100).ToArray();
        
        foreach (var num in volArr)
            choices.Add(num.ToString());
        
        var grammarBuilder = new GrammarBuilder();
        grammarBuilder.Append(choices);
        var srgsDoc = new SrgsDocument(grammarBuilder);
        var xmlWriter = XmlWriter.Create(volumeFile);
        srgsDoc.WriteSrgs(xmlWriter);
        xmlWriter.Close();
        
        return volumeFile;
    }
}
Jun 9, 2017  • #10
User Image
apa7c4
19 discussion posts
Hey,

Your script seems awesome, but I cannot get to work? What I'm missing here?

I made a new Macro on Global Macros and named it Spotify Volume and the command to use it is spotify volume.. Then I added to actions new macro script and pasted your script there.

And I downloaded the SpotifyApi and typed the references for System.Core and SpotifyAPI

But when I try to run this script nothing happens?! Am I supposed to say Command word + number(0-100) or Command word + volume + number(0-100)

I have tried both, but volume on Spotify does not change?

I have tried verify function and run function, and they are both successful.

Thanks for your help!
Jun 9, 2017  • #11
PabloMartinez's profile on WallpaperFusion.com
Add this string

Code

BFS.Speech.TextToSpeech(string.Format("Set volume to {0}", volumeRecogResult));
after

Code

BFS.General.ThreadWait(1000);
or uncomment

Code

//BFS.Dialog.ShowMessageInfo(volumeRecogResult.ToString());
to see what response returns from speech recog. Say command word to start script then wait some second and say number(0-100).

If it's not help, comment this string

Code

var volumeRecogResult = SpeechRecognition.Recognition(srgsFile);
and set the volume like that

Code

spLocalApi.SetSpotifyVolume(50);
Jun 9, 2017 (modified Jun 9, 2017)  • #12
User Image
apa7c4
19 discussion posts
Nothing happens. Should there be some message box or something?
Jun 9, 2017  • #13
PabloMartinez's profile on WallpaperFusion.com
Try this script for test

Code

using System;
using System.Drawing;
using SpotifyAPI.Local;

public static class VoiceBotScript
{
    public static void Run(IntPtr windowHandle)
    {
        var spApi = new SpotifyLocalAPI();
        spApi.SetSpotifyVolume(50);
    }
}

In this case, you only need to add SpotifyAPI.dll to reference. Change the value and run the script from the editor.
Jun 9, 2017 (modified Jun 9, 2017)  • #14
User Image
apa7c4
19 discussion posts
It changes the spotify volume on volume mixer according to the value in spApi.SetSpotifyVolume(50) ... so this is working
Jun 9, 2017  • #15
PabloMartinez's profile on WallpaperFusion.com
Ok. Check whether the file "Volume.xml" on the "C:\Test\" path. If file or folder not exist, create folder or change the path in code to a convenient path for you.

Code

var dirPath = @"C:\Test\";
After that the 1st script should work.
Jun 9, 2017 (modified Jun 9, 2017)  • #16
User Image
apa7c4
19 discussion posts
Folder did not exist.. so I created it.. and ran the script again. Now there is Volume.xml file in the folder.

But the volume is still not changing.
Jun 9, 2017  • #17
PabloMartinez's profile on WallpaperFusion.com
Oh, sorry, I completely forgot that VB should be run as an administrator.
Jun 9, 2017  • #18
PabloMartinez's profile on WallpaperFusion.com
Simply I have it run at startup with admin rights via the scheduler.
Jun 9, 2017  • #19
User Image
apa7c4
19 discussion posts
Does not seem to make any difference.. :/

Oh well.. I can use the Spotify API script and make a few different commands for different volume levels.:)

Thanks anyway!
Jun 9, 2017  • #20
PabloMartinez's profile on WallpaperFusion.com
My mistake, I need administrator privileges because I moved the Temp folder to C:\Windows\.
All right, let's try another option. Is the message "Recognized: 78" displayed when you run this script?

Code

using System;
using System.Drawing;
using System.Linq;
using System.Speech.Recognition.SrgsGrammar;
using System.Speech.Recognition;
using System.Xml;

// Add to references | System.Core.dll | C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Speech.dll

public static class VoiceBotScript
{
    public static void Run(IntPtr windowHandle)
    {
        // Path to open\save Volume.xml
        var dirPath = @"c:\Test\";
        
        // Open\save srgs file
        var srgsFile = SrgsCreator.GetFileWithVolume(dirPath);
        
        // Get recognition result
        SpeechRecognition.Recognition(srgsFile);
    }
}

class SpeechRecognition
{
    public static void Recognition(string volumeList)
    {  
        var volumeRecogResult = "";
        var sre = new SpeechRecognitionEngine();
        var grammar = new Grammar(volumeList);
        
        sre.LoadGrammar(grammar);
        var rr = sre.EmulateRecognize("78");
        if (rr != null && rr.Text != null)
            BFS.Dialog.ShowMessageInfo("Recognized: " + rr.Text);
    }
}

// Create basic srgs file without regard to pronunciation
class SrgsCreator
{
    public static string GetFileWithVolume(string dirPath)
    {
        var volumeFile = dirPath + "Volume.xml";
        
        if (System.IO.File.Exists(volumeFile))
            return volumeFile;
        
        var choices = new Choices();
        var volArr = Enumerable.Range(1, 100).ToArray();
        
        foreach (var num in volArr)
            choices.Add(num.ToString());
        
        var grammarBuilder = new GrammarBuilder();
        grammarBuilder.Append(choices);
        var srgsDoc = new SrgsDocument(grammarBuilder);
        var xmlWriter = XmlWriter.Create(volumeFile);
        srgsDoc.WriteSrgs(xmlWriter);
        xmlWriter.Close();
        
        return volumeFile;
    }
}
Jun 9, 2017  • #21
User Image
apa7c4
19 discussion posts
No.

Where should I see this message?
Jun 9, 2017  • #22
PabloMartinez's profile on WallpaperFusion.com
I'm running out of options. :) Try importing this profile, opening the script, and running it through "Run Function".
• Attachment: Test Recognition (English United States).voicebot [11,952 bytes]
Jun 9, 2017  • #23
User Image
apa7c4
19 discussion posts
Still nothing happens.. It says Run succesful. but nothing else happens.
Jun 9, 2017  • #24
PabloMartinez's profile on WallpaperFusion.com
Then Keith will wait and hope that he can help. I'll try to see tomorrow, maybe I'll see what I can't see right now.
Jun 9, 2017  • #25
PabloMartinez's profile on WallpaperFusion.com
Change the path in reference from C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Speech.dll to C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.Speech.dll and try to run the script from the profile. If that doesn't help, could you please send the Log file?

  • On the VoiceBot Settings > Troubleshooting tab, change the Logging drop-down to "L1: Log Minimal" and click Apply
  • Run the script using Run Function
  • Close script
  • Disable debug logging
  • And attach it to a message in this topic without "Protect these attachments" check box

For test I installed a new system on a virtual machine, installed .NetFramework 4.6.2, Spotify, and VB. Ran the script, it works.
Jun 10, 2017  • #26
User Image
apa7c4
19 discussion posts
I changed the reference to the profile you send me. It did not help.

Here is the log.
• Attachment [protected]: VoiceBot.log [35,469 bytes]
Jun 10, 2017  • #27
PabloMartinez's profile on WallpaperFusion.com
Remove or protect the log file in message. I can see the problem. Failed to run function: Run failed. • Exception has been thrown by the target of a invocation. • The language for the grammar does not match the language of the speech recognizer.
Jun 10, 2017  • #28
User Image
apa7c4
19 discussion posts
Oh my.. It is workin!

Thank you.. I did not know that my windows had a speech recognizer se to UK..

Thank you so much :)
Jun 10, 2017  • #29
PabloMartinez's profile on WallpaperFusion.com
Not a problem. :) Anyway, it's more of my mistake, because I forgot to add information about the culture used.
You can now select a language from the available for recognition.

Code

var culture = new CultureInfo("en-US");


Latest version with patches and additions.

Code

using System;
using System.Drawing;
using System.Linq;
using System.Speech.Recognition.SrgsGrammar;
using System.Speech.Recognition;
using System.Xml;
using System.Globalization;
using SpotifyAPI.Local;

// Add to references | System.Core.dll | C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.Speech.dll
// and | YourPathToSpotifyApi\SpotifyApi.dll from (https://github.com/JohnnyCrazy/SpotifyAPI-NET/releases/latest)

public static class VoiceBotScript
{
    public static void Run(IntPtr windowHandle)
    {
        // Set your recognition language. Support languages: en-GB, en-US, de-DE, es-ES, fr-FR, ja-JP, zh-CN, zh-TW.
        var culture = new CultureInfo("en-US");
        
        // Path to open\save Volume.xml
        var dirPath = @"c:\Test\";
        
        // Open\save srgs file
        var srgsFile = SrgsCreator.GetFileWithVolume(dirPath);
        
        // Get recognition result
        var volumeRecogResult = SpeechRecognition.Recognition(srgsFile, culture);
        BFS.General.ThreadWait(3000);
        
        // Show what recognize. For testing. Can be removed
        //BFS.Dialog.ShowMessageInfo(volumeRecogResult.ToString());
        BFS.Speech.TextToSpeech(string.Format("Set volume to {0}", volumeRecogResult));

        // Set volume. Values in range 0-100 float
        var spLocalApi = new SpotifyLocalAPI();
        spLocalApi.SetSpotifyVolume(volumeRecogResult);
    }
}

class SpeechRecognition
{
    public static float Recognition(string srgsFile, CultureInfo culture)
    {  
        var volumeRecogResult = "";
        var sre = new SpeechRecognitionEngine(culture);
        var grammar = new Grammar(srgsFile);
        
        sre.LoadGrammar(grammar);
        try
        {
            sre.SetInputToDefaultAudioDevice();
            var result = sre.Recognize();
            if (result != null)
                volumeRecogResult = result.Text;
            else
                Recognition(srgsFile, culture);
        }
        catch (NullReferenceException ex)
        {
            BFS.Dialog.ShowMessageError(ex.Message);
        }
        finally
        {
            sre.UnloadGrammar(grammar);
        }
        
        return float.Parse(volumeRecogResult);
    }
}

// Create basic srgs file without regard to pronunciation
class SrgsCreator
{
    public static string GetFileWithVolume(string dirPath)
    {
        var volumeFile = dirPath + "Volume.xml";
        
        if (System.IO.File.Exists(volumeFile))
            return volumeFile;
        
        var choices = new Choices();
        var volArr = Enumerable.Range(1, 100).ToArray();
        
        foreach (var num in volArr)
            choices.Add(num.ToString());
        
        var grammarBuilder = new GrammarBuilder();
        grammarBuilder.Append(choices);
        var srgsDoc = new SrgsDocument(grammarBuilder);
        var xmlWriter = XmlWriter.Create(volumeFile);
        srgsDoc.WriteSrgs(xmlWriter);
        xmlWriter.Close();
        
        return volumeFile;
    }
}
Jun 10, 2017 (modified Jun 10, 2017)  • #30
User Image
apa7c4
19 discussion posts
Great! can i use different TTS?

In this case english is used:
BFS.Speech.TextToSpeech(string.Format("Set volume to {0}", volumeRecogResult));

But if I want it to be in finnish? Is this possible?

Because in the macro side tts in finnish is possible.
Jun 10, 2017 (modified Jun 10, 2017)  • #31
PabloMartinez's profile on WallpaperFusion.com
I think yes. Change the string to BFS.Speech.TextToSpeechWithVoice(string.Format("string to say {0}", volumeRecogResult), "Microsoft Server Speech Text to Speech Voice (fi-FI, Heidi)");
Jun 10, 2017 (modified Jun 10, 2017)  • #32
Keith Lammers (BFS)'s profile on WallpaperFusion.com
We've just released a new VoiceBot beta, and the BFS.Audio functions should now be available in Macro Scripts. If you run into any trouble after updating, please let us know!

Thanks!
Jul 29, 2017  • #33
PabloMartinez's profile on WallpaperFusion.com
Slightly changed the script.
• Attachment: spotify volume.txt [6,567 bytes]
Jul 29, 2017  • #34
Keith Lammers (BFS)'s profile on WallpaperFusion.com
We've added it to the repository, thanks Pablo!
Aug 1, 2017  • #35
Subscribe to this discussion topic using RSS
Was this helpful?  Login to Vote(-)  Login to Vote(-)