All checks were successful
Deploy ASP.NET MVC to OCI / build-and-deploy (push) Successful in 17m22s
95 lines
3.5 KiB
C#
95 lines
3.5 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Convert_It_Online.Services;
|
|
using Microsoft.AspNetCore.Localization;
|
|
using Microsoft.Extensions.Localization;
|
|
using System.IO;
|
|
|
|
namespace Convert_It_Online.Areas.AudioTools.Controllers
|
|
{
|
|
[Area("AudioTools")]
|
|
[Route("{culture}/[area]/[controller]")]
|
|
[Route("[area]/[controller]")]
|
|
public class SpeechToTextController : Controller
|
|
{
|
|
private readonly IAudioTranscriptionService _transcriptionService;
|
|
private readonly ILogger<SpeechToTextController> _logger;
|
|
private readonly IStringLocalizer<SharedResource> _localizer;
|
|
|
|
public SpeechToTextController(IAudioTranscriptionService transcriptionService,
|
|
ILogger<SpeechToTextController> logger,
|
|
IStringLocalizer<SharedResource> localizer)
|
|
{
|
|
_transcriptionService = transcriptionService;
|
|
_logger = logger;
|
|
_localizer = localizer;
|
|
}
|
|
|
|
private void SetViewBag()
|
|
{
|
|
ViewBag.HomeLink = _localizer["HomeLink"];
|
|
ViewBag.TextMenuTitle = _localizer["TextMenuTitle"];
|
|
ViewBag.DocumentMenuTitle = _localizer["DocumentMenuTitle"];
|
|
ViewBag.ImageMenuTitle = _localizer["ImageMenuTitle"];
|
|
ViewBag.CaseConverterTitle = _localizer["CaseConverterTitle"];
|
|
ViewBag.PdfToTextTitle = _localizer["PdfToTextTitle"];
|
|
ViewBag.PdfBarcodeTitle = _localizer["PdfBarcodeTitle"];
|
|
ViewBag.JpgToWebpTitle = _localizer["JpgToWebpTitle"];
|
|
ViewBag.HeicToJpgTitle = _localizer["HeicToJpgTitle"];
|
|
ViewBag.FooterText = _localizer["FooterText"];
|
|
ViewBag.About = _localizer["About"];
|
|
ViewBag.Contact = _localizer["Contact"];
|
|
ViewBag.Terms = _localizer["Terms"];
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult Index()
|
|
{
|
|
SetViewBag();
|
|
return View();
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> Transcribe(IFormFile audioFile)
|
|
{
|
|
SetViewBag();
|
|
if (audioFile == null || audioFile.Length == 0)
|
|
{
|
|
ViewBag.Error = "Por favor, selecione um arquivo de áudio.";
|
|
return View("Index");
|
|
}
|
|
|
|
var culture = HttpContext.Features.Get<IRequestCultureFeature>()?.RequestCulture.UICulture.Name ?? "pt-BR";
|
|
var tempPath = Path.GetTempFileName();
|
|
|
|
try
|
|
{
|
|
using (var stream = new FileStream(tempPath, FileMode.Create))
|
|
{
|
|
await audioFile.CopyToAsync(stream);
|
|
}
|
|
|
|
var transcription = await _transcriptionService.TranscribeAsync(tempPath, culture);
|
|
ViewBag.Result = transcription;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Erro no controller ao transcrever.");
|
|
ViewBag.Error = "Erro ao processar o áudio. Verifique se o formato é suportado.";
|
|
}
|
|
finally
|
|
{
|
|
if (System.IO.File.Exists(tempPath)) System.IO.File.Delete(tempPath);
|
|
}
|
|
|
|
return View("Index");
|
|
}
|
|
|
|
[HttpPost("HandleShare")]
|
|
public async Task<IActionResult> HandleShare(IFormFile audio)
|
|
{
|
|
// O Android via Share Target costuma enviar como 'audio' ou 'file'
|
|
return await Transcribe(audio);
|
|
}
|
|
}
|
|
}
|