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

Ссылка скопирована
1 ответ

Скрипт загружает на 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"; ?>

<?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)

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)

Проблема

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

Документация

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

Во всем этом немного далек :) Будьте добры пожалуйста помочь.

Дополнительно:

return jsonify({'audio_wav_path': audio_wav_path})

$resp = json_decode($resp); $audio = base64_decode(($resp)->results[0]->audio);

$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);

ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1);

  • А можно по подробней? Я просто чайник в php
  • Gr1t, В объекте, который вы получаете от API нет свойства results. Включите вывод сообщений, и сами увидите предупреждение с номером строки.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

Проблема с возвратом файла .wav с весом 0 байт может возникать по нескольким причинам. Давайте рассмотрим несколько возможных причин и способы их решения.

1. Проверьте, правильно ли вы открываете файл для чтения. Убедитесь, что путь к файлу указан правильно и файл существует. Вот пример кода на PHP, который открывает файл .wav для чтения:

$file = 'example.wav';
$handle = fopen($file, 'rb');

$file = 'example.wav'; $handle = fopen($file, 'rb');

2. Убедитесь, что вы правильно читаете данные из файла. Проверьте, что вы используете правильные функции для чтения данных из файла .wav. Например, для чтения данных из файла .wav можно использовать функции fread() или file_get_contents(). Вот пример кода на PHP для чтения данных из файла .wav:

$data = file_get_contents('example.wav');

$data = file_get_contents('example.wav');

3. Проверьте, не пуст ли файл .wav. Если файл .wav пустой, то его размер будет 0 байт. Это может произойти, если файл был создан некорректно или данные в нем были повреждены. Попробуйте открыть файл .wav в других программах или конвертировать его в другой формат, чтобы убедиться, что он содержит данные.

4. Проверьте, не возникли ли ошибки при чтении файла .wav. Возможно, в процессе чтения файла произошла ошибка, из-за которой данные не были корректно считаны. Убедитесь, что вы обрабатываете ошибки при чтении файла и выводите сообщения об ошибках для дальнейшего анализа.

Если после выполнения вышеперечисленных действий проблема с возвратом файла .wav с весом 0 байт все еще остается, рекомендуется провести более детальное исследование файла .wav, чтобы выявить возможные причины этой проблемы. Возможно, файл был поврежден или создан некорректно, и его необходимо пересоздать или восстановить.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно