[Mono-dev] Festival TTS Wrapper

R. Tyler Ballance tyler at monkeypox.org
Tue Oct 30 01:23:54 EDT 2007


On Oct 29, 2007, at 4:17 PM, buhochileno at gmail.com wrote:

> Sorry to disapoint you, but my wrapper is not even a "server" call  
> to the festival TTS, is more cheating :-), is only a wrapper for a C  
> shared library that send the correct "echo $MESSAGE | festival -- 
> tts" :-) , I also see the posibility to try a more sofisticate  
> wrapper, but as you say is to much complicate, so this is a working  
> approach :-)

A novel approach to say the least, but I agree, it's not great, but  
it's a start :)

> I attach the C shared library and the C# wraper with a simple test  
> program.
>
> May be we can work in a better wrapper.

I also agree on this :)

I think we should consider approaching "managed text-to-speech" from  
the side of Flite instead of Festival (I think lupus actually  
suggested this when I was first discussing it on #mono, but I  
foolishly went ahead with trying for Festival anyways). The one core  
thing I started to do with my wrapper (from here out referred to as  
Tao.Festival) was provide support for both a server-oriented Festival  
interface, i.e. connecting on the Festival's port (1234 I believe) and  
then performing the commands, or using a C#->C->C++ wrapper I had  
written to take advantage of libFestival.a which is usually installed  
on most Linux systems when the Festival package is added. I had not  
started on the server-oriented code yet, but had the wrappers in place  
for relying on libFestival which proved to be "a stupid idea" and will/ 
would cause the entire Mono process to SIGSEGV every single time  
because of some of the intricacies to native platform interop with  
code that's *so* expectant on being statically linked *always* as  
Festival is. I can upload the code to my anonymous Subversion  
repository, but I think it's only worth it from a "research"  
perspective in seeing why exactly Festival is a bad route to go with :)

Our end goal is easy to define I think, ideally we would want to  
provide developers with the following calls:
	Mono.Speech.SayText("Hello Monkeys!");
	Mono.Speech.SayText("Hello Monkeys!", FileStream,  
Mono.Speech.WaveFileType);

I suggest you look at the following for an idea on why Flite will be  
far easier:
	http://www.speech.cs.cmu.edu/flite/doc/flite_7.html#SEC17

I will try to port my existing design of Tao.Festival over to  
something more Flite-based this weekend, at the very least to evaluate  
whether or not Flite will truly be a better option than Festival, and  
to evaluate whether the concept will *actually* work.

As much as I would love to be able to provide compatibility with  
Microsoft's new System.Speech.Synthesis API, I just don't think that's  
ever going to be possible given the state of open source speech  
synthesis systems (unless somebody writes a fully managed one on Mono  
of course :)). So maybe would should just strive for providing  
something that Gtk# developers can use, specifically in some of the  
applications Novell includes in their SUSE distribution (how cool  
would it be for Banshee to tell you what song it's "spinning up" next  
like a DJ!)

I'm tremendously busy during the week, but I'll post something this  
weekend after I'm able to set aside some time to get back to TTS and  
wrapping crazy interop code around legacy C (Flite's last release was  
almost 3 and a half years ago).

Glad to see somebody else is interested though! :)

Cheers,
-R. Tyler Ballance


p.s.  using Apple's Carbon APIs for Speech Synthesis, this  
hypothetical Mono.Speech API could also work on Mac OS X :-D




More information about the Mono-devel-list mailing list