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 ddbb7e9..7408eb2 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 798c42d..96f24c8 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 dccb4ea..780214b 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 7df1a84..e393438 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 f591ec0..9a70295 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 fc6a941..d3272c6 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 c23549c..1e622cd 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 be3f5d6..c6a32c4 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 5741d1c..d7f6bec 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   },