expo-speechでテキスト読み上げ(TTS)を実装すると、iOSのみ速度が極端に速く なります。たとえば、rate: 2.0
を指定すると体感で4倍以上になってしまい、「通常の2倍」にしたいのに速すぎて聞き取りづらい、という問題が起こります。
目次
Version
expo-speech: 13.0.1
expo: 52.0.24
プラットフォームごと
Androidは問題ない。iOSも1未満の場合は正常。1以上の時急激に早くなる
- ユーザーには
0.5~2.0
の範囲で調整できるUIを提供したいが、 - そのまま
rate
を iOSに渡すと速すぎる状態が発生する。
- iOSのみに補正をかける
Platform.OS === 'ios'
の場合だけ、ユーザーが選んだ数値(例: 2.0)を直接渡さず、内部で小さめに変換します。 - 線形マッピングや区分関数を使う
たとえば、1.0以下はそのまま、1.0~2.0は1.0~1.4にマッピングすると「2.0」と表示しても実際は1.4を使うため、過度な高速化を防止できます。
function getIosRate(userRate) {
if (userRate <= 1.0) {
return userRate;
} else {
// [1.0, 2.0] → [1.0, 1.4] に線形変換
return 0.4 * userRate + 0.6;
}
}
これにより、プラットフォームを意識しないUIを提供しながら、iOSだけ速度を適切に抑えられます。

LangJournalは、日記を書くことで英語やフランス語などの外国語を学べるアプリです。英語学習に興味がある方や、私が開発したこのアプリに関心を持っている方は、ぜひインストールしてお試しください。
LangJournalのサイトはこちら