-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathget_voices.php
81 lines (70 loc) · 2.39 KB
/
get_voices.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
require __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
use Google\ApiCore\ApiException;
use Google\Cloud\TextToSpeech\V1\TextToSpeechClient;
const LANGUAGES_DISPLAY = [
'fr-FR' => 'Français (France)',
'en-US' => 'English (United States)',
'de-DE' => 'Deutsch (Deutschland)',
'pt-PT' => 'Português (Portugal)',
'pt-BR' => 'Português (Brasil)'
];
function get_language_text( string $language ) : string {
if( !isset(LANGUAGES_DISPLAY[ $language ]) ) {
return '';
}
return LANGUAGES_DISPLAY[ $language ];
}
function get_language_code( string $language_code ) : string {
$languages_codes = array_flip(LANGUAGES_DISPLAY);
if( !isset($languages_codes[ $language_code ]) ) {
return '';
}
return $languages_codes[ $language_code ];
}
/**
* Return array of available voices for provided languages
*
* @param array|string[] $languages
*
* @return array|false
*/
function get_voices( array $languages = [ 'fr-FR', 'en-US', 'en-GB', 'de-DE', 'pt-PT' ] ) {
// create client object
$client = new TextToSpeechClient();
try {
// perform list voices request
$available_voices = $client->listVoices()->getVoices();
// init empty voices array
$voices = [];
// SSML voice gender values from TextToSpeech\V1\SsmlVoiceGender
$ssmlVoiceGender = [ 'Genre inconnu', 'Homme', 'Femme', 'Neutre' ];
foreach( $languages as $language ) {
foreach( $available_voices as $voice ) {
foreach( $voice->getLanguageCodes() as $languageCode ) {
if( $languageCode === $language ) {
$language_text = get_language_text($language);
$voices[$language_text][ $voice->getName() ] =
sprintf("%s (%s)",
$voice->getName(),
$ssmlVoiceGender[ $voice->getSsmlGender() ]
);
}
}
}
if( isset( $language_text ) && isset($voices[ $language_text ]) && is_array($voices[ $language_text ]) ) {
asort($voices[ $language_text ]);
}
}
return $voices;
// return array_merge(...array_values($voices));
}
catch( ApiException $e ) {
print_r($e->getMessage());
} finally {
$client->close();
}
return false;
}