Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: rub'n en 27 Abril 2019, 20:55 PM

Título: Reproducir Ñ con sapi.voice
Publicado por: rub'n en 27 Abril 2019, 20:55 PM
que tal chavales pues tengo lo siguiente

Código (vbnet) [Seleccionar]
Dim message, sapi
message="niño algo con ñ"
Set sapi=CreateObject("sapi.spvoice")
sapi.Speak message


Necesito reproducir las ñ, pero no lo logro  :-\
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: FJDA en 28 Abril 2019, 20:26 PM
Código (vbnet) [Seleccionar]
       Dim message, sapi
       message = "el ninio no sabe lo que es un monio en la cabeza"

       sapi = CreateObject("sapi.spvoice")
       sapi.Speak(message)



Título: Re: Reproducir Ñ con sapi.voice
Publicado por: rub'n en 28 Abril 2019, 20:28 PM
Cita de: FJDA en 28 Abril 2019, 20:26 PM
Código (vbnet) [Seleccionar]
        Dim message, sapi
        message = "el ninio no sabe lo que es un monio en la cabeza"

        sapi = CreateObject("sapi.spvoice")
        sapi.Speak(message)


gracias dog, voy a probar, pero creo que habia probado algo parecido sin resultado. te aviso.
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: FJDA en 28 Abril 2019, 20:29 PM
Cita de: rub'n en 28 Abril 2019, 20:28 PM
gracias dog, voy a probar, pero creo que habia probado algo parecido sin resultado. te aviso.

más lento

Código (vbnet) [Seleccionar]

   Dim message, sapi
        message = "el ninio no sabe lo que es un monio en la cabeza"
        sapi = CreateObject("sapi.spvoice")
        sapi.rate = -5
        sapi.Speak(message)
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: rub'n en 28 Abril 2019, 20:30 PM
Cita de: FJDA en 28 Abril 2019, 20:29 PM
más lento

Código (vbnet) [Seleccionar]

   Dim message, sapi
        message = "el ninio no sabe lo que es un monio en la cabeza"
        sapi = CreateObject("sapi.spvoice")
        sapi.rate = -5
        sapi.Speak(message)


voy directo a abrir la vm ya va.
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: FJDA en 28 Abril 2019, 20:32 PM
Cita de: rub'n en 28 Abril 2019, 20:30 PM
voy directo a abrir la vm ya va.

ops esto es perfecto ahora si que si  ;)

Lo pongo de las dos maneras para veas la diferencia
Código (vbnet) [Seleccionar]

       Dim message, message2, sapi

       message = "el ninio no sabe lo que es un monio en la cabeza"
       message2 = "el ninyo no sabe lo que es un monyo en la cabeza"
       sapi = CreateObject("sapi.spvoice")
       sapi.rate = -5
       sapi.Speak(message)
       sapi.Speak(message2)





El código me he fijado que has puesto sapi.Speak message sin el paréntesis, entiendo lo pones como para vbscript y no para NET.

Es que para NET tienes la clase  SpeechSynthesizer
https://docs.microsoft.com/es-es/dotnet/api/system.speech.synthesis.speechsynthesizer.volume?view=netframework-4.8 (https://docs.microsoft.com/es-es/dotnet/api/system.speech.synthesis.speechsynthesizer.volume?view=netframework-4.8)


Tienes que agregar referencia de  System.Speech y luego importar esto

Código (vbnet) [Seleccionar]

Imports System.Speech.Synthesis


En C#
Código (csharp) [Seleccionar]

using System.Speech.Synthesis;
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: rub'n en 28 Abril 2019, 21:02 PM
Cita de: FJDA en 28 Abril 2019, 20:32 PM
ops esto es perfecto ahora si que si  ;)

Lo pongo de las dos maneras para veas la diferencia
Código (vbnet) [Seleccionar]

       Dim message, message2, sapi

       message = "el ninio no sabe lo que es un monio en la cabeza"
       message2 = "el ninyo no sabe lo que es un monyo en la cabeza"
       sapi = CreateObject("sapi.spvoice")
       sapi.rate = -5
       sapi.Speak(message)
       sapi.Speak(message2)





El código me he fijado que has puesto sapi.Speak message sin el paréntesis, entiendo lo pones como para vbscript y no para NET.

Es que para NET tienes la clase  SpeechSynthesizer
https://docs.microsoft.com/es-es/dotnet/api/system.speech.synthesis.speechsynthesizer.volume?view=netframework-4.8 (https://docs.microsoft.com/es-es/dotnet/api/system.speech.synthesis.speechsynthesizer.volume?view=netframework-4.8)


Tienes que agregar referencia de  System.Speech y luego importar esto

Código (vbnet) [Seleccionar]

Imports System.Speech.Synthesis


En C#
Código (csharp) [Seleccionar]

using System.Speech.Synthesis;


si tal cual era para vbs , pero esta funcionando dog

Pues mi idea era reproducir un sonido desde java, o sea, escribo ese fichero en el directorio temporal con java, y lo  abro desde java, o sea, lo reproduzco.
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: FJDA en 28 Abril 2019, 21:11 PM
pues si te vale para "que" dice "kiu" porque en inglés la u la pronuncia iu

En su lugar pones "[k]e"  (sin los corchetes)
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: Eleкtro en 28 Abril 2019, 21:11 PM
No entiendo cual es el problema que teneis, ya que en mi caso y sistema operativo (Windows 10) las dos voces SAPI que tengo instaladas, es decir, Español de España (Helena) e Inglés de EEUU (Zira) reproducen perfectamente la entonación de la letra "Ñ".

De todas formas, el código que habeis puesto, para VisualBasicScript bien, pero en .NET deberiais utilizar la clase System.Speech.Synthesis.SpeechSynthesizer...

Código (vbnet) [Seleccionar]
Dim synth As New SpeechSynthesizer()

Pongo varios ejemplos útiles:

Seleccionar voz sintética femenina en Español de España.
Código (vbnet) [Seleccionar]
synth.SelectVoice("Microsoft Helena Desktop")
synth.Rate = -5
synth.Speak("¡Viva España!")


Seleccionar voz sintética femenina en Inglés de EEUU.
Código (vbnet) [Seleccionar]
synth.SelectVoice("Microsoft Zira Desktop")
synth.Rate = -5
synth.Speak("¡Viva España!")

( en masculino creo que se llamaba "Microsoft David Desktop" )

Seleccionar voz sintética por género, año y localización.
Código (vbnet) [Seleccionar]
synth.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Adult, 0, New CultureInfo("es-ES"))
synth.Rate = -5
synth.Speak("¡Viva España!")


Iterar todas las voces instaladas en el sistema.
Código (vbnet) [Seleccionar]
For Each installedVoice As InstalledVoice In synth.GetInstalledVoices()

   Dim voiceInfo As VoiceInfo = installedVoice.VoiceInfo

   Dim sb As New StringBuilder()
   sb.AppendFormat("{0}:{1}, {2}:{3}, {4}:{5}, {6}:{7}, {8}:{9}",
                   NameOf(voiceInfo.Name), voiceInfo.Name,
                   NameOf(voiceInfo.Culture), voiceInfo.Culture.Name,
                   NameOf(voiceInfo.Gender), voiceInfo.Gender.ToString(),
                   NameOf(voiceInfo.Age), voiceInfo.Age.ToString(),
                   NameOf(installedVoice.Enabled), installedVoice.Enabled)
   Console.WriteLine(sb.ToString())

   If (installedVoice.Enabled) Then
       synth.SelectVoice(voiceInfo.Name)
       synth.Rate = -5
       synth.Speak("¡Viva España!")
   End If

Next


Saludos.
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: FJDA en 28 Abril 2019, 21:14 PM
Cita de: Eleкtro en 28 Abril 2019, 21:11 PM
No entiendo cual es el problema que teneis, ya que en mi caso y sistema operativo (Windows 10) las dos voces SAPI que tengo instaladas, es decir, Español de España (Helena) e Iglés de EEUU (Zira) reproducen perfectamente la entonación de la letra "Ñ".

De todas formas, el código que habeis puesto, para VisualBasicScript bien, pero en .NET deberiais utilizar la clase System.Speech.Synthesis.SpeechSynthesizer...

Código (vbnet) [Seleccionar]
Dim synth As New SpeechSynthesizer()

Pongo varios ejemplos útiles:

Seleccionar voz sintética femenina en Español de España.
Código (vbnet) [Seleccionar]
synth.SelectVoice("Microsoft Helena Desktop")
synth.Rate = -5
synth.Speak("¡Viva España!")


Seleccionar voz sintética femenina en Inglés de EEUU.
Código (vbnet) [Seleccionar]
synth.SelectVoice("Microsoft Zira Desktop")
synth.Rate = -5
synth.Speak("¡Viva España!")


Seleccionar voz sintética por género, año y localización.
Código (vbnet) [Seleccionar]
synth.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Adult, 0, New CultureInfo("es-ES"))
synth.Rate = -5
synth.Speak("¡Viva España!")


Iterar todas las voces instaladas en el sistema.
Código (vbnet) [Seleccionar]
For Each installedVoice As InstalledVoice In synth.GetInstalledVoices()

   Dim voiceInfo As VoiceInfo = installedVoice.VoiceInfo

   Dim sb As New StringBuilder()
   sb.AppendFormat("{0}:{1}, {2}:{3}, {4}:{5}, {6}:{7}, {8}:{9}",
                   NameOf(voiceInfo.Culture), voiceInfo.Culture.Name,
                   NameOf(voiceInfo.Gender), voiceInfo.Gender.ToString(),
                   NameOf(voiceInfo.Age), voiceInfo.Age.ToString(),
                   NameOf(installedVoice.Enabled), installedVoice.Enabled)
   Console.WriteLine(sb.ToString())

   If (installedVoice.Enabled) Then
       synth.SelectVoice(voiceInfo.Name)
       synth.Rate = -5
       synth.Speak("¡Viva España!")
   End If

Next


Saludos.

En windows7 no lo pronuncia bien ni usando New System.Globalization.CultureInfo("es-ES") ya se lo digo yo, uso w7




parece que podría ser que fuese que pronuncie bien la Ñ dependiendo de si se tiene la voz adecuada instalada y bien configurada, independientemente de sistema operativo.
Luego el código posteado por electro funcionará o no si se tiene la voz seleccionada instalada, así esto no funciona si no está synth.SelectVoice("Microsoft Zira Desktop") synth.SelectVoice("Microsoft Helena Desktop")
tienes que tener a Zira Helena si no nada no funciona (Helena es para el español).
ver
https://es.switch-case.com/62941538 (https://es.switch-case.com/62941538)

y si se usa vbs entonces es el que tenga el sistema por defecto


...

yo tengo "Microsoft Anna"
En el registro de windows se puede ver las voces
HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices

en DefaultTokenId aparece la siguiente voz
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MS-Anna-1033-20-DSK

Código (vbnet) [Seleccionar]

       Dim synth As New SpeechSynthesizer()
       synth.SelectVoice("Microsoft Anna")
       synth.Rate = -5
       synth.Speak("¡Viva España!")



Desde panel de control

Panel de control   Reconocimiento de voz\Texto de voz ahí aparecen las voces e idiomas disponibles
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: Eleкtro en 28 Abril 2019, 21:32 PM
Cita de: FJDA en 28 Abril 2019, 21:14 PM
uso w7

Entonces supongo que si @rub'n tiene el mismo problema, también estará usando Windows 7. Y entonces el problema real sería la obsolescencia de un sistema operativo, cuya solución más viable siempre será actualizar la versión del S.O, o en su defecto descargar y actualizar el motor SAPI y las voces sintéticas para ese S.O... en caso de que se pueda (por los requisitos mínimos de la versión del S.O).




Cita de: FJDA en 28 Abril 2019, 21:14 PM
el código posteado por electro funcionará o no si se tiene la voz seleccionada instalada, así esto no funciona si no está synth.SelectVoice("Microsoft Zira Desktop")

Logicamente se puede utilizar la voz por defecto, no es obligatorio seleccionar una voz específica mediante el método SelectVoice. Aparte, el método SelectVoiceByHints siempre seleccionará una voz (en caso de que haya al menos una voz instalada), si no se encuentra la voz mediante los parámetros especificados entonces la se usará la voz por defecto.

Saludos.
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: rub'n en 28 Abril 2019, 21:33 PM
Cita de: Eleкtro en 28 Abril 2019, 21:11 PM
No entiendo cual es el problema que teneis, ya que en mi caso y sistema operativo (Windows 10) las dos voces SAPI que tengo instaladas, es decir, Español de España (Helena) e Inglés de EEUU (Zira) reproducen perfectamente la entonación de la letra "Ñ".

De todas formas, el código que habeis puesto, para VisualBasicScript bien, pero en .NET deberiais utilizar la clase System.Speech.Synthesis.SpeechSynthesizer...

Código (vbnet) [Seleccionar]
Dim synth As New SpeechSynthesizer()

Pongo varios ejemplos útiles:

Seleccionar voz sintética femenina en Español de España.
Código (vbnet) [Seleccionar]
synth.SelectVoice("Microsoft Helena Desktop")
synth.Rate = -5
synth.Speak("¡Viva España!")


Seleccionar voz sintética femenina en Inglés de EEUU.
Código (vbnet) [Seleccionar]
synth.SelectVoice("Microsoft Zira Desktop")
synth.Rate = -5
synth.Speak("¡Viva España!")

( en masculino creo que se llamaba "Microsoft David Desktop" )

Seleccionar voz sintética por género, año y localización.
Código (vbnet) [Seleccionar]
synth.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Adult, 0, New CultureInfo("es-ES"))
synth.Rate = -5
synth.Speak("¡Viva España!")


Iterar todas las voces instaladas en el sistema.
Código (vbnet) [Seleccionar]
For Each installedVoice As InstalledVoice In synth.GetInstalledVoices()

    Dim voiceInfo As VoiceInfo = installedVoice.VoiceInfo

    Dim sb As New StringBuilder()
    sb.AppendFormat("{0}:{1}, {2}:{3}, {4}:{5}, {6}:{7}, {8}:{9}",
                    NameOf(voiceInfo.Name), voiceInfo.Name,
                    NameOf(voiceInfo.Culture), voiceInfo.Culture.Name,
                    NameOf(voiceInfo.Gender), voiceInfo.Gender.ToString(),
                    NameOf(voiceInfo.Age), voiceInfo.Age.ToString(),
                    NameOf(installedVoice.Enabled), installedVoice.Enabled)
    Console.WriteLine(sb.ToString())

    If (installedVoice.Enabled) Then
        synth.SelectVoice(voiceInfo.Name)
        synth.Rate = -5
        synth.Speak("¡Viva España!")
    End If

Next


Saludos.

gracias myLord me viene muy bien eso.

Cita de: FJDA en 28 Abril 2019, 21:14 PM
En windows7 no lo pronuncia bien ni usando New System.Globalization.CultureInfo("es-ES") ya se lo digo yo, uso w7




parece que podría ser que fuese que pronuncie bien la Ñ dependiendo de si se tiene la voz adecuada instalada y bien configurada, independientemente de sistema operativo.
Luego el código posteado por electro funcionará o no si se tiene la voz seleccionada instalada, así esto no funciona si no está synth.SelectVoice("Microsoft Zira Desktop")
tienes que tener a Zira si no nada no funciona.
ver
https://es.switch-case.com/62941538 (https://es.switch-case.com/62941538)

y si se usa vbs entonces es el que tenga el sistema por defecto


tal cual my lord, gracias por esa.
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: rub'n en 28 Abril 2019, 21:34 PM
Cita de: Eleкtro en 28 Abril 2019, 21:32 PM
Entonces supongo que si @rub'n tiene el mismo problema, también estará usando Windows 7. Y entonces el problema real sería la obsolescencia de un sistema operativo, cuya solución más viable siempre será actualizar la versión del S.O, o en su defecto descargar y actualizar el motor SAPI y las voces sintéticas para ese S.O... en caso de que se pueda (por los requisitos mínimos de la versión del S.O).

Saludos.

si bueno  :-[ ando en windows 7 ahora, pero en la VM tengo el 10
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: FJDA en 29 Abril 2019, 00:16 AM
e buscado y parece que solo a partir de windows 8 se puede usar la voz Helena. Si no se tiene se puede instalar
Título: Re: Reproducir Ñ con sapi.voice
Publicado por: rub'n en 29 Abril 2019, 00:25 AM
Muchas gracias chavales, no soy quien para decirles esto, fueron mas aya de lo que pedia. jajajaja

Aunque para mi ya esta bien, pero pues, seguro no me harán caso  :xD, y seguirán mejorando los códigos que ya pusieron  :xD