Page Index Toggle Pages: 1 Send TopicPrint
Normal Topic TTS-Funktionen (Samplingrate) (Read 4758 times)
Dr.InSide
YaBB Newbies
*
Offline


Phoner ist großartig!

Posts: 2
Joined: 08. Jul 2007
Gender: Male
TTS-Funktionen (Samplingrate)
08. Jul 2007 at 07:57
Print Post  
Hi!

Ich habe Phoner 2.05 ausprobiert und bin davon begeistert. Vorallem die TTS ist für mich 
gut brauchbar. Allerdings bemängle ich hier mal die unzureichenden Einstellmöglichkeiten 
für SAPI5. Es wäre sehr schön, wenn noch ein Auswahlfeld für die Sampling-Rate und für 
die Sprech-Geschwindigkeit hinzu kommen würde. Ich habe selbst ein wenig mit SAPI5-
Ansteuerung experimentiert (Demo) und habe dabei rausgefunden, daß die Stimme stark 
verzerrt wird, wenn die eingestellte Sampling-Rate nicht exakt mit der von der Stimme 
übereinstimmt. Dies ist scheinbar auch bei Phoner der fall. Daher hoffe ich, daß die 
entsprechenden Einstellmöglichkeiten in Phoner irgendwann noch hinzugeügt werden.

Smiley

Gruß
Dr.InSide
« Last Edit: 08. Jul 2007 at 16:09 by Dr.InSide »  
Back to top
 
IP Logged
 
Suppenkasper
God Member
*****
Offline


Phoner-Support

Posts: 1536
Location: Aachen
Joined: 29. Mar 2005
Gender: Male
Re: TTS-Funktionen (Samplingrate)
Reply #1 - 08. Jul 2007 at 13:40
Print Post  
Hallo @Dr.Inside,

Phoner ist so konzipiert, dass es als Frontend diejenigen Einstellungen nutzt, die jeweils für eine Funktion zur Verfügung steht, und die bereits konfiguriert sind. In wie weit Phoner an diesen Einstellungen programm-intern Modifikationen vornimmt, ist mir leider nicht bekannt.

Dieses bedeutet jedoch auch, dass die TTS-Maschine, die genutzt wird, so eingestellt werden sollte, dass die Ausgabe problemlos und störungsfrei erfolgt.

Bei manchen TTS-Stimmen ist das im Zusammenhang mit Phoner notwendig - jedoch leider nur schwer machbar, da deren Konfiguration etwa über Anweisungen in ASCII-Dateien vorgenommen werden muss.

Relativ einfach ist dies jedoch bei den Stimmen von Cepstral - ich nutze hiervon "Matthias" und "Katrin" zur Textausgabe. In Hinsicht auf Phoner war bei beiden jedoch nichts mehr einzustellen.

Lange Vorrede, kurzer Sinn: Da Du Dich auf diesem Gebiet sehr gut auskennst, würde Dein Vorschlag mehr Gewicht bekommen, wenn Du auf eine API oder DLL hinweisen könntest, die Deine gewünschten Funktionen bereits realisiert, und die lediglich durch Phoner angesprochen werden brauchte.

Ist Dir in dieser Hinsicht etwas ausreichend gut dokumentiertes bekannt?

Danke bereits für eine entsprechende Antwort zur angedachten Umsetzung und
viele Grüße vom Kai
  
Back to top
IP Logged
 
Dr.InSide
YaBB Newbies
*
Offline


Phoner ist großartig!

Posts: 2
Joined: 08. Jul 2007
Gender: Male
Re: TTS-Funktionen (Samplingrate)
Reply #2 - 08. Jul 2007 at 15:59
Print Post  
Hallo!

Ich kenne mich auf dem gebiet war nicht "sehr gut" aus, aber trotzdem versuche ich mal weiter 
zu helfen. Ich hab mir nur das SAPI5-SDK "oberflächlich" angeschaut und etwas experimentiert.

Problem ist nur, daß man bei SAPI5 nicht viel Vor-Konfigurieren kann. Jedenfalls nicht so toll wie
beim alten SAPI4, was jedoch kaum noch von den Stimmen-Herstellern supportet wird. Dafür
ist die SAPI5 Programmierung relativ simpel gestrickt, damit solche Einstellungen schnell
erledigt sind.

Ich weiß ja nicht, wie die SAPI5 in Phoner angesprochen wird. Ich nehme jedoch an, wie üblich
über ein COM-Objekt. So wird es jedenfalls im SAPI5-SDK gezeigt, welches auf der MS-Homepage
downlodbar ist. Dort ist SAPI5 auch ausreichend Dokumentiert.

In Visual Basic sieht das so aus (ich poste hier nicht den ganzen Source, nur ein Teil als
Beispiel. Der Original-Source befindet sich im SAPI5-SDK. Dort ist er für Visual Basic
sowie für Visual C und als Beispiel für HTML-Einbindung enthalten):

Code
Select All

' First, declare the main SAPI object we are using in this sample. It is
' created inside Form_Load and released inside Form_Unload.
Dim WithEvents Voice As SpVoice

' Speak flags is a combination of bit flags. These individual bits correspond
' to check boxes on the UI. So speakFlags should always be kept in sync
' with the state of those check boxes.
Dim speakFlags As SpeechVoiceSpeakFlags

' This is the default format we will use.
'Const DefaultFmt = "SAFT22kHz16BitMono"
Const DefaultFmt = "22kHz, 16Bit, Mono"

'Initialisiert SAPI5
Sub SpeechInit()

  'Creates the voice object first
  Set Voice = New SpVoice

  'Load the voices combo box
  Dim Token As ISpeechObjectToken

  For Each Token In Voice.GetVoices
    coVoice.AddItem (Token.GetDescription())
  Next
  coVoice.ListIndex = 0

  'load the format combo box
  AddItemToFmtCB

  'set rate and volume to the same as the Voice
  hsRate.Value = Voice.Rate
  hsVolume.Value = Voice.Volume

  'set the default format
  coFormat.Text = DefaultFmt

  'Load the audio output combo box
  If Voice.GetAudioOutputs.Count > 0 Then
    For Each Token In Voice.GetAudioOutputs
	coDevice.AddItem (Token.GetDescription)
    Next
  Else
    coDevice.AddItem NoAudioOutput
    coDevice.Enabled = False
  End If
  coDevice.ListIndex = 0

  'init speak flags and sync flag check boxes
  speakFlags = SVSFlagsAsync Or SVSFPurgeBeforeSpeak Or SVSFIsXML
  chkSpFlagAync.Value = Checked
  chkSpFlagPurgeBeforeSpeak.Value = Checked
  chkSpFlagIsXML.Value = Checked

  SetSpeakingState False, False

End Sub

'Definiert Format-String und Format-Constante für die Combo-Box
'Die Constanten sind vom COM-Object fest vorgegeben und fangen
'jedweils mit SAFT* an. Die Stereo-Formate kann man theoretisch
'weglassen. In Google habe ich keine TTS mit Stereo-Support
'gefunden (wozu auch?), daher alle Auskommentiert.
Private Sub AddItemToFmtCB()

  AddFmts " 8kHz,  8Bit, Mono", SAFT8kHz16BitMono
  'AddFmts " 8kHz,  8Bit, Stereo", SAFT8kHz8BitStereo
  AddFmts " 8kHz, 16Bit, Mono", SAFT8kHz16BitMono
  'AddFmts " 8kHz, 16Bit, Stereo", SAFT8kHz16BitStereo

  AddFmts "11kHz,  8Bit, Mono", SAFT11kHz8BitMono
  'AddFmts "11kHz,  8Bit, Stereo", SAFT11kHz8BitStereo
  AddFmts "11kHz, 16Bit, Mono", SAFT11kHz16BitMono
  'AddFmts "11kHz, 16Bit, Stereo", SAFT11kHz16BitStereo

  AddFmts "12kHz,  8Bit, Mono", SAFT12kHz8BitMono
  'AddFmts "12kHz,  8Bit, Stereo", SAFT12kHz8BitStereo
  AddFmts "12kHz, 16Bit, Mono", SAFT12kHz16BitMono
  'AddFmts "12kHz, 16Bit, Stereo", SAFT12kHz16BitStereo

  AddFmts "16kHz,  8Bit, Mono", SAFT16kHz8BitMono
  'AddFmts "16kHz,  8Bit, Stereo", SAFT16kHz8BitStereo
  AddFmts "16kHz, 16Bit, Mono", SAFT16kHz16BitMono
  'AddFmts "16kHz, 16Bit, Stereo", SAFT16kHz16BitStereo

  AddFmts "22kHz,  8Bit, Mono", SAFT22kHz8BitMono
  'AddFmts "22kHz,  8Bit, Stereo", SAFT22kHz8BitStereo
  AddFmts "22kHz, 16Bit, Mono", SAFT22kHz16BitMono
  'AddFmts "22kHz, 16Bit, Stereo", SAFT22kHz16BitStereo

  AddFmts "24kHz,  8Bit, Mono", SAFT24kHz8BitMono
  'AddFmts "24kHz,  8Bit, Stereo", SAFT24kHz8BitStereo
  AddFmts "24kHz, 16Bit, Mono", SAFT24kHz16BitMono
  'AddFmts "24kHz, 16Bit, Stereo", SAFT24kHz16BitStereo

  AddFmts "32kHz,  8Bit, Mono", SAFT32kHz8BitMono
  'AddFmts "32kHz,  8Bit, Stereo", SAFT32kHz8BitStereo
  AddFmts "32kHz, 16Bit, Mono", SAFT32kHz16BitMono
  'AddFmts "32kHz, 16Bit, Stereo", SAFT32kHz16BitStereo

  AddFmts "44kHz,  8Bit, Mono", SAFT44kHz8BitMono
  'AddFmts "44kHz,  8Bit, Stereo", SAFT44kHz8BitStereo
  AddFmts "44kHz, 16Bit, Mono", SAFT44kHz16BitMono
  'AddFmts "44kHz, 16Bit, Stereo", SAFT44kHz16BitStereo

  AddFmts "48kHz,  8Bit, Mono", SAFT48kHz8BitMono
  'AddFmts "48kHz,  8Bit, Stereo", SAFT48kHz8BitStereo
  AddFmts "48kHz, 16Bit, Mono", SAFT48kHz16BitMono
  'AddFmts "48kHz, 16Bit, Stereo", SAFT48kHz16BitStereo

End Sub

'Fügt die Formate in die ComboBox ein.
Private Sub AddFmts(ByRef name As String, ByVal fmt As SpeechAudioFormatType)

  Dim Index As String

  'get the count of existing list so that we are adding to the bottom of the list
  aIndex = coFormat.ListCount

  'add the name to the list box and associate the format type with the item
  coFormat.AddItem name, aIndex
  coFormat.ItemData(aIndex) = fmt

End Sub

'Beim Klick auf die ComboBox (enthält Liste der Formate) wird die
'Format-Konstante an das Objekt übergeben
Private Sub coFormat_Click()

  On Error GoTo ErrHandler

  'Note: AllowAudioOutputFormatChangesOnNextSet is a hidden property, VB
  'object browser doesn't show it by default. To see it, you can go to
  'VB object viewer, right click and turn on the "show hidden members".
  Voice.AllowAudioOutputFormatChangesOnNextSet = False

  'The format Type is associated with the selected list item as a long.
  Voice.AudioOutputStream.Format.Type = coFormat.ItemData(coFormat.ListIndex)

  'Currently you have to call this so that SAPI picks up the new format.
  Set Voice.AudioOutputStream = Voice.AudioOutputStream

  Exit Sub

ErrHandler:

  AddDebugInfo "Set format error: ", Err.Description

End Sub


'Beim ändern des Lautstärke-Schieberegler (Wert: 0-100)
'wird der eingestellte Wert übergeben
Private Sub hsVolume_Change()
  Voice.Volume = hsVolume.Value
End Sub

'Beim ändern des Geschwindigkeits-Schieberegler (Wert: -10 bis +10)
'wird der eingestellte Wert übergeben
Private Sub hsRate_Change()
  Voice.Rate = hsRate.Value
End Sub

 



TIP: 
Wer SAPI5 nicht nur in Windows XP/Vista benutzen will und sich scheut rund 100 MB des SAPI5-SDK
runterzuladen, kann sich die SAPI5-API (rund 6 MB) ausm Netz saugen (nach "sapi51.msi" suchen).
Es steht immer dabei, daß sie ausschließlich für Windows 2000 wäre, aber ich habe sie auch erfolgreich 
auf einem alten PC in Windows 98 zum laufen gebracht (vorrausgesetzt aktueller MSI-Installer vorhanden).

So, ich hoffe das waren genug Informationen für Heute ... Wink

MfG,
Dr.InSide
  
Back to top
 
IP Logged
 
Suppenkasper
God Member
*****
Offline


Phoner-Support

Posts: 1536
Location: Aachen
Joined: 29. Mar 2005
Gender: Male
Re: TTS-Funktionen (Samplingrate)
Reply #3 - 08. Jul 2007 at 16:12
Print Post  
@ Dr.Inside,

jau, danke für die Informationen - wie genau die technische Seite bei Phoner aussieht, d. h. wie Phoner die SAPI5 anspricht, dazu wird sicherlich Heiko noch etwas schreiben. Wie genau nun eine Implementation der Einstellung von Bit- und Samplingraten in Phoner erfolgen wird, liegt nun auch bei ihm - leider kann ich keine Auskunft darüber machen, ob diese Änderung eine Priorität hat, oder ob in dieser Hinsicht überhaupt jemals etwas hinzugefügt werden wird.

Warten wir's einfach einmal ab.

Viele Grüße vom Kai
  
Back to top
IP Logged
 
Phoner Admin
YaBB Administrator
*****
Offline



Posts: 11421
Location: Germany
Joined: 12. Oct 2003
Gender: Male
Re: TTS-Funktionen (Samplingrate)
Reply #4 - 10. Jul 2007 at 12:36
Print Post  
Ja, Phoner verwendet ebenfalls das COM-Interface, um SAPI5 anzusprechen.
Mir ist nur nicht klar, wieso du die Samplerate und Geschwindigkeit einstellen möchtest. Die TTS-Funktionalität in Phoner ist einzig und allein darauf ausgerichtet, eine solche Nachricht über ein Telefonat zu übertragen - und genau da gibt es nun mal keine höheren Sampleraten als 8 kHz!
  
Back to top
WWW  
IP Logged
 
Page Index Toggle Pages: 1
Send TopicPrint