Задать вопрос
@Gr1t

Почему возвращает .wav с весом 0байт?

Скрипт загружает на api текст и должен возвращать преобразованный голос в .wav формате. (TTS to RVC)

Вот сам код
<?php
	include ('options.php');
	
	function englishToRussian($text) {
        $conversion = [
            'q' => 'к', 'w' => 'в', 'e' => 'и', 'r' => 'р', 't' => 'т',
            'y' => 'й', 'u' => 'у', 'i' => 'и', 'o' => 'о', 'p' => 'п',
            'a' => 'а', 's' => 'с', 'd' => 'д',
            'f' => 'ф', 'g' => 'г', 'h' => 'х', 'j' => 'ж', 'k' => 'к',
            'l' => 'л', 'z' => 'з', 'x' => 'кс',
            'c' => 'с', 'v' => 'в', 'b' => 'б', 'n' => 'н', 'm' => 'м',
            // Добавьте больше символов по мере необходимости.
        ];
        
        return strtr($text, $conversion);
    }
	
	
	$speaker = $_POST['speaker'];
	$text = $_POST['text'];
    $text = englishToRussian($text);
    $text = str_replace("Патрик", "П+атрик", $text);
    
    
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "http://192.168.0.103:3000/generate_voice");
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json'));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);


    $data['sample_rate'] = intval(24000);
    $data['text'] = $text;
    $data['speaker'] = $speaker;
    $data['format'] = "wav";
    $data = json_encode($data);
    
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    $resp = curl_exec($curl);
    curl_close($curl);
    
    $resp = json_decode($resp);
    $audio = base64_decode(($resp)->results[0]->audio);
    
    $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $filename = substr(str_shuffle($permitted_chars), 0, 16) . '.wav';
    
	
    file_put_contents("media/$filename", $audio);
    echo "http://localhost/media/$filename";
?>


Код API
from flask import Flask, request, jsonify
from gradio_client import Client

app = Flask(__name__)
gradio_client = Client("http://127.0.0.1:7860/")

@app.route('/generate_voice', methods=['POST'])
def generate_voice():
    try:
        input_text = request.json['text']
        input_speaker = request.json['speaker']

        result = gradio_client.predict(
            input_speaker,
            0,
            input_text,
            'ru-RU-DmitryNeural-Male',
            5,
            "pm",
            0,
            0,
            fn_index=0
        )

        audio_wav_path = result[2]

        return jsonify({'audio_wav_path': audio_wav_path})
    except Exception as e:
        return jsonify({'error': str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000)

Проблема
64f5735c4f8a3043503914.png

Документация
64f57737a08c0197386613.png

Во всем этом немного далек :) Будьте добры пожалуйста помочь.
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
return jsonify({'audio_wav_path': audio_wav_path})

$resp = json_decode($resp);
$audio = base64_decode(($resp)->results[0]->audio);
Вам ничего не кажется странным в этих фрагментах кода?
А вообще, при разработке в PHP надо включать вывод всех ошибок и предупреждений:
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы