All checks were successful
Deploy ASP.NET MVC to OCI / build-and-deploy (push) Successful in 17m26s
82 lines
2.6 KiB
C#
82 lines
2.6 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Convert_It_Online.Services;
|
|
|
|
namespace Convert_It_Online.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/tts")]
|
|
public class TtsApiController : ControllerBase
|
|
{
|
|
private readonly ITextToSpeechService _ttsService;
|
|
private readonly ILogger<TtsApiController> _logger;
|
|
|
|
public TtsApiController(ITextToSpeechService ttsService, ILogger<TtsApiController> logger)
|
|
{
|
|
_ttsService = ttsService;
|
|
_logger = logger;
|
|
}
|
|
|
|
[HttpPost("generate")]
|
|
public async Task<IActionResult> Generate([FromBody] TtsRequest request)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(request.Text))
|
|
{
|
|
return BadRequest("Texto é obrigatório.");
|
|
}
|
|
|
|
// Limitar tamanho do texto para evitar abusos
|
|
if (request.Text.Length > 5000)
|
|
{
|
|
return BadRequest("Texto muito longo. Máximo de 5000 caracteres.");
|
|
}
|
|
|
|
try
|
|
{
|
|
_logger.LogInformation("Gerando áudio TTS: {Length} caracteres, idioma: {Lang}, gênero: {Gender}",
|
|
request.Text.Length, request.Language, request.Gender);
|
|
|
|
var audioBytes = await _ttsService.GenerateAudioAsync(
|
|
request.Text,
|
|
request.Language ?? "pt-br",
|
|
request.Rate ?? 1.0f,
|
|
request.Gender ?? "f"
|
|
);
|
|
|
|
// Retornar como JSON com base64
|
|
var base64Audio = Convert.ToBase64String(audioBytes);
|
|
return Ok(new TtsResponse
|
|
{
|
|
Audio = base64Audio,
|
|
Format = "ogg",
|
|
Size = audioBytes.Length
|
|
});
|
|
}
|
|
catch (InvalidOperationException ex)
|
|
{
|
|
_logger.LogWarning(ex, "TTS não disponível");
|
|
return StatusCode(503, "Serviço de síntese de voz não disponível no momento.");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Erro ao gerar áudio TTS");
|
|
return StatusCode(500, "Erro ao gerar áudio.");
|
|
}
|
|
}
|
|
}
|
|
|
|
public class TtsRequest
|
|
{
|
|
public string Text { get; set; } = string.Empty;
|
|
public string? Language { get; set; }
|
|
public float? Rate { get; set; }
|
|
public string? Gender { get; set; }
|
|
}
|
|
|
|
public class TtsResponse
|
|
{
|
|
public string Audio { get; set; } = string.Empty;
|
|
public string Format { get; set; } = "ogg";
|
|
public int Size { get; set; }
|
|
}
|
|
}
|