dgiese / dustcloud

Xiaomi Smart Home Device Reverse Engineering and Hacking
GNU General Public License v3.0
2.22k stars 255 forks source link

Any language with this PHP script #346

Open cirolaferrara opened 4 months ago

cirolaferrara commented 4 months ago

Requires mpg123

// Settings
define('LANG_URL', 'https://raw.githubusercontent.com/dgiese/dustcloud/master/devices/xiaomi.vacuum/audio_generator/language');
define('MPG123', 'mpg123.exe');
define('URL', 'https://translate.google.com/translate_tts?ie=UTF-8&q=');
define('LANG', 'it');
define('AGENT', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0');

// Available languages
$availableLanguages = ['ca','cs','de','en','es','fi','fr','it','nl','no','pl','ru','se','tr','uk'];

// Ask for a language
$promptLanguage = readline('Select a language (example it): '); 

// Check if language exists
if(!in_array($promptLanguage, $availableLanguages)) {
    die($promptLanguage. ' not supported!');
}

// Try to download CSV file
$csv = fopen (LANG_URL . '/audio_'. $promptLanguage . '.csv', "r");
if (!$csv) {
    die('Unable to open remote file');
}

// Parse CSV file
while (!feof ($csv)) {
    while (($data = fgetcsv($csv, 1000, ",")) !== FALSE) {
        $fileName = $data[0];
        $text = $data[1];

        // Build Google Translate TTS URL
        $url = URL . urlencode($text) . "&tl=" . LANG . "&client=tw-ob&ttsspeed=1";

        // Try to download mp3 generated file
        $context = stream_context_create(['http' => ['header' => AGENT . "\r\n"]]);
        $response = file_get_contents($url, false, $context);

        if ($response !== false) {
            $tempFile = tempnam(sys_get_temp_dir(), $fileName);
            file_put_contents($tempFile, $response);

            // Convert MP3 to WAV file
            exec(MPG123.' -q -w '.$fileName. ' '. $tempFile);

            // Print successful message
            echo $fileName . ' generated!'.PHP_EOL;
        }
    }

    // Print help message
    echo 'Upload *.wav files into /opt/rockrobo/resources/sounds dir (worked for me)';
}