Как получить эквивалентный шаг преобразования текста в речь Google в Android

#android #google-cloud-platform #google-text-to-speech

#Android #google-облачная платформа #google-преобразование текста в речь

Вопрос:

Я «создал» пользовательский голос Google TTS, установив здесь высоту тона и скорость речи.

Значение, которое я выбрал для шага, отрицательное (-6,4), и я хочу использовать точные значения в своем приложении для Android.

Однако TextToSpeech.setPitch(float) не может принимать отрицательные значения. Вот код из android.speech.tts.TextToSeech :

 public int setPitch(float pitch) {
  if (pitch > 0.0f) {
    int intPitch = (int)(pitch * 100);
    if (intPitch > 0) {
      synchronized (mStartLock) {
        mParams.putInt(Engine.KEY_PARAM_PITCH, intPitch);
      }
      return SUCCESS;
    }
  }
  return ERROR;
}
  

Мне нужна помощь в определении эквивалентного положительного значения, которое было бы эквивалентно -6,4. Похоже, я не могу просто экстраполировать значение, используя относительные шкалы [-20, 20] (по умолчанию: 0) в веб-интерфейсе и, по-видимому, [25, 400] (по умолчанию: 100) из библиотеки Android. Последнее получено из com.android.settings.tts.TextToSpeechSettings , доступно здесь:

     /**
     * Speech pitch value. TTS pitch value varies from 25 to 400, where 100 is the value for normal
     * pitch. The max pitch value is set to 400, based on feedback from users and the GoogleTTS
     * pitch variation range. The range for pitch is not set in stone and should be readjusted based
     * on user need. This value should be kept in sync with the max value set in tts_settings xml.
     */
    private static final int MAX_SPEECH_PITCH = 400;
    private static final int MIN_SPEECH_PITCH = 25;
  

Спасибо за ваше время.

Ответ №1:

Я не уверен, как значение по умолчанию 0 (веб-интерфейс) может быть равно 100 (библиотека Android), но, возможно, эта формула сработает.

Вы можете попробовать использовать эту формулу:

A_MIN_SPEECH_PITCH = -20;

A_MAX_SPEECH_PITCH = 20;

B_MIN_SPEECH_PITCH = 25;

B_MAX_SPEECH_PITCH = 400;

a_speech_pitch = // Желаемый шаг

b_speech_pitch = (B_MAX_SPEECH_PITCH — B_MIN_SPEECH_PITCH) * ((a_speech_pitch — A_MIN_SPEECH_PITCH) / (A_MAX_SPEECH_PITCH — A_MIN_SPEECH_PITCH)) B_MIN_SPEECH_PITCH;

Тестовый пример # 1

a_speech_pitch = -20

b_speech_pitch = (400-25) * ((-20-(-20))/(20-(-20))) 25 = 25

Тестовый пример # 2

a_speech_pitch = 0

b_speech_pitch = (400-25) * ((0-(-20))/(20-(-20))) 25 = 212.5

Тестовый пример # 3

a_speech_pitch = 20

b_speech_pitch = (400-25) * ((20-(-20))/(20-(-20))) 25 = 400

Тестовый пример # 4

a_speech_pitch = -6,4

b_speech_pitch = (400-25) * ((-6.4-(-20))/(20-(-20))) 25 = 152.5

Комментарии:

1. Спасибо за попытку, но, как уже говорилось, я не могу просто экстраполировать, как вы. Похоже, что линейной зависимости нет. высота тона 0,5 (50) в моем случае звучит довольно близко к -6,4.