staging/speakup: Add inflection synth parameter
authorSamuel Thibault <samuel.thibault@ens-lyon.org>
Sat, 25 Apr 2020 19:32:26 +0000 (21:32 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Apr 2020 12:30:10 +0000 (14:30 +0200)
The inflection parameter, i.e. the pitch range, allows to change the
expressiveness of the synthesized voice.  This is supported by the DEC
talk synths, and software synthesizers such as espeak/espeak-ng.

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Link: https://lore.kernel.org/r/20200425193226.nv3zfd4k3xavi353@function
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/speakup/speakup_decext.c
drivers/staging/speakup/speakup_decpc.c
drivers/staging/speakup/speakup_dectlk.c
drivers/staging/speakup/speakup_dummy.c
drivers/staging/speakup/speakup_soft.c
drivers/staging/speakup/spk_types.h
drivers/staging/speakup/spkguide.txt
drivers/staging/speakup/sysfs-driver-speakup
drivers/staging/speakup/varhandlers.c

index ddbb7e97d118348ff8bc4ecade7fb1df7d7bc3b4..7408eb29cf3893fc64f0e07bced6103f38229d6c 100644 (file)
@@ -43,6 +43,7 @@ static struct var_t vars[] = {
        { CAPS_STOP, .u.s = {"[:dv ap 100]" } },
        { RATE, .u.n = {"[:ra %d]", 7, 0, 9, 150, 25, NULL } },
        { PITCH, .u.n = {"[:dv ap %d]", 100, 0, 100, 0, 0, NULL } },
+       { INFLECTION, .u.n = {"[:dv pr %d] ", 100, 0, 10000, 0, 0, NULL } },
        { VOL, .u.n = {"[:dv gv %d]", 13, 0, 16, 0, 5, NULL } },
        { PUNCT, .u.n = {"[:pu %c]", 0, 0, 2, 0, 0, "nsa" } },
        { VOICE, .u.n = {"[:n%c]", 0, 0, 9, 0, 0, "phfdburwkv" } },
@@ -59,6 +60,8 @@ static struct kobj_attribute caps_stop_attribute =
        __ATTR(caps_stop, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute pitch_attribute =
        __ATTR(pitch, 0644, spk_var_show, spk_var_store);
+static struct kobj_attribute inflection_attribute =
+       __ATTR(inflection, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute punct_attribute =
        __ATTR(punct, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute rate_attribute =
@@ -87,6 +90,7 @@ static struct attribute *synth_attrs[] = {
        &caps_start_attribute.attr,
        &caps_stop_attribute.attr,
        &pitch_attribute.attr,
+       &inflection_attribute.attr,
        &punct_attribute.attr,
        &rate_attribute.attr,
        &voice_attribute.attr,
index 798c42dfa16ccf00ba2fd2395194e4a56ee06a96..96f24c848cc56329c68e897613ebc9bc8319f0d0 100644 (file)
@@ -139,6 +139,7 @@ static struct var_t vars[] = {
        { CAPS_STOP, .u.s = {"[:dv ap 100]" } },
        { RATE, .u.n = {"[:ra %d]", 9, 0, 18, 150, 25, NULL } },
        { PITCH, .u.n = {"[:dv ap %d]", 80, 0, 100, 20, 0, NULL } },
+       { INFLECTION, .u.n = {"[:dv pr %d] ", 100, 0, 10000, 0, 0, NULL } },
        { VOL, .u.n = {"[:vo se %d]", 5, 0, 9, 5, 10, NULL } },
        { PUNCT, .u.n = {"[:pu %c]", 0, 0, 2, 0, 0, "nsa" } },
        { VOICE, .u.n = {"[:n%c]", 0, 0, 9, 0, 0, "phfdburwkv" } },
@@ -155,6 +156,8 @@ static struct kobj_attribute caps_stop_attribute =
        __ATTR(caps_stop, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute pitch_attribute =
        __ATTR(pitch, 0644, spk_var_show, spk_var_store);
+static struct kobj_attribute inflection_attribute =
+       __ATTR(inflection, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute punct_attribute =
        __ATTR(punct, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute rate_attribute =
@@ -183,6 +186,7 @@ static struct attribute *synth_attrs[] = {
        &caps_start_attribute.attr,
        &caps_stop_attribute.attr,
        &pitch_attribute.attr,
+       &inflection_attribute.attr,
        &punct_attribute.attr,
        &rate_attribute.attr,
        &voice_attribute.attr,
index dccb4ea29d379f27e8298d307ad7fe2d015a0f29..780214b5ca16ea98e2809f1a0a6398604c62dea3 100644 (file)
@@ -44,7 +44,7 @@ static struct var_t vars[] = {
        { CAPS_START, .u.s = {"[:dv ap 160] " } },
        { CAPS_STOP, .u.s = {"[:dv ap 100 ] " } },
        { RATE, .u.n = {"[:ra %d] ", 180, 75, 650, 0, 0, NULL } },
-       { PITCH, .u.n = {"[:dv ap %d] ", 122, 50, 350, 0, 0, NULL } },
+       { INFLECTION, .u.n = {"[:dv pr %d] ", 100, 0, 10000, 0, 0, NULL } },
        { VOL, .u.n = {"[:dv g5 %d] ", 86, 60, 86, 0, 0, NULL } },
        { PUNCT, .u.n = {"[:pu %c] ", 0, 0, 2, 0, 0, "nsa" } },
        { VOICE, .u.n = {"[:n%c] ", 0, 0, 9, 0, 0, "phfdburwkv" } },
@@ -61,6 +61,8 @@ static struct kobj_attribute caps_stop_attribute =
        __ATTR(caps_stop, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute pitch_attribute =
        __ATTR(pitch, 0644, spk_var_show, spk_var_store);
+static struct kobj_attribute inflection_attribute =
+       __ATTR(inflection, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute punct_attribute =
        __ATTR(punct, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute rate_attribute =
@@ -89,6 +91,7 @@ static struct attribute *synth_attrs[] = {
        &caps_start_attribute.attr,
        &caps_stop_attribute.attr,
        &pitch_attribute.attr,
+       &inflection_attribute.attr,
        &punct_attribute.attr,
        &rate_attribute.attr,
        &voice_attribute.attr,
index 7df1a84297f632784aaaf756c5ed63759bf9a04e..e393438af81bd652aeb3ffee58a5a2f2e8d5dd5d 100644 (file)
@@ -24,6 +24,7 @@ static struct var_t vars[] = {
        { PAUSE, .u.s = {"PAUSE\n"} },
        { RATE, .u.n = {"RATE %d\n", 8, 1, 16, 0, 0, NULL } },
        { PITCH, .u.n = {"PITCH %d\n", 8, 0, 16, 0, 0, NULL } },
+       { INFLECTION, .u.n = {"INFLECTION %d\n", 8, 0, 16, 0, 0, NULL } },
        { VOL, .u.n = {"VOL %d\n", 8, 0, 16, 0, 0, NULL } },
        { TONE, .u.n = {"TONE %d\n", 8, 0, 16, 0, 0, NULL } },
        { DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL } },
@@ -39,6 +40,8 @@ static struct kobj_attribute caps_stop_attribute =
        __ATTR(caps_stop, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute pitch_attribute =
        __ATTR(pitch, 0644, spk_var_show, spk_var_store);
+static struct kobj_attribute inflection_attribute =
+       __ATTR(inflection, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute rate_attribute =
        __ATTR(rate, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute tone_attribute =
@@ -65,6 +68,7 @@ static struct attribute *synth_attrs[] = {
        &caps_start_attribute.attr,
        &caps_stop_attribute.attr,
        &pitch_attribute.attr,
+       &inflection_attribute.attr,
        &rate_attribute.attr,
        &tone_attribute.attr,
        &vol_attribute.attr,
index f591ec0955826e608903757bc0de63821a55b62a..9a7029539f35ddfa30d3535c447f9315c2198f9c 100644 (file)
@@ -38,6 +38,7 @@ static struct var_t vars[] = {
        { PAUSE, .u.n = {"\x01P" } },
        { RATE, .u.n = {"\x01%ds", 2, 0, 9, 0, 0, NULL } },
        { PITCH, .u.n = {"\x01%dp", 5, 0, 9, 0, 0, NULL } },
+       { INFLECTION, .u.n = {"\x01%dr", 5, 0, 9, 0, 0, NULL } },
        { VOL, .u.n = {"\x01%dv", 5, 0, 9, 0, 0, NULL } },
        { TONE, .u.n = {"\x01%dx", 1, 0, 2, 0, 0, NULL } },
        { PUNCT, .u.n = {"\x01%db", 0, 0, 2, 0, 0, NULL } },
@@ -57,6 +58,8 @@ static struct kobj_attribute freq_attribute =
        __ATTR(freq, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute pitch_attribute =
        __ATTR(pitch, 0644, spk_var_show, spk_var_store);
+static struct kobj_attribute inflection_attribute =
+       __ATTR(inflection, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute punct_attribute =
        __ATTR(punct, 0644, spk_var_show, spk_var_store);
 static struct kobj_attribute rate_attribute =
@@ -96,6 +99,7 @@ static struct attribute *synth_attrs[] = {
        &freq_attribute.attr,
 /*     &lang_attribute.attr, */
        &pitch_attribute.attr,
+       &inflection_attribute.attr,
        &punct_attribute.attr,
        &rate_attribute.attr,
        &tone_attribute.attr,
index fc6a9416829c58ec5b04bb7443d349ccc48f0ef4..d3272c6d199aaabe08d0caef0dc53a1dbd378357 100644 (file)
@@ -42,7 +42,8 @@ enum var_id_t {
        SAY_CONTROL, SAY_WORD_CTL, NO_INTERRUPT, KEY_ECHO,
        SPELL_DELAY, PUNC_LEVEL, READING_PUNC,
        ATTRIB_BLEEP, BLEEPS,
-       RATE, PITCH, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG, DIRECT, PAUSE,
+       RATE, PITCH, INFLECTION, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG,
+       DIRECT, PAUSE,
        CAPS_START, CAPS_STOP, CHARTAB,
        MAXVARS
 };
index c23549c54c3c1e6096c948c482e525119fb18604..1e622cd34363395b043bb19959cd4f1725df6e6c 100644 (file)
@@ -406,6 +406,7 @@ freq
 full_time
 jiffy_delta
 pitch
+inflection
 punct
 rate
 tone
@@ -518,9 +519,9 @@ All the entries in the Speakup sys system are readable, some are
 writable by root only, and some are writable by everyone.  Unless you
 know what you are doing, you should probably leave the ones that are
 writable by root only alone.  Most of the names are self explanatory.
-Vol for controlling volume, pitch for pitch, rate for controlling speaking
-rate, etc.  If you find one you aren't sure about, you can post a query
-on the Speakup list.
+Vol for controlling volume, pitch for pitch, inflection for pitch range, rate
+for controlling speaking rate, etc.  If you find one you aren't sure about, you
+can post a query on the Speakup list.
 
 6.  Changing Synthesizers
 
index be3f5d6962e90c639d056700e4947510aff94216..c6a32c434ce92a3e0e7daa16864ba931fc4631d2 100644 (file)
@@ -325,6 +325,12 @@ KernelVersion:     2.6
 Contact:       speakup@linux-speakup.org
 Description:   Gets or sets the pitch of the synthesizer. The range is 0-9.
 
+What:          /sys/accessibility/speakup/soft/inflection
+KernelVersion: 5.8
+Contact:       speakup@linux-speakup.org
+Description:   Gets or sets the inflection of the synthesizer, i.e. the pitch
+               range. The range is 0-9.
+
 What:          /sys/accessibility/speakup/soft/punct
 KernelVersion: 2.6
 Contact:       speakup@linux-speakup.org
index 5741d1cb6227dd8fd59ae358368f8534e828bbcb..d7f6bec7ff06f6439e12b2d818a12cc91143bae9 100644 (file)
@@ -37,6 +37,7 @@ static struct st_var_header var_headers[] = {
        { "bell_pos", BELL_POS, VAR_NUM, &spk_bell_pos, NULL },
        { "rate", RATE, VAR_NUM, NULL, NULL },
        { "pitch", PITCH, VAR_NUM, NULL, NULL },
+       { "inflection", INFLECTION, VAR_NUM, NULL, NULL },
        { "vol", VOL, VAR_NUM, NULL, NULL },
        { "tone", TONE, VAR_NUM, NULL, NULL },
        { "punct", PUNCT, VAR_NUM, NULL, NULL   },