#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.