Convert-it/Controllers/TtsApiController.cs
Ricardo Carneiro f8f052428f
All checks were successful
Deploy ASP.NET MVC to OCI / build-and-deploy (push) Successful in 22m1s
fix: features de audio
2026-01-26 09:37:47 -03:00

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; }
}
}