Discipulus' code simplified (UPDATE: and enhanced - it also SPEAKS the info using the voice):
use strict;
use warnings;
use Data::Dumper;
use Win32::OLE qw(in);
GetVoiceInfo();
sub GetVoiceInfo{
my $tts = Win32::OLE->new("Sapi.SpVoice") or die "Sapi.SpVoice faile
+d";
for my $voice (in $tts->GetVoices){
print "Found voice: ", $voice->GetDescription(),
"\n\tID:", $voice->Id(), "\n\n";
$tts->{Voice} = $voice; # Sets the "Voice" PROPERTY
$tts->Speak("I am the voice of "
. $voice->GetDescription());
}
}
Output:
Found voice: Microsoft David Desktop - English (United States)
ID:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\
+TTS_MS_EN-US_DAVID_11.0
Found voice: Microsoft Zira Desktop - English (United States)
ID:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\
+TTS_MS_EN-US_ZIRA_11.0
"It's ten o'clock... Do you know where your AI programs are?"