Compile++
[kdeaccessibility.git] / kttsd / TODO
blob57dda6eb16e385286c5aa580afe5aaa1ff9e9664
1 _ A GPLed French language synth is available at
2       http://www.cam.org/~nico/cicero
3       
4 _ Possible bug. "<" characters not being properly stored in the .xml file?
6 _ DBUS Interface
7     _ Refactor so that each job is an object and emits signals from
8       object path /org/kde/KSpeechJob_NN.  Apps can receive these signals
9       using
10       
11           QDBus::sessionBus().connect("org.kde.kttsd", QString(),
12           "org.kde.KSpeechJob", "signalname", this, SLOT(slotName()));
13         
14       Thiago tells me that the QString() for object path name will
15       filter on all objects with interface org.kde.KSpeechJob.
16       This is because QtDBus receives all signals.
17       
18       <thiago> right now, I gave it only two rules: "all signals"
19       and "everything whose destination is me"
20       
21       and then filters on what the connect specifies.
22       Once in place, the only signals emitted by KSpeech will be
23       kttsdStarted and kttsdExiting.  Everything else will come
24       from the jobs.  In theory, this means that apps that aren't
25       interesting in tracking jobs don't need to receive those events,
26       but OTOH, if an app is receiving any events, then it
27       chances are it is interested in most/all of the events.
28       The only real advantage to this change is that apps that are
29       interesting in tracking only a single job can receive those
30       signals and don't have to check the appId (assuming they
31       created the job in the first place).  Is this advantage
32       worth the pain of refactoring kttsd?  Thoughts:
33           _ I want to make everything (text, messages, warnings, and SR)
34             jobs so that KttsJobMgr can track all speech.
35           _ There's already an mlTextJob structure, so converting that
36             to an object won't be that hard.
37       
38     _ Add setFriendlyName(QString &name) to interface and
39       QString getFriendlyName(QString &appId) so that friendly names
40       can be displayed in KttsJobMgr.  
41       
42       <thiago> hint: connect to the nameOwnerChange signal from
43       QDBus::sessionBus().busService() to find out when the application
44       :1.120 goes away, so that you can release the resource
45         
46 KDE4 above this line
47 -------------------------------------------------------------------------
48 _ Filters:
49     _ XHTMLtoSSML stylesheet needs work to provide better mappings for most web pages.
50     _ Add KNewStuff capability for folks to upload/download filter configs.
51     _ There should be a default set of filters configured when user first runs KTTSMgr.
52       If user presses Default button, it should ask user whether to replace all existing
53       filters with the standard set.  The standard set should probably include
54       the Qt to Plain Text and Fix Festival Unspeakable Characters filters, but I'm not
55       sure about the latter when desktop is not ISO 8859-1.
56     _ The SBD Filter configuration dialog can be shrunk smaller than the widgets on it.
57       This apparently due to a bug in the QLabel widget when it contains RichText.  If
58       forced to plain text, the problem won't happen (I am told).  However, the WARNING
59       in the dialog needs to be bolded.  What to do?
60 _ Handbook:
61     _ Mention that "Root element is" and "DOCTYPE" are case sensitive.  "html" is not
62       the same as "HTML".  It should stay this way, BTW.  Proper xhtml requires lowercase
63       tags.
64 _ Audio Plugins:
65     _ At least one user experiences a freeze-up using ALSA plugin.  Speak a web page,
66       pause the page, cause a knotify to speak, kttsd freezes.  This appears to be an
67       ALSA device contention problem?  In this situation, there are two alsaplayer objects;
68       one in pause state, and one attempting to speak notify.
69     _ akodelib does not stop instantly when pause() or stop() is called.  See bug:107135.
70     _ Popping noise at the end of each utterance when using ALSA audio plugin.
71     _ Why must Player constructor take a 3rd "args" argument, while PluginProc constructor
72       does not.  They are essentially the same. ??
73     _ Add option to automatically turn down music player volume while speaking (via dcop).
74 _ Festival Interactive plugin:
75     _ Need someone who can read czech to try integrating this into KTTS: 
76       http://www.freebsoft.org/festival-czech
77 _ Command plugin:
78     _ Command plugin encodes text on command line using %t in user's chosen encoding, but
79       if this differs from user's desktop default encoding, doesn't work.  KProcess always
80       encodes command line stuff using user's default encoding.  There is no point, therefore,
81       in attempting to encode it differently, just mangles the text even more.  Short of modifying
82       KProcess, I see no way around this.  But perhaps a warning to user advising to use %f instead?
83     _ Command plugin crashes when using command 'flite -t "%t"' and flite can't get write access to /dev/dsp*.
84 _ Hadifix plugin:
85     _ When stopText() is called, and Hadifix process is killed, the temporary wav file is not deleted,
86       despite QFile::remove call.  Possibly still locked by exiting mbrola process?  This only seems
87       to happen in the configuration dialog when canceling Tests.
88 _ KTTSMgr:
89     _ Speech is paused when showing tooltip when mouse cursor is placed over tray icon.
90     _ Give Talkers a Talker Name entered by user.  Show this name in Jobs tab, Change Talker screen,
91       and in systray menu.
92     _ Change the Current Sentence panel to show the current sentence of the selected job?  If selected
93       job is not the currently speaking job, won't show currently-speaking text anymore.  However, would
94       be helpful when using advance/rewind buttons.  Perhaps to be effective, if the currently-selected
95       job IS the currently speaking job, and that job finishes, would automatically select the next
96       speaking job?  But that could become confusing for users with selection jumping around.
97     _ Add ability to quickly pick default Talker in systray menu.
98     _ KCMultiDialog has a bug that won't allow sizing the screen narrower than 640.
99     _ Overall Audio Speed should be a realtime setting, i.e., not necessary to click Apply.
100     _ Disable Audio Speed control if sox not installed (configure.in.in but runtime check would be better).
101     _ Add drag N drop for the Talkers so it is easier to change the ordering.
102     _ It is possible to configure multiple instances of Talkers with the exact same configuration.
103     _ In kcmkttsmgr, use setHelp() to set help anchor based on current tab.
104     _ Add playback controls to kttsmgr.  Volume, pause.  Maybe rewind?
105 _ KTTSD:
106     _ I am told that when kttsd crashes, it can take knotify down with it.  See about
107       "disconnecting" knotify from kttsd (using post to Qt event queue).
108     _ Strange msg being produced by KIO::move, but it works fine. ??
109         kio (KIOJob): stat file:///home/kde-devel/.kde/share/apps/kttsd/audio/kttsd-5-1.wav
110         kio (KIOJob): error 11 /home/kde-devel/.kde/share/apps/kttsd/audio/kttsd-5-1.wav
111         kio (KIOJob): This seems to be a suitable case for trying to rename before stat+[list+]copy+del
112     _ While kttsd currently configures a Talker automatically, would be nice if it could
113       autoconfigure talkers for each requested language, if one has not already been configured.
114     _ Add support for speech markers.
115     _ Implement error signal handling in KTTSD.
116     _ Add support for JSML and other Speech Markup languages.
117     _ Add method for apps to play a sound file, including in the middle of a job.
118       Could be done with SSML or with special Talker Code = "sound".
119 _ Other/General:
120     _ Save buttons should confirm if user chooses an existing file.  KFileDialog doesn't seem to
121       offer this option, but shouldn't it?
122     _ .desktop files must have a Type keyword, but what to use for kcmkttsd_testmessage.desktop?
123     _ Add option to kill plugin process when no longer needed so that memory can be recovered.
124       Or maybe some sort of "nice" setting so that process will be swapped out when no longer needed.
125     _ Convert to KConfig XT.
126     _ Add a plugin for TuxTalk, http://tuxtalk.sourceforge.net/.  Since it only supports
127       English (at the moment) and is alpha, don't think it is worth it now.
128     _ Add a plugin for dhvani, an Indian and Hindi TTS engine, http://dhvani.sourceforge.net/
129       Currently written in c, but it looks like future versions will require Java VM.
130       Main problem at the moment is that dhvani sends audio directly to /dev/dsp with no option
131       to send to a wav file.
132     _ Investigate what is involved in getting Gnopernicus screen reader to use KTTSD.
133     _ IBM ViaVoice plugin?
134     _ Add KTTS plugin to aKregator.