Я создал услугу PHP, которая называет Google Cloud Text-To-Speek и пишет аудиоконтент (Base64-Decode) непосредственно в MP3-файл. Когда я предпочитаю жесткую фразу (например, «ein moment der ruhe…» m, которая является той же фразой, которую выявляют как динамический текст), она отличается от того, что не потеряны-но как только начинается мой динамический текст, первые 1–2 слова всегда исчезают или режут. Таким образом, они больше не первые слова, но все еще «исчезли в». Что еще я могу попытаться гарантировать, что самый первый слог динамического текста не потерян? < /P>
namespace App\Services;
class GoogleTtsService extends TtsService
{
private const API_URL = 'https://texttospeech.googleapis.com/v1/text:synthesize';
public function synthesize(string $text, array $options, string $outputPath, string $apiKey): bool
{
$breakMs = defined('TTS_INITIAL_BREAK_MS') ? TTS_INITIAL_BREAK_MS : 100;
// This hard-coded phrase plays fine
$ssml = ''
. 'Ein Moment der Ruhe...'
. '
'
. htmlspecialchars($text, ENT_QUOTES|ENT_XML1, 'UTF-8') // this never plays fine
. '';
$payload = [
'input' => ['ssml' => $ssml],
'voice' => [
'languageCode' => $options['language'] ?? 'de-DE',
'name' => $options['voice'] ?? 'de-DE-Standard-A'
],
'audioConfig' => [
'audioEncoding' => 'MP3',
'speakingRate' => $options['speed'] ?? 1.0
]
];
$response = $this->postJson(self::API_URL . '?key=' . urlencode($apiKey), $payload);
if (empty($response['audioContent'])) {
return false;
}
$audioData = base64_decode($response['audioContent']);
return file_put_contents($outputPath, $audioData) !== false;
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ould-think