All checks were successful
Deploy ASP.NET MVC to OCI / build-and-deploy (push) Successful in 22m1s
68 lines
2.2 KiB
C#
68 lines
2.2 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}",
|
|
request.Text.Length, request.Language);
|
|
|
|
var audioBytes = await _ttsService.GenerateAudioAsync(
|
|
request.Text,
|
|
request.Language ?? "pt-BR",
|
|
request.Rate ?? 1.0f,
|
|
request.Pitch ?? 1.0f
|
|
);
|
|
|
|
return File(audioBytes, "audio/ogg", "audio.ogg");
|
|
}
|
|
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 float? Pitch { get; set; }
|
|
}
|
|
}
|