Προς το περιεχόμενο

text-to-speech Πρόγραμμα σε C++ για ελληνικά


giannaras80

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα παιδιά,

λοιπόν έχουμε μια εργασία και θέλουμε να φτιάξουμε ένα πρόγραμμα σε C++ το οποίο θα προσομοιώνει ένα αυτόματο τηλεφωνητή. Όπως είναι για παράδειγμα το 1252 της Vodafone που παίρνεις για να μάθεις το υπόλοιπο ή να ανανεώσεις την κάρτα σου. Έχω βρει λοιπόν αυτόν τον κώδικα:

 

// speak2.cpp : Defines the entry point for the console application.

//

#include <stdafx.h>

#include <sapi.h>

 

int main(int argc, char* argv[])

{

ISpVoice * pVoice = NULL;

 

if (FAILED(::CoInitialize(NULL)))

return FALSE;

 

HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);

if( SUCCEEDED( hr ) )

{

hr = pVoice->Speak(L"Hello", 0, NULL);

pVoice->Release();

pVoice = NULL;

}

::CoUninitialize();

return TRUE;

}

 

το πρόβλημα λοιπόν είναι το πως θα μετατρέψουμε αυτόν τον κώδικα, ώστε να μιλάει ελληνικά. Καμιά ιδέα? :fear::o

Δημοσ.

Αν η μηχανή δεν υποστηρίζει απευθείας εκφώνηση ελληνικών phonements (φώνημα) τότε θα πρέπει να χρησιμοποιήσετε τα Αγγλικά προσαρμοσμένα ώστε τα φωνήματα τους να προσομοιάζουν την εκφορά των ελληνικών.

 

Για παράδειγμα αν θέλουμε να πούμε στο SAPI με την φωνή του SAM (default) να εκφωνήσει την λέξη «Καλησπέρα» μπορούμε να το κάνουμε με διάφορους τρόπους, από λιγότερο ως περισσότερο επιτυχημένους προσέχοντας τον τρόπο που γράφουμε την ελληνική λέξη στα αγγλικά φωνήματα, για παράδειγμα:

 

Kalhspera – Δεν θα ακουστεί σωστά διότι τα φωνήματα των (lh) αγγλικών δεν είναι ομόηχα του ελληνικού «λη».

Kalispera – Το ίδιο θα συμβεί και εδώ (μπορεί να ακουστεί ίσως ελάχιστα καλύτερα από την πρώτη εκδοχή) αφού ούτε το αγγλικό “li” εκφέρεται ομόηχα του ελληνικού.

Kaleispera – Αν αντικαταστήσουμε το “lh” ή “li” με «le» η εκφώνηση ομοιάζει πολύ περισσότερο με το ελληνικό φώνημα «λη», όμως ακόμα η λέξη μας ακούγεται κοφτά.

Kaleispeera – Αν προσθέσουμε ένα ακόμα e στο “pera” φώνημα η εκφορά θα είναι λιγότερο κοφτή και πιο πειστική.

 

Με αυτά τα τρικ πάνω στην εκφορά των αγγλικών φωνημάτων μπορείς να βελτιώσεις ως έναν βαθμό την εκφώνηση ελληνικών κειμένων από το SAPI. Από την άλλη πλευρά μπορείς να δεις μηχανές που υποστηρίζουν ελληνικά φωνήματα όπως για παράδειγμα η MBROLA (http://tcts.fpms.ac.be/synthesis/) οπότε η ποιότητα της εκφώνησης αναβαθμίζεται σημαντικά.

 

Καλή συνέχεια.

 

Υ.Γ.

Η Vodafone και οι υπόλοιπες εταιρίες χρησιμοποιούν μαγνητοφωνημένες οδηγίες τις οποίες αναπαράγει απλά την κατάλληλη στιγμή (και σε κατάλληλη σειρά -πχ. υπόλοιπο διαθέσιμου χρόνου κτλ) ο υπολογιστής.

Δημοσ.

Και πως θα βάλουμε τα φωνήματα μέσα στο πρόγραμμα? Αν ξέρεις τον τρόπο με άλλη γλώσσα εκτός από C μπορείς να μου πεις?

Δημοσ.

Καταρχήν, το πρόγραμμα που έχεις ήδη δημοσιεύσει περνάει κανονικά στο Visual Studio 2008 οπότε είναι μια καλή βάση για να ξεκινήσεις. Από εκεί και πέρα όταν λες πως θα βάλεις τα φωνήματα σε αυτό αν εννοείς πως θα γράψεις το προς εκφώνηση κείμενο (string) πολύ απλά αντικαθιστώντας το περιεχόμενο του L”Hello” με εκείνο που επιθυμείς (πχ. L” Kaleispeera”). Αν από την άλλη πλευρά θέλεις να κατασκευάσεις δικά σου ηχητικά φωνήματα δίχως την χρήση κάποιας έτοιμης μηχανής (όπως είναι το SAPI που χρησιμοποιεί ο κώδικας που ανάρτησες ή η MBROLA) τότε δεν μπορώ να σε βοηθήσω διότι το θέμα είναι εξαιρετικά πολύπλοκο αφού θα πρέπει να ηχογραφήσεις και ύστερα να τροποποιείς με συγκεκριμένους γραμματικούς και συντακτικούς κανόνες τον ήχο που θες να εκφέρεις. Αλλά δεν νομίζω ότι θες κάτι τέτοιο. Τώρα πέρα από C, χμ.. θα μπορούσες να δεις για παράδειγμα την VB (ή κάποια άλλη γλώσσα) αλλά θα πρέπει να μάθεις πως μπορείς να χρησιμοποιήσεις το SAPI/COM σε αυτήν.

Δημοσ.

Φίλε μου απλά θέλω να τα γράφω ελληνικά και να τα μιλάει ελληνικά, όχι greeklish με κόλπα. Νομίζω πως υπάρχουν έτοιμα με τα ελληνικά δε χρειάζεται να τα ηχογραφήσω εγώ.

Δημοσ.
Φίλε μου απλά θέλω να τα γράφω ελληνικά και να τα μιλάει ελληνικά, όχι greeklish με κόλπα. Νομίζω πως υπάρχουν έτοιμα με τα ελληνικά δε χρειάζεται να τα ηχογραφήσω εγώ.

 

Όπως σου έγραψα ήδη, δες προς MBROLA που έχει έτοιμα ελληνικά φωνήματα (τα μιλάει ελληνικά δηλαδή!), τώρα αν μπορεί να εκφωνήσει απευθείας ελληνικούς χαρακτήρες (να τα γράφεις και ελληνικά δηλαδή) δεν το θυμάμαι πια (νομίζω ότι και εκεί χρησιμοποιείς λατινική "φωνητική γραφή" - μπορεί να κάνω λάθος και να δέχεται πια κατευθείαν ελληνικά). Ψάξε το, ποτέ δεν ξέρεις.

 

Καλή τύχη!

Δημοσ.

Ξέρετε πως ακριβώς θα χρησιμοποιήσουμε αυτό, ώστε το πρόγραμμα που θα φτιάξουμε να λειτουργεί κανονικά και σε υπολογιστές που δεν έχουν τον Δημοσθένη εγκατεστημένο;

Δημοσ.

http://en.wikipedia.org/wiki/Speech_synthesis

 

http://msdn.microsoft.com/en-us/library/ms720163(VS.85).aspx

 

Step 3: Setting up voices

 

Once COM is running, the next step is to create the voice. A voice is simply a COM object. Additionally, SAPI uses intelligent defaults. During initialization of the object, SAPI assigns most values automatically so that the object may be used immediately afterward. This represents an important improvement from earlier versions. The defaults are retrieved from Speech properties in Control Panel and include such information as the voice (if more than one is available on your system), and the language (English, Japanese, etc.). While some defaults are obvious, others are not (speaking rate, pitch, etc.). Nevertheless, all defaults may be changed either programmatically or in Speech properties in Control Panel.

 

Setting the pVoice pointer to NULL is not required but is useful for checking errors; this ensures an invalid pointer is not reused, or as a reminder that the pointer has already been allocated or deallocated

 

 

#include <stdafx.h>

#include <sapi.h>

 

int main(int argc, char* argv[])

{

ISpVoice * pVoice = NULL;

 

if (FAILED(::CoInitialize(NULL)))

return FALSE;

 

HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice;);

if( SUCCEEDED( hr ) )

{

pVoice->Release();

pVoice = NULL;

}

 

::CoUninitialize();

return TRUE;

}

 

 

Ξέρετε πως ακριβώς θα χρησιμοποιήσουμε αυτό, ώστε το πρόγραμμα που θα φτιάξουμε να λειτουργεί κανονικά και σε υπολογιστές που δεν έχουν τον Δημοσθένη εγκατεστημένο;

 

το Hello World, ακούγεται ;

 

έχετε ψάξει το θέμα ;

 

.

Δημοσ.

Ναι αυτό που έχω γράψει στην αρχή παίζει κανονικά τα αγγλικά. Ψάχνω όμως για ελληνικά, αν γράψω ελληνικά σε αυτό λέει άλλα κι άλλα

Δημοσ.

τα greeklish,όπως υπεδειξε ο Directx δουλεύουν ;

 

θα μπορούσες να "μεταφράζεις" τα ελληνικά σε greeklish

 

δεν υπάρχει κάποιο αρχείο στο οποίο να δηλώνεις τη γλώσσα και άλλα στοιχεία ;

 

 

υπάρχουν και άλλες προσεγγίσεις στο θέμα απ' ότι είδα

 

μπορείς να απαντάς με σύνθεση έτοιμων λέξεων ή και προτάσεων

τι ζητάει η άσκησή σας;

 

δεν είμαι του "χώρου" :mrgreen:

 

.

Δημοσ.

καλή επιτυχία !

 

 

ελληνικά σε αυτό λέει άλλα κι άλλα

σε ίδια αντιστοιχία - ελληνικά=άλλα κι άλλα πάντα ;

 

.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...