les voix onecore (Paul et julie) utilisable avec Sapi 5

les voix onecore (Paul et julie) utilisable avec Sapi 5 2.0

Activer et utiliser les voix Paul et Julie (OneCore) dans VBA avec SAPI 5

Bonjour a tous
une demande a été faite ces derniers jour juin 2025) sur le fait de pouvoir utiliser une autre voix française en vba

en 2014 sur DVP j'avais fait un tutoriel sur comment installer et utiliser la voix virginie ou autres dans windows 7 64 pour une utilisation dans excel 2007 32 bits en vba
vous trouverez ce tutoriel ici(pour ceux qui l'utilisent encore)

la demande récente concerne windows 10

Windows 10 contient par défaut 3 voix françaises

  1. Hortense compatible (onecore et Sapi 5)
  2. Paul compatible (onecore donc innaccessible avec Sapi 5)
  3. Julie compatible (onecore donc innaccessible avec Sapi 5)

sauf qu'en fait pour pouvoir les utiliser avec le speech en vba
il suffit de créer les tokens(cle de registre)
bref exactement la même astuce qu'avec windows 7 et la voix virginie

je viens vous montrer aujourd'hui comment on fait

tout d’abord un test simple pour voir si ces voix sont réellement dispos dans windows 10
certaines config peuvent avoir été restreinte(pc professionnels etc...)
rendez vous donc dans
Paramètres → Heure et langue → Voix
et la vous pouvez sélectionner la voix de votre choix
normalement vous devriez avoir les 3 voix
testez les les 3 avec le bouton test

si ça fonctionne
ca veux dire que les trois voix fonctionnent

il nous reste plus qu'a faire le pont avec le com SAPI 5

pour cela on prend les mêmes et on recommence on va créer les clés de registre
les tokens pour les voix de Julie et Paul
pour cela nous allons créer un fichier ".reg" et nous allons lui mettre ceci a l’intérieur
ce n'est que l'ajout des clé tokens manquantes

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_frFR_JulieM]
@="Microsoft Julie Mobile - French (France)"
"40c"="Microsoft Julie Mobile - French (France)"
"CLSID"="{179F3D56-1B0B-42B2-A962-59B7EF59FE1B}"
"LangDataPath"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,\
00,70,00,65,00,65,00,63,00,68,00,5f,00,4f,00,6e,00,65,00,43,00,6f,00,72,00,\
65,00,5c,00,45,00,6e,00,67,00,69,00,6e,00,65,00,73,00,5c,00,54,00,54,00,53,\
00,5c,00,66,00,72,00,2d,00,46,00,52,00,5c,00,4d,00,53,00,54,00,54,00,53,00,\
4c,00,6f,00,63,00,66,00,72,00,46,00,52,00,2e,00,64,00,61,00,74,00,00,00
"VoicePath"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,00,\
70,00,65,00,65,00,63,00,68,00,5f,00,4f,00,6e,00,65,00,43,00,6f,00,72,00,65,\
00,5c,00,45,00,6e,00,67,00,69,00,6e,00,65,00,73,00,5c,00,54,00,54,00,53,00,\
5c,00,66,00,72,00,2d,00,46,00,52,00,5c,00,4d,00,31,00,30,00,33,00,36,00,4a,\
00,75,00,6c,00,69,00,65,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_frFR_JulieM\Attributes]
"Age"="Adult"
"DataVersion"="11.0.2013.1022"
"Gender"="Female"
"Language"="40c"
"Name"="Microsoft Julie Mobile"
"SharedPronunciation"=""
"Vendor"="Microsoft"
"Version"="11.0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_frFR_PaulM]
@="Microsoft Paul Mobile - French (France)"
"40c"="Microsoft Paul Mobile - French (France)"
"CLSID"="{179F3D56-1B0B-42B2-A962-59B7EF59FE1B}"
"LangDataPath"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,\
00,70,00,65,00,65,00,63,00,68,00,5f,00,4f,00,6e,00,65,00,43,00,6f,00,72,00,\
65,00,5c,00,45,00,6e,00,67,00,69,00,6e,00,65,00,73,00,5c,00,54,00,54,00,53,\
00,5c,00,66,00,72,00,2d,00,46,00,52,00,5c,00,4d,00,53,00,54,00,54,00,53,00,\
4c,00,6f,00,63,00,66,00,72,00,46,00,52,00,2e,00,64,00,61,00,74,00,00,00
"VoicePath"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,00,\
70,00,65,00,65,00,63,00,68,00,5f,00,4f,00,6e,00,65,00,43,00,6f,00,72,00,65,\
00,5c,00,45,00,6e,00,67,00,69,00,6e,00,65,00,73,00,5c,00,54,00,54,00,53,00,\
5c,00,66,00,72,00,2d,00,46,00,52,00,5c,00,4d,00,31,00,30,00,33,00,36,00,50,\
00,61,00,75,00,6c,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_frFR_PaulM\Attributes]
"Age"="Adult"
"DataVersion"="11.0.2013.1022"
"Gender"="Male"
"Language"="40c"
"Name"="Microsoft Paul Mobile"
"SharedPronunciation"=""
"Vendor"="Microsoft"
"Version"="11.0"
Enregistrez le par exemple
Enregistrez sous : ajout_voix_sapi.reg
(sur votre bureau ou ailleurs)et conservez le au cas ou voudriez le refaire sur un autre pc

voila (je vous l'avez dit c'est plus simple que Windows 7 et office 2007)
Il ne vous reste plus qu'a exécuter ce reg pour qu'il aille inscrire les clés dans le registre

une fois cela fait,désormais les 3 voix sont disponibles pour sapi 5 en vba

dans l'exemple de code ci dessous nous allons lister dans la console les voix disponibles pour vérifier qu'elle le sont bien pour Sapi 5 en vba
VB:
Sub TestVoixFR()
    Dim voix As Object, token As Object
    Set voix = CreateObject("SAPI.SpVoice")
 
    For Each token In voix.GetVoices
        Debug.Print token.GetDescription
    Next
End Sub
voici par exemple ce que j'obtiens chez moi
Microsoft Julie Mobile - French (France)
Microsoft Paul Mobile - French (France)
Microsoft Zira Desktop - English (United States)
Microsoft Helena Desktop - Spanish (Spain)
Microsoft Hortense Desktop - French
bien on est bon mes voix sont dispos

et bien on peut désormais les utiliser avec SAPI 5 en vba
exemple mode débutant quand on connait pas les cle de registre
VB:
Option Explicit

Sub toutlemondeditbonjour()
    Dim voix1 As Object
    Dim voix2 As Object
    Dim voix3 As Object
 
    Dim lavoix1 As String
    Dim lavoix2 As String
    Dim lavoix3 As String
 
   Dim voixDisponible As Object
    Dim trouve(1 To 3) As Boolean
 
    lavoix1 = "hortense"
    lavoix2 = "Paul"
    lavoix3 = "Julie"
 
    ' Créer les objects SAPI.SpVoice pour les 3 voix
    ' voix 1 "hortense"
    Set voix1 = CreateObject("SAPI.SpVoice")
    voix1.Volume = 100   'pour le volume de 0 à 100
    voix1.Rate = 0      ' pour la vitesse d'élocution de -10 à 10
    'recherche de la voix hortence
    trouve(1) = False
    For Each voixDisponible In voix1.GetVoices
        If InStr(1, voixDisponible.GetDescription, lavoix1, vbTextCompare) > 0 Then
            Set voix1.voice = voixDisponible
            trouve(1) = True
            Exit For
        End If
    Next
    If trouve(1) = False Then MsgBox "la voix de " & lavoix1 & "n'est pas disponible"
 
    'voix 2 "Paul"
    Set voix2 = CreateObject("SAPI.SpVoice")
    voix2.Volume = 100   'pour le volume de 0 à 100
    voix2.Rate = 0      ' pour la vitesse d'élocution de -10 à 10
    ' Parcourir les voix disponibles pour chercher "Hortense"
 
   
    trouve(2) = False
    For Each voixDisponible In voix2.GetVoices
        If InStr(1, voixDisponible.GetDescription, lavoix2, vbTextCompare) > 0 Then
            Set voix2.voice = voixDisponible
            trouve(2) = True
            Exit For
        End If
    Next
    If trouve(2) = False Then MsgBox "la voix de " & lavoix2 & "n'est pas disponible"
 
    'voix 3 "Julie"
    Set voix3 = CreateObject("SAPI.SpVoice")
    voix3.Volume = 100   'pour le volume de 0 à 100
    voix3.Rate = 0      ' pour la vitesse d'élocution de -10 à 10
    ' Parcourir les voix disponibles pour chercher "Hortense"
 
    'recherche de la voix Julie
    trouve(3) = False
    For Each voixDisponible In voix3.GetVoices
        If InStr(1, voixDisponible.GetDescription, lavoix3, vbTextCompare) > 0 Then
            Set voix3.voice = voixDisponible
            trouve(3) = True
            Exit For
        End If
    Next
    If trouve(3) = False Then MsgBox "la voix de " & lavoix3 & "n'est pas disponible"
      ' speak de tout ce petit monde
    If trouve(1) Then voix1.Speak "Bonjour, je suis  Hortense "
     If trouve(2) Then voix2.Speak "Bonjour, je suis Paul "
     If trouve(3) Then voix3.Speak "Bonjour, je suis Julie "
 
End Sub

Maintenant le mode expert avec les tokens de cle de registre
c'est simplement une écriture différente
on constate que les méthodes du com Sapi 5(aujourd'hui version 5.4) ont un peu changé par rapport a Windows 7
et que l’accès au token se fait avec le membre ".SpObjectToken" de Sapi contrairement a avant ou on le faisait en string directement par getvoice

VB:
Sub toutlemondeditbonjour2()
    Dim voix1 As Object, voix2 As Object, voix3 As Object
    Dim token1 As Object, token2 As Object, token3 As Object
 
    Set voix1 = CreateObject("SAPI.SpVoice")
    Set voix2 = CreateObject("SAPI.SpVoice")
    Set voix3 = CreateObject("SAPI.SpVoice")
 
    Set token1 = CreateObject("SAPI.SpObjectToken")
    On Error Resume Next
    token1.SetId "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech\Voices\Tokens\TTS_MS_FR-FR_HORTENSE_11.0"
    If Err.Number <> 0 Then
        MsgBox "Erreur : voix introuvable ou nom incorrect", vbExclamation
        Exit Sub
    End If
    Err.Clear: On Error GoTo 0
    Set token2 = CreateObject("SAPI.SpObjectToken")
    On Error Resume Next
    token2.SetId "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_frFR_PaulM"
    If Err.Number <> 0 Then
        MsgBox "Erreur : voix introuvable ou nom incorrect", vbExclamation
        Exit Sub
    End If
    Err.Clear: On Error GoTo 0
    Set token3 = CreateObject("SAPI.SpObjectToken")
    On Error Resume Next
    token3.SetId "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_frFR_JulieM"
    If Err.Number <> 0 Then
        MsgBox "Erreur : voix introuvable ou nom incorrect", vbExclamation
        Exit Sub
    End If
    Err.Clear: On Error GoTo 0
    Set voix1.voice = token1
    Set voix2.voice = token2
    Set voix3.voice = token3
 
    voix1.Speak "Bonjour, je suis Hortense"
    voix2.Speak "Bonjour, je suis Paul"
    voix3.Speak "Bonjour, je suis Julie"
End Sub


voila les voix Julie et Paul étant quand même beaucoup plus réalistes ,cette astuce peut donc apporter
une amélioration sur des messages vocaux par exemple

bon speech
le tutoriel en pdf ici
prochaine mise a jour créer un fichier wave avec une discussion entre hortense Julie et paul

Patrick
Auteur
patricktoulon
Version
1.0

Dernières mises à jour

  1. Ajout du module d'exploitation des voix pour SAPI 5 et Speech.Speak

    Bonjour a tous voici une mises a jour contenant diverses fonctions pour accéder et utiliser...
Retour