import { useState } from "react"; import { ChatHeader } from "@/components/ChatHeader"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Upload, Mic, Play, Download, Trash2, FileAudio } from "lucide-react"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useToast } from "@/hooks/use-toast"; const SUPPORTED_FORMATS = ['flac', 'm4a', 'mp3', 'mp4', 'mpeg', 'mpga', 'oga', 'ogg', 'wav', 'webm']; const MAX_FILE_SIZE = 25 * 1024 * 1024; // 25 MB interface TranscriptionResult { id: string; fileName: string; text: string; timestamp: Date; } export const AudioView = () => { const [textToSpeech, setTextToSpeech] = useState(""); const [isProcessing, setIsProcessing] = useState(false); const [isTranscribing, setIsTranscribing] = useState(false); const [transcriptionResult, setTranscriptionResult] = useState(null); const [selectedFile, setSelectedFile] = useState(null); const { toast } = useToast(); const handleGenerateAudio = () => { setIsProcessing(true); setTimeout(() => setIsProcessing(false), 2000); }; const handleFileSelect = (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (!file) return; // Validate file size if (file.size > MAX_FILE_SIZE) { toast({ title: "Arquivo muito grande", description: "O arquivo deve ter no máximo 25 MB", variant: "destructive", }); return; } // Validate file format const fileExtension = file.name.split('.').pop()?.toLowerCase(); if (!fileExtension || !SUPPORTED_FORMATS.includes(fileExtension)) { toast({ title: "Formato não suportado", description: `Formatos suportados: ${SUPPORTED_FORMATS.join(', ')}`, variant: "destructive", }); return; } setSelectedFile(file); handleTranscription(file); }; const handleTranscription = async (file: File) => { setIsTranscribing(true); // Simulate transcription - replace with actual API call setTimeout(() => { const result: TranscriptionResult = { id: Date.now().toString(), fileName: file.name, text: "Esta é uma transcrição de exemplo do áudio enviado. O sistema utilizará modelos de IA avançados para converter sua fala em texto com alta precisão. O áudio foi processado com sucesso e convertido para texto.", timestamp: new Date(), }; setTranscriptionResult(result); setIsTranscribing(false); toast({ title: "Transcrição concluída", description: "Seu áudio foi transcrito com sucesso!", }); }, 2000); }; const handleDeleteTranscription = () => { setTranscriptionResult(null); setSelectedFile(null); }; const handleCopyTranscription = () => { if (transcriptionResult) { navigator.clipboard.writeText(transcriptionResult.text); toast({ title: "Texto copiado", description: "A transcrição foi copiada para a área de transferência", }); } }; const handleDownloadTranscription = () => { if (transcriptionResult) { const blob = new Blob([transcriptionResult.text], { type: 'text/plain' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `transcricao_${transcriptionResult.fileName}.txt`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } }; return (
Transcrição de Áudio Geração de Voz {/* Transcription Tab */}

Converter Áudio em Texto

Envie um arquivo de áudio para transcrição (máx. 25MB)

Formatos: {SUPPORTED_FORMATS.join(', ')}

`.${f}`).join(',')} onChange={handleFileSelect} /> {isTranscribing && (

Transcrevendo áudio...

)}
{/* Transcription Result */} {transcriptionResult && (

{transcriptionResult.fileName}

Transcrito {new Date(transcriptionResult.timestamp).toLocaleTimeString('pt-BR')}

{transcriptionResult.text}

)} {/* Generation Tab */}

Converter Texto em Voz