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 failed"; 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()); } } #### 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