init: scripts diversos (crawlers, conversores, scrapers)
This commit is contained in:
6
tts-generator/.env.example
Executable file
6
tts-generator/.env.example
Executable file
@@ -0,0 +1,6 @@
|
||||
# API Keys para Gerador de Voz
|
||||
# Preencher as que pretender usar
|
||||
|
||||
GEMINI_API_KEY=your_gemini_api_key_here
|
||||
OPENAI_API_KEY=your_openai_api_key_here
|
||||
ELEVENLABS_API_KEY=your_elevenlabs_api_key_here
|
||||
7
tts-generator/.gitignore
vendored
Normal file
7
tts-generator/.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
.env
|
||||
venv/
|
||||
.venv/
|
||||
*.mp3
|
||||
*.wav
|
||||
__pycache__/
|
||||
*.pyc
|
||||
74
tts-generator/README.md
Executable file
74
tts-generator/README.md
Executable file
@@ -0,0 +1,74 @@
|
||||
# Gerador de Voz com Google Gemini API
|
||||
|
||||
Este projeto converte texto para áudio usando a Google Gemini API com tecnologia Text-to-Speech.
|
||||
|
||||
## Pré-requisitos
|
||||
|
||||
### 1. Instalar Dependências
|
||||
```bash
|
||||
pip install google-genai
|
||||
```
|
||||
|
||||
### 2. Configurar API Key
|
||||
|
||||
Criar ficheiro `.env` na pasta do projecto:
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# Editar .env com a chave real
|
||||
```
|
||||
|
||||
### 3. Executar o Projeto
|
||||
|
||||
#### Opcao 1 - Execucao Automatica (Recomendado):
|
||||
```bash
|
||||
chmod +x run_gemini_tts.sh
|
||||
./run_gemini_tts.sh
|
||||
```
|
||||
|
||||
#### Opcao 2 - Execucao Manual:
|
||||
```bash
|
||||
source .env
|
||||
pip install google-genai
|
||||
python gemini_tts.py
|
||||
```
|
||||
|
||||
## O que o script faz
|
||||
|
||||
1. **Conecta à Gemini API** usando a chave configurada
|
||||
2. **Processa o texto** sobre Marketing Digital da Descomplicar
|
||||
3. **Gera áudio** usando a voz "Autonoe"
|
||||
4. **Guarda ficheiros** WAV no diretório atual
|
||||
|
||||
## Configurações do Áudio
|
||||
|
||||
- **Modelo**: gemini-2.5-pro-preview-tts
|
||||
- **Voz**: Autonoe (feminina, natural)
|
||||
- **Formato**: WAV (conversão automática)
|
||||
- **Qualidade**: 16-bit, 24kHz
|
||||
|
||||
## Ficheiros Gerados
|
||||
|
||||
O script cria ficheiros com nomes do tipo:
|
||||
- `marketing_digital_audio_0.wav`
|
||||
- `marketing_digital_audio_1.wav`
|
||||
- etc.
|
||||
|
||||
## Personalização
|
||||
|
||||
Para alterar o texto ou configurações:
|
||||
|
||||
1. **Texto**: Editar a variável `text` na função `generate()`
|
||||
2. **Voz**: Alterar `voice_name` (opções disponíveis na documentação Gemini)
|
||||
3. **Nome dos ficheiros**: Modificar `file_name` no loop principal
|
||||
|
||||
## Uso Prático
|
||||
|
||||
Este gerador é ideal para:
|
||||
- Criar conteúdo para podcasts
|
||||
- Melhorar acessibilidade de conteúdos
|
||||
- Produzir narração para vídeos
|
||||
- Gerar áudio para e-learning
|
||||
|
||||
## Suporte
|
||||
|
||||
Para questões técnicas ou melhorias, contactar a equipa da Descomplicar.
|
||||
74
tts-generator/README_OPENAI.md
Executable file
74
tts-generator/README_OPENAI.md
Executable file
@@ -0,0 +1,74 @@
|
||||
# Gerador de Voz OpenAI TTS - Descomplicar
|
||||
|
||||
## 🎯 Configuração Automática OpenAI
|
||||
|
||||
Configurar API key no ficheiro `.env` antes de usar.
|
||||
|
||||
## Execucao
|
||||
|
||||
### **Opcao 1 - Script Automatico:**
|
||||
```bash
|
||||
chmod +x run_openai_tts.sh
|
||||
./run_openai_tts.sh
|
||||
```
|
||||
|
||||
### **Opcao 2 - Manual:**
|
||||
```bash
|
||||
source venv/bin/activate
|
||||
source .env
|
||||
pip install openai
|
||||
python openai_tts.py
|
||||
```
|
||||
|
||||
## 🎙️ Funcionalidades
|
||||
|
||||
### **Vozes Disponíveis:**
|
||||
- **nova**: Feminina, natural (recomendada)
|
||||
- **alloy**: Neutra
|
||||
- **echo**: Masculina
|
||||
- **fable**: Brit, masculina
|
||||
- **onyx**: Masculina, profunda
|
||||
- **shimmer**: Feminina, suave
|
||||
|
||||
### **Modelos:**
|
||||
- **tts-1**: Rápido e eficiente
|
||||
- **tts-1-hd**: Alta qualidade (recomendado)
|
||||
|
||||
### **Formatos:**
|
||||
- **MP3**: Compacto (padrão)
|
||||
- **WAV**: Sem compressão
|
||||
- **FLAC**: Alta qualidade
|
||||
|
||||
## 📊 Vantagens OpenAI TTS
|
||||
|
||||
✅ **Qualidade consistente**
|
||||
✅ **API estável e confiável**
|
||||
✅ **Sem problemas de quota complexos**
|
||||
✅ **Suporte excelente para português**
|
||||
✅ **Pricing transparente**
|
||||
✅ **Velocidade de processamento**
|
||||
|
||||
## 🎵 Ficheiros Gerados
|
||||
|
||||
- `descomplicar_teste.mp3` - Teste rápido
|
||||
- `descomplicar_marketing_digital.mp3` - Áudio completo
|
||||
|
||||
## 💡 Uso no Projeto
|
||||
|
||||
Ideal para:
|
||||
- **Podcasts** da Descomplicar
|
||||
- **Conteúdo de redes sociais**
|
||||
- **Narração de vídeos**
|
||||
- **Acessibilidade** de artigos
|
||||
- **Apresentações** automáticas
|
||||
|
||||
## ⚡ Execução Rápida
|
||||
|
||||
O script permite escolher:
|
||||
- **(t)este** - Texto pequeno, geração rápida
|
||||
- **(c)ompleto** - Artigo inteiro sobre Marketing Digital
|
||||
|
||||
**Execute agora:**
|
||||
```bash
|
||||
./run_openai_tts.sh
|
||||
```
|
||||
50
tts-generator/SETUP_UBUNTU.md
Executable file
50
tts-generator/SETUP_UBUNTU.md
Executable file
@@ -0,0 +1,50 @@
|
||||
# Setup rápido para resolver o problema do ambiente Python
|
||||
|
||||
## Problema
|
||||
O teu sistema Ubuntu/Debian protege o ambiente Python global com `externally-managed-environment`.
|
||||
|
||||
## Solução Imediata
|
||||
|
||||
### Opção 1 - Script Automático com Ambiente Virtual (RECOMENDADO):
|
||||
```bash
|
||||
chmod +x run_gemini_tts_venv.sh
|
||||
./run_gemini_tts_venv.sh
|
||||
```
|
||||
|
||||
### Opção 2 - Manual com Ambiente Virtual:
|
||||
```bash
|
||||
# Criar e ativar ambiente virtual
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
# Instalar dependências
|
||||
pip install google-genai
|
||||
|
||||
# Executar script
|
||||
python gemini_tts.py
|
||||
```
|
||||
|
||||
### Opção 3 - Instalar System-wide (não recomendado):
|
||||
```bash
|
||||
pip install google-genai --break-system-packages
|
||||
python gemini_tts.py
|
||||
```
|
||||
|
||||
### Opção 4 - Com pipx (se tiveres pipx instalado):
|
||||
```bash
|
||||
pipx install google-genai
|
||||
python gemini_tts.py
|
||||
```
|
||||
|
||||
## Solução Definitiva
|
||||
|
||||
O script `run_gemini_tts_venv.sh` resolve automaticamente:
|
||||
- Cria ambiente virtual isolado
|
||||
- Instala dependências sem conflitos
|
||||
- Executa o gerador de voz
|
||||
- Mantém tudo organizado
|
||||
|
||||
Execute apenas:
|
||||
```bash
|
||||
./run_gemini_tts_venv.sh
|
||||
```
|
||||
73
tts-generator/azure_tts_ptpt.py
Executable file
73
tts-generator/azure_tts_ptpt.py
Executable file
@@ -0,0 +1,73 @@
|
||||
"""
|
||||
azure_tts_ptpt.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Plano B: Azure Speech Services (Excelente PT-PT)
|
||||
# pip install azure-cognitiveservices-speech
|
||||
|
||||
import azure.cognitiveservices.speech as speechsdk
|
||||
import os
|
||||
|
||||
def generate_audio_azure():
|
||||
"""
|
||||
Gera áudio com Azure Speech (excelente PT-PT)
|
||||
"""
|
||||
# Configurar Azure Speech
|
||||
speech_key = os.environ.get("AZURE_SPEECH_KEY")
|
||||
service_region = "westeurope" # Região Europa para melhor PT-PT
|
||||
|
||||
# Configurar speech config
|
||||
speech_config = speechsdk.SpeechConfig(
|
||||
subscription=speech_key,
|
||||
region=service_region
|
||||
)
|
||||
|
||||
# Configurar voz PT-PT feminina
|
||||
speech_config.speech_synthesis_voice_name = "pt-PT-FernandaNeural"
|
||||
|
||||
# Texto da Descomplicar
|
||||
texto = """Bem-vindos à Descomplicar, a agência de aceleração digital que transforma a vossa presença online numa máquina de crescimento.
|
||||
|
||||
Somos especialistas em Marketing Digital, criação de websites profissionais e estratégias que geram resultados reais para o vosso negócio.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é simples: tornar o complexo mais simples."""
|
||||
|
||||
# Configurar saída para ficheiro
|
||||
audio_config = speechsdk.audio.AudioOutputConfig(
|
||||
filename="descomplicar_azure_ptpt.wav"
|
||||
)
|
||||
|
||||
# Criar sintetizador
|
||||
synthesizer = speechsdk.SpeechSynthesizer(
|
||||
speech_config=speech_config,
|
||||
audio_config=audio_config
|
||||
)
|
||||
|
||||
print("🇵🇹 Gerando áudio com Azure Speech PT-PT...")
|
||||
|
||||
try:
|
||||
result = synthesizer.speak_text_async(texto).get()
|
||||
|
||||
if result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
|
||||
print("✅ Áudio Azure PT-PT gerado: descomplicar_azure_ptpt.wav")
|
||||
return True
|
||||
else:
|
||||
print(f"❌ Erro: {result.reason}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro Azure: {e}")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
if not os.environ.get("AZURE_SPEECH_KEY"):
|
||||
print("❌ AZURE_SPEECH_KEY não configurada!")
|
||||
print("🔗 Obtenha grátis: https://portal.azure.com/")
|
||||
print("💡 500.000 caracteres/mês gratuitos")
|
||||
exit(1)
|
||||
|
||||
generate_audio_azure()
|
||||
72
tts-generator/edge_tts_ptpt.py
Executable file
72
tts-generator/edge_tts_ptpt.py
Executable file
@@ -0,0 +1,72 @@
|
||||
"""
|
||||
edge_tts_ptpt.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Edge TTS - Gratuito e com excelente PT-PT
|
||||
# pip install edge-tts
|
||||
|
||||
import asyncio
|
||||
import edge_tts
|
||||
|
||||
async def generate_audio_edge():
|
||||
"""
|
||||
Gera áudio com Edge TTS (gratuito e PT-PT nativo)
|
||||
"""
|
||||
# Texto da Descomplicar
|
||||
texto = """Bem-vindos à Descomplicar, a agência de aceleração digital que transforma a vossa presença online numa máquina de crescimento.
|
||||
|
||||
Somos especialistas em Marketing Digital, criação de websites profissionais e estratégias que geram resultados reais para o vosso negócio.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é simples: tornar o complexo mais simples. Descomplicamos o marketing digital para que vós vos possais focar no que fazeis melhor - gerir o vosso negócio."""
|
||||
|
||||
# Voz portuguesa feminina
|
||||
voz = "pt-PT-RaquelNeural" # Voz feminina PT-PT (corrigida)
|
||||
|
||||
print(f"🇵🇹 Gerando áudio com Edge TTS...")
|
||||
print(f"🎤 Voz: {voz}")
|
||||
|
||||
try:
|
||||
# Gerar áudio
|
||||
communicate = edge_tts.Communicate(texto, voz)
|
||||
await communicate.save("descomplicar_edge_ptpt.mp3")
|
||||
|
||||
print("✅ Áudio gerado: descomplicar_edge_ptpt.mp3")
|
||||
print("🎯 100% gratuito, sotaque PT-PT autêntico!")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro: {e}")
|
||||
return False
|
||||
|
||||
async def list_portuguese_voices():
|
||||
"""
|
||||
Lista todas as vozes portuguesas disponíveis
|
||||
"""
|
||||
print("🎤 Vozes portuguesas disponíveis no Edge TTS:")
|
||||
print("=" * 50)
|
||||
|
||||
voices = await edge_tts.list_voices()
|
||||
|
||||
for voice in voices:
|
||||
if voice["Locale"].startswith("pt-"):
|
||||
print(f"Nome: {voice['ShortName']}")
|
||||
print(f"Região: {voice['Locale']}")
|
||||
print(f"Género: {voice['Gender']}")
|
||||
print(f"Descrição: {voice['FriendlyName']}")
|
||||
print("-" * 30)
|
||||
|
||||
async def main():
|
||||
escolha = input("Escolha: (g)erar áudio ou (l)istar vozes? [g/l]: ").lower()
|
||||
|
||||
if escolha == 'l':
|
||||
await list_portuguese_voices()
|
||||
else:
|
||||
await generate_audio_edge()
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
111
tts-generator/elevenlabs_tts.py
Executable file
111
tts-generator/elevenlabs_tts.py
Executable file
@@ -0,0 +1,111 @@
|
||||
"""
|
||||
elevenlabs_tts.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# ElevenLabs TTS Generator for Descomplicar (PT-PT)
|
||||
# pip install elevenlabs
|
||||
|
||||
import os
|
||||
from elevenlabs import ElevenLabs, VoiceSettings
|
||||
from pathlib import Path
|
||||
|
||||
def generate_audio_elevenlabs():
|
||||
"""
|
||||
Gera áudio usando ElevenLabs com voz PT-PT
|
||||
"""
|
||||
# Configurar cliente ElevenLabs
|
||||
client = ElevenLabs(
|
||||
api_key=os.environ.get("ELEVENLABS_API_KEY")
|
||||
)
|
||||
|
||||
# Texto do artigo de Marketing Digital da Descomplicar
|
||||
texto_marketing = """Bem-vindo à Descomplicar, a agência de aceleração digital que transforma a sua presença online numa máquina de crescimento.
|
||||
|
||||
Somos especialistas em Marketing Digital, criação de websites profissionais e estratégias que geram resultados reais para o seu negócio.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é simples: tornar o complexo mais simples. Descomplicamos o marketing digital para que você se possa focar no que faz melhor - gerir o seu negócio.
|
||||
|
||||
No século 21, o mercado já não é um lugar físico; é um ecossistema digital em constante evolução. Os seus clientes não estão apenas a passar à porta da sua loja; estão a pesquisar no Google, a pedir recomendações no Facebook, a descobrir marcas no Instagram e a procurar especialistas no LinkedIn."""
|
||||
|
||||
print("🎙️ Iniciando geração de áudio com ElevenLabs (PT-PT)...")
|
||||
print(f"📝 Texto tem {len(texto_marketing)} caracteres")
|
||||
|
||||
try:
|
||||
# Usar voz feminina em português europeu
|
||||
audio = client.generate(
|
||||
text=texto_marketing,
|
||||
voice="Alice", # Voz feminina natural
|
||||
voice_settings=VoiceSettings(
|
||||
stability=0.5,
|
||||
similarity_boost=0.8,
|
||||
style=0.2,
|
||||
use_speaker_boost=True
|
||||
),
|
||||
model="eleven_multilingual_v2"
|
||||
)
|
||||
|
||||
# Salvar o áudio
|
||||
speech_file_path = Path("descomplicar_pt_pt.mp3")
|
||||
with open(speech_file_path, "wb") as f:
|
||||
for chunk in audio:
|
||||
f.write(chunk)
|
||||
|
||||
print(f"✅ Áudio PT-PT gerado: {speech_file_path}")
|
||||
print(f"📁 Ficheiro salvo em: {speech_file_path.absolute()}")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro ao gerar áudio: {e}")
|
||||
print("💡 Sugestão: Verifique se tem ELEVENLABS_API_KEY configurada")
|
||||
return False
|
||||
|
||||
def list_voices():
|
||||
"""
|
||||
Lista vozes disponíveis do ElevenLabs
|
||||
"""
|
||||
try:
|
||||
client = ElevenLabs(
|
||||
api_key=os.environ.get("ELEVENLABS_API_KEY")
|
||||
)
|
||||
|
||||
voices = client.voices.get_all()
|
||||
|
||||
print("🎤 Vozes disponíveis no ElevenLabs:")
|
||||
print("=" * 50)
|
||||
|
||||
for voice in voices.voices:
|
||||
print(f"Nome: {voice.name}")
|
||||
print(f"ID: {voice.voice_id}")
|
||||
print(f"Categoria: {voice.category}")
|
||||
if hasattr(voice, 'accent'):
|
||||
print(f"Sotaque: {voice.accent}")
|
||||
print("-" * 30)
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro ao listar vozes: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Verificar se API key está configurada
|
||||
if not os.environ.get("ELEVENLABS_API_KEY"):
|
||||
print("❌ ELEVENLABS_API_KEY não configurada!")
|
||||
print("🔗 Obtenha uma chave gratuita em: https://elevenlabs.io/")
|
||||
print("⚙️ Configure com: export ELEVENLABS_API_KEY='sua_chave'")
|
||||
exit(1)
|
||||
|
||||
print("🇵🇹 Gerador de Voz ElevenLabs PT-PT - Descomplicar")
|
||||
print("=" * 55)
|
||||
|
||||
# Escolher ação
|
||||
escolha = input("Escolha: (g)erar áudio, (l)istar vozes? [g/l]: ").lower()
|
||||
|
||||
if escolha == 'l':
|
||||
list_voices()
|
||||
else:
|
||||
generate_audio_elevenlabs()
|
||||
|
||||
print("\n🎵 Use vozes portuguesas autênticas!")
|
||||
334
tts-generator/gemini_tts.py
Executable file
334
tts-generator/gemini_tts.py
Executable file
@@ -0,0 +1,334 @@
|
||||
# To run this code you need to install the following dependencies:
|
||||
# pip install google-genai
|
||||
|
||||
import base64
|
||||
import mimetypes
|
||||
import os
|
||||
import re
|
||||
import struct
|
||||
from google import genai
|
||||
from google.genai import types
|
||||
|
||||
|
||||
def save_binary_file(file_name, data):
|
||||
f = open(file_name, "wb")
|
||||
f.write(data)
|
||||
f.close()
|
||||
print(f"File saved to to: {file_name}")
|
||||
|
||||
|
||||
def generate():
|
||||
client = genai.Client(
|
||||
api_key=os.environ.get("GEMINI_API_KEY"),
|
||||
)
|
||||
|
||||
model = "gemini-2.5-pro-preview-tts"
|
||||
contents = [
|
||||
types.Content(
|
||||
role="user",
|
||||
parts=[
|
||||
types.Part.from_text(text="""A Estratégia Definitiva para Crescer o Seu Negócio
|
||||
|
||||
No século 21, o mercado já não é um lugar físico; é um ecossistema digital em constante evolução. Os seus clientes não estão apenas a passar à porta da sua loja; estão a pesquisar no Google, a pedir recomendações no Facebook, a descobrir marcas no Instagram e a procurar especialistas no LinkedIn. Neste novo paradigma, ter uma presença digital não é uma opção. É a base sobre a qual os negócios modernos são construídos e escalados. Bem-vindo ao universo do Marketing Digital.
|
||||
|
||||
Para muitas empresas em Portugal, o termo "Marketing Digital" pode parecer um labirinto complexo e intimidante de acrónimos (SEO, PPC, CRM), plataformas e táticas que mudam a uma velocidade vertiginosa. É fácil sentir-se sobrecarregado e não saber por onde começar, o que muitas vezes leva a ações descoordenadas – um post aqui, um anúncio ali – com poucos ou nenhuns resultados mensuráveis. O problema não está nas ferramentas, mas na ausência de uma estratégia coesa que as una.
|
||||
|
||||
Este guia é o seu mapa para esse labirinto. O nosso objetivo é desmistificar o Marketing Digital, transformando-o de uma coleção de táticas isoladas numa metodologia de crescimento integrada e compreensível. Vamos explorar cada pilar, desde a fundação estratégica até à execução tática e à medição do sucesso. Na Descomplicar, a nossa filosofia é que o marketing de sucesso não é sobre fazer tudo, mas sobre fazer as coisas certas, da forma certa, e na ordem certa.
|
||||
|
||||
Parte 1: A Revolução Digital – Porque o Marketing Digital é o Novo Normal
|
||||
|
||||
Para dominar o presente, temos de compreender a mudança fundamental que nos trouxe até aqui.
|
||||
|
||||
A Mudança no Poder: Do Vendedor para o Consumidor
|
||||
|
||||
O marketing tradicional (Outbound) era baseado na interrupção. As empresas controlavam a mensagem e empurravam-na para o público através da TV, rádio e imprensa. Hoje, o poder mudou de mãos. O consumidor moderno, armado com um smartphone e acesso ilimitado à informação, está no controlo. Ele escolhe o que vê, quando vê e em quem confia. Dados do PORDATA mostram a penetração massiva da internet na sociedade portuguesa, solidificando esta nova realidade.
|
||||
|
||||
O Marketing Digital, na sua essência, é a resposta a esta mudança. É uma abordagem de "puxar" (pull), não de "empurrar" (push). Trata-se de criar valor e estar presente nos canais onde os seus clientes já estão a procurar ativamente por soluções.
|
||||
|
||||
As Vantagens Inegáveis do Marketing Digital
|
||||
Mensurabilidade Precisa: Ao contrário de um anúncio num outdoor, cada euro investido no digital pode ser rastreado. Você sabe exatamente quantas pessoas viram o seu anúncio, clicaram nele e se tornaram clientes.
|
||||
Segmentação Cirúrgica: Pode direcionar as suas mensagens para públicos extremamente específicos com base na sua demografia, interesses, comportamentos e até interações passadas com a sua marca.
|
||||
Custo-Efetividade e ROI: Permite que PMEs compitam com grandes empresas, pois o sucesso não depende apenas do tamanho do orçamento, mas da inteligência da estratégia. O Retorno do Investimento (ROI) é claro e otimizável.
|
||||
Agilidade e Flexibilidade: Pode lançar, testar e otimizar campanhas em tempo real, adaptando-se rapidamente às mudanças do mercado.
|
||||
Construção de Relações: Permite uma comunicação bidirecional, construindo uma comunidade e uma relação de confiança com a sua audiência a longo prazo.
|
||||
Parte 2: A Fundação Estratégica – O Plano Antes da Ação
|
||||
|
||||
O maior erro no Marketing Digital é saltar para as táticas sem uma estratégia. É como tentar construir uma casa sem plantas.
|
||||
|
||||
Passo 1: Definir Objetivos SMART
|
||||
|
||||
Toda a sua estratégia deve começar com uma resposta clara à pergunta: "O que queremos alcançar?". Os seus objetivos devem ser:
|
||||
* Specific (Específicos)
|
||||
* Measurable (Mensuráveis)
|
||||
* Achievable (Atingíveis)
|
||||
* Relevant (Relevantes)
|
||||
* Time-bound (Temporais)
|
||||
|
||||
Exemplo: "Aumentar o número de leads qualificados gerados através do nosso website em 25% nos próximos 6 meses, mantendo um Custo por Lead (CPL) abaixo de 20€."
|
||||
|
||||
Passo 2: Construir as Suas Buyer Personas
|
||||
|
||||
Você não pode comunicar eficazmente se não souber com quem está a falar. Uma buyer persona é um perfil semi-fictício do seu cliente ideal.
|
||||
* Como criar: Baseie-se em dados reais. Entreviste os seus melhores clientes, fale com a sua equipa de vendas e analise os dados do seu CRM.
|
||||
* O que incluir: Dados demográficos, cargo, objetivos, desafios ("dores"), e onde procuram informação.
|
||||
|
||||
Passo 3: Mapear a Jornada do Cliente
|
||||
|
||||
A jornada do cliente é o processo ativo que alguém percorre para se tornar seu cliente. Compreendê-la permite-lhe criar o conteúdo certo para o momento certo.
|
||||
1. Fase de Descoberta (Awareness): O potencial cliente apercebe-se de que tem um problema ou uma necessidade. Ele procura informação para compreender melhor esse problema.
|
||||
2. Fase de Consideração (Consideration): O potencial cliente já definiu o seu problema e está a pesquisar e a comparar as diferentes soluções e abordagens disponíveis.
|
||||
3. Fase de Decisão (Decision): O potencial cliente já escolheu o tipo de solução e está agora a comparar fornecedores específicos para tomar a decisão final de compra.
|
||||
|
||||
Parte 3: Os Pilares do Marketing Digital – As Disciplinas Essenciais
|
||||
|
||||
O Marketing Digital é um ecossistema de disciplinas interligadas. Vamos explorar os pilares fundamentais.
|
||||
|
||||
1. SEO (Search Engine Optimization)
|
||||
|
||||
O SEO é o processo de otimizar o seu site para que ele apareça nos primeiros lugares dos resultados orgânicos (não pagos) do Google. É a base para ser encontrado.
|
||||
* Como funciona: Envolve a otimização de três áreas:
|
||||
* SEO On-Page: Otimizar o conteúdo e a estrutura do seu próprio site (palavras-chave, títulos, meta descrições).
|
||||
* SEO Off-Page: Construir a autoridade do seu site através de links de outros sites (backlinks).
|
||||
* SEO Técnico: Garantir que o seu site é rápido, seguro e fácil de rastrear pelo Google.
|
||||
* O seu papel: É a sua estratégia de longo prazo para obter tráfego qualificado e sustentável. O nosso serviço de SEO foca-se em construir esta visibilidade duradoura.
|
||||
|
||||
2. Marketing de Conteúdo
|
||||
|
||||
O conteúdo é o combustível que alimenta quase todas as outras áreas do Marketing Digital.
|
||||
* O que é: Trata-se de criar e distribuir conteúdo valioso, relevante e consistente (artigos de blog, vídeos, e-books, etc.) para atrair e reter um público-alvo.
|
||||
* O seu papel: Constrói confiança, estabelece a sua marca como uma autoridade, educa os seus potenciais clientes e alimenta as suas campanhas de SEO e redes sociais. A produção de conteúdos é o coração do marketing de atração.
|
||||
|
||||
3. Marketing nas Redes Sociais
|
||||
|
||||
As redes sociais são onde você constrói a sua comunidade e humaniza a sua marca.
|
||||
* O que é: Utilizar plataformas como Instagram, Facebook, LinkedIn, etc., para se conectar com a sua audiência, partilhar conteúdo e promover a sua marca.
|
||||
* O seu papel: Não se trata de estar em todas as redes, mas de estar nas redes certas para o seu público. É um canal para engagement, notoriedade da marca e, cada vez mais, para vendas diretas (social commerce). Uma gestão profissional de Redes Sociais garante uma presença estratégica e consistente.
|
||||
|
||||
4. Publicidade Paga (PPC - Pay-Per-Click)
|
||||
|
||||
O PPC é a forma de obter visibilidade e tráfego imediatos, pagando por cada clique no seu anúncio.
|
||||
* Principais Plataformas:
|
||||
* Google Ads: Responde à intenção de pesquisa do utilizador. Ideal para capturar leads e vendas diretas.
|
||||
* Meta Ads (Facebook & Instagram): Baseia-se em interesses e demografia. Excelente para notoriedade e para alcançar públicos específicos.
|
||||
* O seu papel: É o acelerador da sua estratégia. Permite-lhe testar ofertas rapidamente e garantir visibilidade imediata. A gestão de tráfego profissional é crucial para não desperdiçar orçamento.
|
||||
|
||||
5. Email Marketing
|
||||
|
||||
O email é o seu canal de comunicação direto e próprio.
|
||||
* O que é: Enviar comunicações por email a uma lista de subscritores que lhe deram permissão para o fazer.
|
||||
* O seu papel: É um dos canais com maior ROI. É fundamental para nutrir leads, fidelizar clientes e promover ofertas. O Email Marketing é a base da construção de relações a longo prazo.
|
||||
|
||||
6. Automação de Marketing
|
||||
|
||||
A automação é o motor que liga todas as peças e permite escalar a sua operação.
|
||||
* O que é: Usar software para automatizar tarefas de marketing repetitivas com base no comportamento do utilizador.
|
||||
* O seu papel: Permite-lhe entregar a mensagem certa, à pessoa certa, no momento certo, de forma automática. É essencial para a nutrição de leads e para a personalização em escala. A automação transforma o seu marketing de manual para inteligente.
|
||||
|
||||
Parte 4: O Website – O Seu Quartel-General Digital
|
||||
|
||||
No meio de todas estas táticas e plataformas, o seu website é o único ativo que você controla a 100%. É o centro do seu universo digital.
|
||||
* O seu papel: Todos os seus esforços de marketing digital devem, em última análise, convergir para o seu site. É lá que você controla a experiência, captura os leads e realiza as vendas.
|
||||
* Elementos Críticos:
|
||||
* Design Profissional e Responsivo (WebDesign): Deve ter uma ótima aparência e funcionar perfeitamente em todos os dispositivos, especialmente nos telemóveis.
|
||||
* Experiência do Utilizador (UX): Deve ser fácil e intuitivo para o utilizador encontrar o que procura.
|
||||
* Velocidade de Carregamento: Um site lento é um dos maiores assassinos de conversões.
|
||||
* Otimizado para Conversão: Deve ter apelos à ação (CTAs) claros e formulários fáceis de preencher.
|
||||
* A construção de sites profissionais é o investimento mais fundamental de toda a sua estratégia digital.
|
||||
|
||||
Parte 5: A Medição do Sucesso – Análise de Dados e KPIs
|
||||
|
||||
A beleza do Marketing Digital é que tudo é mensurável. "O que não se mede, não se gere."
|
||||
* Ferramentas Essenciais: O Google Analytics é a ferramenta gratuita e fundamental para analisar o tráfego e o comportamento no seu site.
|
||||
* Métricas-Chave (KPIs - Key Performance Indicators):
|
||||
* Tráfego: Número de visitantes do seu site.
|
||||
* Taxa de Conversão: A percentagem de visitantes que realiza uma ação desejada (ex: preenche um formulário, faz uma compra).
|
||||
* Custo de Aquisição de Cliente (CAC): O custo total de marketing e vendas para adquirir um novo cliente.
|
||||
* Valor do Tempo de Vida do Cliente (LTV): A receita total que um cliente gera ao longo da sua relação com a sua empresa.
|
||||
* Retorno do Investimento (ROI): A métrica final. Compara o lucro gerado com o custo do investimento em marketing.
|
||||
* A capacidade de analisar estes dados é uma competência crucial. Programas como o INCoDe.2030 visam precisamente aumentar a literacia digital em Portugal.
|
||||
|
||||
Parte 6: A Integração – Como Unir Todas as Peças
|
||||
|
||||
O verdadeiro poder do Marketing Digital não está em executar cada uma destas disciplinas de forma isolada, mas em integrá-las numa estratégia coesa.
|
||||
* Exemplo de Integração:
|
||||
1. Você cria um artigo de blog de alta qualidade (Marketing de Conteúdo).
|
||||
2. Otimiza-o para o Google (SEO).
|
||||
3. Promove-o nas redes sociais e através de anúncios pagos (Redes Sociais e PPC).
|
||||
4. O tráfego chega ao seu site e alguns visitantes descarregam um e-book, tornando-se leads (Website e Geração de Leads).
|
||||
5. Estes leads entram numa sequência de emails automatizada (Email Marketing e Automação).
|
||||
6. Você mede todo o processo (Análise de Dados).
|
||||
|
||||
Gerir esta complexidade pode ser um desafio. É aqui que uma agência de marketing digital em Portugal como a Descomplicar® pode ser um parceiro estratégico, orquestrando todas as peças para si.
|
||||
|
||||
O Marketing Digital é um Processo Contínuo
|
||||
|
||||
O Marketing Digital não é um projeto com um início e um fim. É um processo contínuo de aprendizagem, teste e otimização. É uma jornada para compreender profundamente o seu cliente e encontrar formas cada vez mais eficazes de lhe entregar valor.
|
||||
|
||||
Para as empresas em Portugal, desde o negócio local à grande equipa, abraçar o Marketing Digital é abraçar o futuro. É a forma de competir, de crescer e de construir uma marca resiliente e relevante na economia moderna.
|
||||
|
||||
Está pronto para transformar a sua presença online de uma despesa numa máquina de crescimento?
|
||||
|
||||
O caminho começa com o primeiro passo estratégico. Se precisa de um guia para o ajudar a navegar neste universo, nós estamos aqui.
|
||||
|
||||
Marque uma Reunião e vamos desenhar juntos o mapa para o sucesso digital do seu negócio.
|
||||
|
||||
Perguntas Frequentes
|
||||
|
||||
Qual é a parte mais importante de uma estratégia de marketing digital?
|
||||
|
||||
A parte mais importante é a estratégia inicial: a definição clara dos seus objetivos e das suas buyer personas. Sem saber o que quer alcançar e para quem está a falar, todas as táticas de marketing digital (SEO, anúncios, etc.) serão ineficazes. Uma consultoria estratégica é o ponto de partida para qualquer campanha de sucesso.
|
||||
|
||||
Quanto tempo demora a ver resultados com o marketing digital?
|
||||
|
||||
O tempo para ver resultados no marketing digital varia com a tática. A publicidade paga (PPC) pode gerar resultados em dias. Estratégias orgânicas como SEO e Marketing de Conteúdo são investimentos a longo prazo, com resultados significativos a aparecerem geralmente entre 6 a 12 meses. Uma boa estratégia combina táticas de curto e longo prazo.
|
||||
|
||||
Uma pequena empresa pode competir com grandes marcas no marketing digital?
|
||||
|
||||
Absolutamente. Essa é uma das grandes vantagens do marketing digital. O sucesso não depende apenas do orçamento. Uma PME pode competir sendo mais ágil, focando-se num nicho específico, criando conteúdo de maior qualidade e oferecendo um serviço mais pessoal. O marketing digital nivela o campo de jogo.
|
||||
|
||||
O que é mais importante no marketing digital: SEO ou anúncios pagos?
|
||||
|
||||
Não é uma questão de "ou", mas de "e". O SEO constrói um ativo a longo prazo e gera tráfego orgânico de confiança. Os anúncios pagos oferecem resultados imediatos e controlo. A melhor estratégia de marketing digital integra ambos: usa os anúncios para obter resultados rápidos e dados, enquanto o SEO constrói a fundação para o crescimento sustentável.
|
||||
|
||||
Como posso medir o ROI (Retorno do Investimento) do meu marketing digital?
|
||||
|
||||
O ROI do marketing digital mede-se comparando o lucro gerado pelas suas campanhas com o custo total do seu investimento. Para isso, é essencial ter um bom sistema de análise (como o Google Analytics) e rastreamento de conversões. Deve calcular o seu Custo de Aquisição de Cliente (CAC) e o Valor do Tempo de Vida do Cliente (LTV) para ter uma visão clara da rentabilidade.
|
||||
|
||||
Preciso de estar em todas as redes sociais para ter sucesso no marketing digital?
|
||||
|
||||
Não. Tentar estar em todo o lado é um erro comum. A chave do sucesso no marketing digital é estar onde o seu público-alvo está. É melhor ter uma presença forte e consistente em uma ou duas plataformas relevantes do que uma presença fraca e esporádica em cinco. A nossa equipa de gestão de redes sociais pode ajudá-lo a escolher os canais certos.
|
||||
|
||||
Qual é o papel do website numa estratégia de marketing digital?
|
||||
|
||||
O website é o centro de todo o seu marketing digital. É o único ativo online que você controla a 100%. Todas as suas outras atividades (redes sociais, anúncios, email) devem ter como objetivo levar tráfego qualificado para o seu site, onde você pode controlar a experiência, capturar leads e fechar vendas. A construção de um site profissional é, por isso, fundamental.
|
||||
|
||||
Como é que a Inteligência Artificial está a mudar o marketing digital?
|
||||
|
||||
A Inteligência Artificial está a revolucionar o marketing digital ao permitir uma personalização e otimização sem precedentes. A IA é usada para otimizar lances em campanhas de anúncios, para personalizar recomendações de produtos, para criar chatbots inteligentes e para analisar grandes volumes de dados para encontrar padrões. A nossa abordagem à Inteligência Artificial foca-se em usar estas ferramentas para potenciar a estratégia humana.
|
||||
|
||||
Posso fazer o marketing digital da minha empresa sozinho ou devo contratar uma agência?
|
||||
|
||||
É possível fazer sozinho, mas o marketing digital é uma área vasta e que exige muito tempo e conhecimento especializado. Contratar uma agência de marketing digital como a Descomplicar® dá-lhe acesso a uma equipa de especialistas em várias áreas (SEO, anúncios, conteúdo), que trabalham de forma integrada para acelerar os seus resultados, permitindo que você se foque no seu negócio principal.
|
||||
|
||||
Qual é o primeiro passo para começar com o marketing digital?
|
||||
|
||||
O primeiro passo absoluto é criar um plano. Antes de gastar um único euro em anúncios ou de escrever uma única linha de conteúdo, sente-se e defina os seus objetivos, o seu público-alvo e a sua proposta de valor. Uma sessão de consultoria estratégica pode ser o investimento mais rentável que fará em todo o seu percurso de marketing digital."""),
|
||||
],
|
||||
),
|
||||
]
|
||||
generate_content_config = types.GenerateContentConfig(
|
||||
temperature=1.1,
|
||||
response_modalities=[
|
||||
"audio",
|
||||
],
|
||||
speech_config=types.SpeechConfig(
|
||||
voice_config=types.VoiceConfig(
|
||||
prebuilt_voice_config=types.PrebuiltVoiceConfig(
|
||||
voice_name="Autonoe"
|
||||
)
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
file_index = 0
|
||||
for chunk in client.models.generate_content_stream(
|
||||
model=model,
|
||||
contents=contents,
|
||||
config=generate_content_config,
|
||||
):
|
||||
if (
|
||||
chunk.candidates is None
|
||||
or chunk.candidates[0].content is None
|
||||
or chunk.candidates[0].content.parts is None
|
||||
):
|
||||
continue
|
||||
if chunk.candidates[0].content.parts[0].inline_data and chunk.candidates[0].content.parts[0].inline_data.data:
|
||||
file_name = f"marketing_digital_audio_{file_index}"
|
||||
file_index += 1
|
||||
inline_data = chunk.candidates[0].content.parts[0].inline_data
|
||||
data_buffer = inline_data.data
|
||||
file_extension = mimetypes.guess_extension(inline_data.mime_type)
|
||||
if file_extension is None:
|
||||
file_extension = ".wav"
|
||||
data_buffer = convert_to_wav(inline_data.data, inline_data.mime_type)
|
||||
save_binary_file(f"{file_name}{file_extension}", data_buffer)
|
||||
else:
|
||||
print(chunk.text)
|
||||
|
||||
def convert_to_wav(audio_data: bytes, mime_type: str) -> bytes:
|
||||
"""Generates a WAV file header for the given audio data and parameters.
|
||||
|
||||
Args:
|
||||
audio_data: The raw audio data as a bytes object.
|
||||
mime_type: Mime type of the audio data.
|
||||
|
||||
Returns:
|
||||
A bytes object representing the WAV file header.
|
||||
"""
|
||||
parameters = parse_audio_mime_type(mime_type)
|
||||
bits_per_sample = parameters["bits_per_sample"]
|
||||
sample_rate = parameters["rate"]
|
||||
num_channels = 1
|
||||
data_size = len(audio_data)
|
||||
bytes_per_sample = bits_per_sample // 8
|
||||
block_align = num_channels * bytes_per_sample
|
||||
byte_rate = sample_rate * block_align
|
||||
chunk_size = 36 + data_size # 36 bytes for header fields before data chunk size
|
||||
|
||||
# http://soundfile.sapp.org/doc/WaveFormat/
|
||||
|
||||
header = struct.pack(
|
||||
"<4sI4s4sIHHIIHH4sI",
|
||||
b"RIFF", # ChunkID
|
||||
chunk_size, # ChunkSize (total file size - 8 bytes)
|
||||
b"WAVE", # Format
|
||||
b"fmt ", # Subchunk1ID
|
||||
16, # Subchunk1Size (16 for PCM)
|
||||
1, # AudioFormat (1 for PCM)
|
||||
num_channels, # NumChannels
|
||||
sample_rate, # SampleRate
|
||||
byte_rate, # ByteRate
|
||||
block_align, # BlockAlign
|
||||
bits_per_sample, # BitsPerSample
|
||||
b"data", # Subchunk2ID
|
||||
data_size # Subchunk2Size (size of audio data)
|
||||
)
|
||||
return header + audio_data
|
||||
|
||||
def parse_audio_mime_type(mime_type: str) -> dict[str, int | None]:
|
||||
"""Parses bits per sample and rate from an audio MIME type string.
|
||||
|
||||
Assumes bits per sample is encoded like "L16" and rate as "rate=xxxxx".
|
||||
|
||||
Args:
|
||||
mime_type: The audio MIME type string (e.g., "audio/L16;rate=24000").
|
||||
|
||||
Returns:
|
||||
A dictionary with "bits_per_sample" and "rate" keys. Values will be
|
||||
integers if found, otherwise None.
|
||||
"""
|
||||
bits_per_sample = 16
|
||||
rate = 24000
|
||||
|
||||
# Extract rate from parameters
|
||||
parts = mime_type.split(";")
|
||||
for param in parts: # Skip the main type part
|
||||
param = param.strip()
|
||||
if param.lower().startswith("rate="):
|
||||
try:
|
||||
rate_str = param.split("=", 1)[1]
|
||||
rate = int(rate_str)
|
||||
except (ValueError, IndexError):
|
||||
# Handle cases like "rate=" with no value or non-integer value
|
||||
pass # Keep rate as default
|
||||
elif param.startswith("audio/L"):
|
||||
try:
|
||||
bits_per_sample = int(param.split("L", 1)[1])
|
||||
except (ValueError, IndexError):
|
||||
pass # Keep bits_per_sample as default if conversion fails
|
||||
|
||||
return {"bits_per_sample": bits_per_sample, "rate": rate}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate()
|
||||
141
tts-generator/gemini_tts_teste.py
Executable file
141
tts-generator/gemini_tts_teste.py
Executable file
@@ -0,0 +1,141 @@
|
||||
"""
|
||||
gemini_tts_teste.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# To run this code you need to install the following dependencies:
|
||||
# pip install google-genai
|
||||
|
||||
import base64
|
||||
import mimetypes
|
||||
import os
|
||||
import re
|
||||
import struct
|
||||
from google import genai
|
||||
from google.genai import types
|
||||
|
||||
|
||||
def save_binary_file(file_name, data):
|
||||
f = open(file_name, "wb")
|
||||
f.write(data)
|
||||
f.close()
|
||||
print(f"File saved to to: {file_name}")
|
||||
|
||||
|
||||
def generate_test():
|
||||
client = genai.Client(
|
||||
api_key=os.environ.get("GEMINI_API_KEY"),
|
||||
)
|
||||
|
||||
model = "gemini-2.5-pro-preview-tts"
|
||||
contents = [
|
||||
types.Content(
|
||||
role="user",
|
||||
parts=[
|
||||
types.Part.from_text(text="""Bem-vindo à Descomplicar, a agência de aceleração digital que transforma a sua presença online numa máquina de crescimento.
|
||||
|
||||
Somos especialistas em Marketing Digital, criação de websites profissionais e estratégias que geram resultados reais para o seu negócio.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é simples: tornar o complexo mais simples. Descomplicamos o marketing digital para que você se possa focar no que faz melhor - gerir o seu negócio.
|
||||
|
||||
Marque uma reunião connosco e descubra como podemos acelerar o crescimento digital da sua empresa."""),
|
||||
],
|
||||
),
|
||||
]
|
||||
generate_content_config = types.GenerateContentConfig(
|
||||
temperature=1.1,
|
||||
response_modalities=[
|
||||
"audio",
|
||||
],
|
||||
speech_config=types.SpeechConfig(
|
||||
voice_config=types.VoiceConfig(
|
||||
prebuilt_voice_config=types.PrebuiltVoiceConfig(
|
||||
voice_name="Autonoe"
|
||||
)
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
file_index = 0
|
||||
for chunk in client.models.generate_content_stream(
|
||||
model=model,
|
||||
contents=contents,
|
||||
config=generate_content_config,
|
||||
):
|
||||
if (
|
||||
chunk.candidates is None
|
||||
or chunk.candidates[0].content is None
|
||||
or chunk.candidates[0].content.parts is None
|
||||
):
|
||||
continue
|
||||
if chunk.candidates[0].content.parts[0].inline_data and chunk.candidates[0].content.parts[0].inline_data.data:
|
||||
file_name = f"descomplicar_teste_audio_{file_index}"
|
||||
file_index += 1
|
||||
inline_data = chunk.candidates[0].content.parts[0].inline_data
|
||||
data_buffer = inline_data.data
|
||||
file_extension = mimetypes.guess_extension(inline_data.mime_type)
|
||||
if file_extension is None:
|
||||
file_extension = ".wav"
|
||||
data_buffer = convert_to_wav(inline_data.data, inline_data.mime_type)
|
||||
save_binary_file(f"{file_name}{file_extension}", data_buffer)
|
||||
else:
|
||||
print(chunk.text)
|
||||
|
||||
def convert_to_wav(audio_data: bytes, mime_type: str) -> bytes:
|
||||
"""Generates a WAV file header for the given audio data and parameters."""
|
||||
parameters = parse_audio_mime_type(mime_type)
|
||||
bits_per_sample = parameters["bits_per_sample"]
|
||||
sample_rate = parameters["rate"]
|
||||
num_channels = 1
|
||||
data_size = len(audio_data)
|
||||
bytes_per_sample = bits_per_sample // 8
|
||||
block_align = num_channels * bytes_per_sample
|
||||
byte_rate = sample_rate * block_align
|
||||
chunk_size = 36 + data_size
|
||||
|
||||
header = struct.pack(
|
||||
"<4sI4s4sIHHIIHH4sI",
|
||||
b"RIFF", # ChunkID
|
||||
chunk_size, # ChunkSize (total file size - 8 bytes)
|
||||
b"WAVE", # Format
|
||||
b"fmt ", # Subchunk1ID
|
||||
16, # Subchunk1Size (16 for PCM)
|
||||
1, # AudioFormat (1 for PCM)
|
||||
num_channels, # NumChannels
|
||||
sample_rate, # SampleRate
|
||||
byte_rate, # ByteRate
|
||||
block_align, # BlockAlign
|
||||
bits_per_sample, # BitsPerSample
|
||||
b"data", # Subchunk2ID
|
||||
data_size # Subchunk2Size (size of audio data)
|
||||
)
|
||||
return header + audio_data
|
||||
|
||||
def parse_audio_mime_type(mime_type: str) -> dict[str, int | None]:
|
||||
"""Parses bits per sample and rate from an audio MIME type string."""
|
||||
bits_per_sample = 16
|
||||
rate = 24000
|
||||
|
||||
parts = mime_type.split(";")
|
||||
for param in parts:
|
||||
param = param.strip()
|
||||
if param.lower().startswith("rate="):
|
||||
try:
|
||||
rate_str = param.split("=", 1)[1]
|
||||
rate = int(rate_str)
|
||||
except (ValueError, IndexError):
|
||||
pass
|
||||
elif param.startswith("audio/L"):
|
||||
try:
|
||||
bits_per_sample = int(param.split("L", 1)[1])
|
||||
except (ValueError, IndexError):
|
||||
pass
|
||||
|
||||
return {"bits_per_sample": bits_per_sample, "rate": rate}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_test()
|
||||
192
tts-generator/gerar_artigo_completo.py
Executable file
192
tts-generator/gerar_artigo_completo.py
Executable file
@@ -0,0 +1,192 @@
|
||||
"""
|
||||
gerar_artigo_completo.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Edge TTS - Artigo completo da Descomplicar
|
||||
# pip install edge-tts
|
||||
|
||||
import asyncio
|
||||
import edge_tts
|
||||
|
||||
async def gerar_artigo_completo():
|
||||
"""
|
||||
Gera áudio do artigo completo de Marketing Digital
|
||||
"""
|
||||
|
||||
# Texto completo do artigo da Descomplicar
|
||||
texto_completo = """A Estratégia Definitiva para Crescer o Seu Negócio
|
||||
|
||||
No século 21, o mercado já não é um lugar físico; é um ecossistema digital em constante evolução. Os seus clientes não estão apenas a passar à porta da sua loja; estão a pesquisar no Google, a pedir recomendações no Facebook, a descobrir marcas no Instagram e a procurar especialistas no LinkedIn. Neste novo paradigma, ter uma presença digital não é uma opção. É a base sobre a qual os negócios modernos são construídos e escalados. Bem-vindo ao universo do Marketing Digital.
|
||||
|
||||
Para muitas empresas em Portugal, o termo Marketing Digital pode parecer um labirinto complexo e intimidante de acrónimos como SEO, PPC e CRM, plataformas e táticas que mudam a uma velocidade vertiginosa. É fácil sentir-se sobrecarregado e não saber por onde começar, o que muitas vezes leva a ações descoordenadas – um post aqui, um anúncio ali – com poucos ou nenhuns resultados mensuráveis. O problema não está nas ferramentas, mas na ausência de uma estratégia coesa que as una.
|
||||
|
||||
Este guia é o seu mapa para esse labirinto. O nosso objetivo é desmistificar o Marketing Digital, transformando-o de uma coleção de táticas isoladas numa metodologia de crescimento integrada e compreensível. Vamos explorar cada pilar, desde a fundação estratégica até à execução tática e à medição do sucesso. Na Descomplicar, a nossa filosofia é que o marketing de sucesso não é sobre fazer tudo, mas sobre fazer as coisas certas, da forma certa, e na ordem certa.
|
||||
|
||||
Parte 1: A Revolução Digital – Porque o Marketing Digital é o Novo Normal
|
||||
|
||||
Para dominar o presente, temos de compreender a mudança fundamental que nos trouxe até aqui.
|
||||
|
||||
A Mudança no Poder: Do Vendedor para o Consumidor
|
||||
|
||||
O marketing tradicional era baseado na interrupção. As empresas controlavam a mensagem e empurravam-na para o público através da TV, rádio e imprensa. Hoje, o poder mudou de mãos. O consumidor moderno, armado com um smartphone e acesso ilimitado à informação, está no controlo. Ele escolhe o que vê, quando vê e em quem confia. Dados do PORDATA mostram a penetração massiva da internet na sociedade portuguesa, solidificando esta nova realidade.
|
||||
|
||||
O Marketing Digital, na sua essência, é a resposta a esta mudança. É uma abordagem de puxar, não de empurrar. Trata-se de criar valor e estar presente nos canais onde os seus clientes já estão a procurar ativamente por soluções.
|
||||
|
||||
As Vantagens Inegáveis do Marketing Digital incluem mensurabilidade precisa, segmentação cirúrgica, custo-efetividade e ROI, agilidade e flexibilidade, e construção de relações a longo prazo.
|
||||
|
||||
Parte 2: A Fundação Estratégica – O Plano Antes da Ação
|
||||
|
||||
O maior erro no Marketing Digital é saltar para as táticas sem uma estratégia. É como tentar construir uma casa sem plantas.
|
||||
|
||||
Primeiro passo: Definir Objetivos SMART. Toda a sua estratégia deve começar com uma resposta clara à pergunta: O que queremos alcançar? Os seus objetivos devem ser específicos, mensuráveis, atingíveis, relevantes e temporais.
|
||||
|
||||
Segundo passo: Construir as Suas Buyer Personas. Você não pode comunicar eficazmente se não souber com quem está a falar. Uma buyer persona é um perfil semi-fictício do seu cliente ideal.
|
||||
|
||||
Terceiro passo: Mapear a Jornada do Cliente. A jornada do cliente é o processo ativo que alguém percorre para se tornar seu cliente. Compreendê-la permite-lhe criar o conteúdo certo para o momento certo.
|
||||
|
||||
Parte 3: Os Pilares do Marketing Digital
|
||||
|
||||
O Marketing Digital é um ecossistema de disciplinas interligadas. Os pilares fundamentais incluem SEO, Marketing de Conteúdo, Marketing nas Redes Sociais, Publicidade Paga, Email Marketing e Automação de Marketing.
|
||||
|
||||
O SEO é o processo de otimizar o seu site para que ele apareça nos primeiros lugares dos resultados orgânicos do Google. O Marketing de Conteúdo trata-se de criar e distribuir conteúdo valioso, relevante e consistente para atrair e reter um público-alvo. As redes sociais são onde você constrói a sua comunidade e humaniza a sua marca.
|
||||
|
||||
A publicidade paga é a forma de obter visibilidade e tráfego imediatos. O email é o seu canal de comunicação direto e próprio. A automação é o motor que liga todas as peças e permite escalar a sua operação.
|
||||
|
||||
Parte 4: O Website – O Seu Quartel-General Digital
|
||||
|
||||
No meio de todas estas táticas e plataformas, o seu website é o único ativo que você controla a 100%. É o centro do seu universo digital. Todos os seus esforços de marketing digital devem, em última análise, convergir para o seu site.
|
||||
|
||||
Parte 5: A Medição do Sucesso
|
||||
|
||||
A beleza do Marketing Digital é que tudo é mensurável. O que não se mede, não se gere. O Google Analytics é a ferramenta gratuita e fundamental para analisar o tráfego e o comportamento no seu site.
|
||||
|
||||
Parte 6: A Integração
|
||||
|
||||
O verdadeiro poder do Marketing Digital não está em executar cada uma destas disciplinas de forma isolada, mas em integrá-las numa estratégia coesa.
|
||||
|
||||
O Marketing Digital é um processo contínuo de aprendizagem, teste e otimização. É uma jornada para compreender profundamente o seu cliente e encontrar formas cada vez mais eficazes de lhe entregar valor.
|
||||
|
||||
Para as empresas em Portugal, desde o negócio local à grande equipa, abraçar o Marketing Digital é abraçar o futuro. É a forma de competir, de crescer e de construir uma marca resiliente e relevante na economia moderna.
|
||||
|
||||
Está pronto para transformar a sua presença online de uma despesa numa máquina de crescimento? O caminho começa com o primeiro passo estratégico. Se precisa de um guia para o ajudar a navegar neste universo, nós estamos aqui. Marque uma Reunião e vamos desenhar juntos o mapa para o sucesso digital do seu negócio."""
|
||||
|
||||
# Escolher voz (podes mudar entre RaquelNeural e DuarteNeural)
|
||||
voz = "pt-PT-RaquelNeural" # Voz feminina PT-PT
|
||||
|
||||
print("🎙️ Gerando artigo completo da Descomplicar...")
|
||||
print(f"📝 Texto: {len(texto_completo)} caracteres")
|
||||
print(f"🎤 Voz: {voz}")
|
||||
print("⏳ Isto pode demorar alguns minutos...")
|
||||
|
||||
try:
|
||||
communicate = edge_tts.Communicate(texto_completo, voz)
|
||||
await communicate.save("descomplicar_artigo_marketing_digital_ptpt.mp3")
|
||||
|
||||
print("✅ Artigo completo gerado!")
|
||||
print("📁 Ficheiro: descomplicar_artigo_marketing_digital_ptpt.mp3")
|
||||
print("🎯 Pronto para usar em podcasts, vídeos ou acessibilidade!")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro: {e}")
|
||||
return False
|
||||
|
||||
async def escolher_voz():
|
||||
"""
|
||||
Permite escolher entre voz feminina ou masculina
|
||||
"""
|
||||
print("🎤 Escolha a voz para o artigo:")
|
||||
print("1. Raquel (Feminina)")
|
||||
print("2. Duarte (Masculino)")
|
||||
|
||||
escolha = input("Escolha (1/2): ").strip()
|
||||
|
||||
if escolha == "2":
|
||||
return "pt-PT-DuarteNeural"
|
||||
else:
|
||||
return "pt-PT-RaquelNeural"
|
||||
|
||||
async def main():
|
||||
voz = await escolher_voz()
|
||||
|
||||
# Atualizar voz no código
|
||||
texto_completo = """A Estratégia Definitiva para Crescer o Seu Negócio
|
||||
|
||||
No século 21, o mercado já não é um lugar físico; é um ecossistema digital em constante evolução. Os seus clientes não estão apenas a passar à porta da sua loja; estão a pesquisar no Google, a pedir recomendações no Facebook, a descobrir marcas no Instagram e a procurar especialistas no LinkedIn. Neste novo paradigma, ter uma presença digital não é uma opção. É a base sobre a qual os negócios modernos são construídos e escalados. Bem-vindo ao universo do Marketing Digital.
|
||||
|
||||
Para muitas empresas em Portugal, o termo Marketing Digital pode parecer um labirinto complexo e intimidante de acrónimos como SEO, PPC e CRM, plataformas e táticas que mudam a uma velocidade vertiginosa. É fácil sentir-se sobrecarregado e não saber por onde começar, o que muitas vezes leva a ações descoordenadas – um post aqui, um anúncio ali – com poucos ou nenhuns resultados mensuráveis. O problema não está nas ferramentas, mas na ausência de uma estratégia coesa que as una.
|
||||
|
||||
Este guia é o seu mapa para esse labirinto. O nosso objetivo é desmistificar o Marketing Digital, transformando-o de uma coleção de táticas isoladas numa metodologia de crescimento integrada e compreensível. Vamos explorar cada pilar, desde a fundação estratégica até à execução tática e à medição do sucesso. Na Descomplicar, a nossa filosofia é que o marketing de sucesso não é sobre fazer tudo, mas sobre fazer as coisas certas, da forma certa, e na ordem certa.
|
||||
|
||||
Parte 1: A Revolução Digital – Porque o Marketing Digital é o Novo Normal
|
||||
|
||||
Para dominar o presente, temos de compreender a mudança fundamental que nos trouxe até aqui.
|
||||
|
||||
A Mudança no Poder: Do Vendedor para o Consumidor
|
||||
|
||||
O marketing tradicional era baseado na interrupção. As empresas controlavam a mensagem e empurravam-na para o público através da TV, rádio e imprensa. Hoje, o poder mudou de mãos. O consumidor moderno, armado com um smartphone e acesso ilimitado à informação, está no controlo. Ele escolhe o que vê, quando vê e em quem confia. Dados do PORDATA mostram a penetração massiva da internet na sociedade portuguesa, solidificando esta nova realidade.
|
||||
|
||||
O Marketing Digital, na sua essência, é a resposta a esta mudança. É uma abordagem de puxar, não de empurrar. Trata-se de criar valor e estar presente nos canais onde os seus clientes já estão a procurar ativamente por soluções.
|
||||
|
||||
As Vantagens Inegáveis do Marketing Digital incluem mensurabilidade precisa, segmentação cirúrgica, custo-efetividade e ROI, agilidade e flexibilidade, e construção de relações a longo prazo.
|
||||
|
||||
Parte 2: A Fundação Estratégica – O Plano Antes da Ação
|
||||
|
||||
O maior erro no Marketing Digital é saltar para as táticas sem uma estratégia. É como tentar construir uma casa sem plantas.
|
||||
|
||||
Primeiro passo: Definir Objetivos SMART. Toda a sua estratégia deve começar com uma resposta clara à pergunta: O que queremos alcançar? Os seus objetivos devem ser específicos, mensuráveis, atingíveis, relevantes e temporais.
|
||||
|
||||
Segundo passo: Construir as Suas Buyer Personas. Você não pode comunicar eficazmente se não souber com quem está a falar. Uma buyer persona é um perfil semi-fictício do seu cliente ideal.
|
||||
|
||||
Terceiro passo: Mapear a Jornada do Cliente. A jornada do cliente é o processo ativo que alguém percorre para se tornar seu cliente. Compreendê-la permite-lhe criar o conteúdo certo para o momento certo.
|
||||
|
||||
Parte 3: Os Pilares do Marketing Digital
|
||||
|
||||
O Marketing Digital é um ecossistema de disciplinas interligadas. Os pilares fundamentais incluem SEO, Marketing de Conteúdo, Marketing nas Redes Sociais, Publicidade Paga, Email Marketing e Automação de Marketing.
|
||||
|
||||
O SEO é o processo de otimizar o seu site para que ele apareça nos primeiros lugares dos resultados orgânicos do Google. O Marketing de Conteúdo trata-se de criar e distribuir conteúdo valioso, relevante e consistente para atrair e reter um público-alvo. As redes sociais são onde você constrói a sua comunidade e humaniza a sua marca.
|
||||
|
||||
A publicidade paga é a forma de obter visibilidade e tráfego imediatos. O email é o seu canal de comunicação direto e próprio. A automação é o motor que liga todas as peças e permite escalar a sua operação.
|
||||
|
||||
Parte 4: O Website – O Seu Quartel-General Digital
|
||||
|
||||
No meio de todas estas táticas e plataformas, o seu website é o único ativo que você controla a 100%. É o centro do seu universo digital. Todos os seus esforços de marketing digital devem, em última análise, convergir para o seu site.
|
||||
|
||||
Parte 5: A Medição do Sucesso
|
||||
|
||||
A beleza do Marketing Digital é que tudo é mensurável. O que não se mede, não se gere. O Google Analytics é a ferramenta gratuita e fundamental para analisar o tráfego e o comportamento no seu site.
|
||||
|
||||
Parte 6: A Integração
|
||||
|
||||
O verdadeiro poder do Marketing Digital não está em executar cada uma destas disciplinas de forma isolada, mas em integrá-las numa estratégia coesa.
|
||||
|
||||
O Marketing Digital é um processo contínuo de aprendizagem, teste e otimização. É uma jornada para compreender profundamente o seu cliente e encontrar formas cada vez mais eficazes de lhe entregar valor.
|
||||
|
||||
Para as empresas em Portugal, desde o negócio local à grande equipa, abraçar o Marketing Digital é abraçar o futuro. É a forma de competir, de crescer e de construir uma marca resiliente e relevante na economia moderna.
|
||||
|
||||
Está pronto para transformar a sua presença online de uma despesa numa máquina de crescimento? O caminho começa com o primeiro passo estratégico. Se precisa de um guia para o ajudar a navegar neste universo, nós estamos aqui. Marque uma Reunião e vamos desenhar juntos o mapa para o sucesso digital do seu negócio."""
|
||||
|
||||
print("🎙️ Gerando artigo completo da Descomplicar...")
|
||||
print(f"📝 Texto: {len(texto_completo)} caracteres")
|
||||
print(f"🎤 Voz: {voz}")
|
||||
print("⏳ Isto pode demorar alguns minutos...")
|
||||
|
||||
try:
|
||||
communicate = edge_tts.Communicate(texto_completo, voz)
|
||||
filename = f"descomplicar_artigo_marketing_digital_ptpt.mp3"
|
||||
await communicate.save(filename)
|
||||
|
||||
print("✅ Artigo completo gerado!")
|
||||
print(f"📁 Ficheiro: {filename}")
|
||||
print("🎯 Pronto para usar em podcasts, vídeos ou acessibilidade!")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
106
tts-generator/gerar_artigo_raquel.py
Executable file
106
tts-generator/gerar_artigo_raquel.py
Executable file
@@ -0,0 +1,106 @@
|
||||
"""
|
||||
gerar_artigo_raquel.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Edge TTS - Artigo completo com voz Raquel
|
||||
# pip install edge-tts
|
||||
|
||||
import asyncio
|
||||
import edge_tts
|
||||
|
||||
async def gerar_artigo_raquel():
|
||||
"""
|
||||
Gera áudio do artigo completo com voz Raquel
|
||||
"""
|
||||
|
||||
# Texto completo do artigo da Descomplicar
|
||||
texto_completo = """A Estratégia Definitiva para Crescer o Seu Negócio
|
||||
|
||||
No século 21, o mercado já não é um lugar físico; é um ecossistema digital em constante evolução. Os seus clientes não estão apenas a passar à porta da sua loja; estão a pesquisar no Google, a pedir recomendações no Facebook, a descobrir marcas no Instagram e a procurar especialistas no LinkedIn. Neste novo paradigma, ter uma presença digital não é uma opção. É a base sobre a qual os negócios modernos são construídos e escalados. Bem-vindo ao universo do Marketing Digital.
|
||||
|
||||
Para muitas empresas em Portugal, o termo Marketing Digital pode parecer um labirinto complexo e intimidante de acrónimos como SEO, PPC e CRM, plataformas e táticas que mudam a uma velocidade vertiginosa. É fácil sentir-se sobrecarregado e não saber por onde começar, o que muitas vezes leva a ações descoordenadas – um post aqui, um anúncio ali – com poucos ou nenhuns resultados mensuráveis. O problema não está nas ferramentas, mas na ausência de uma estratégia coesa que as una.
|
||||
|
||||
Este guia é o seu mapa para esse labirinto. O nosso objetivo é desmistificar o Marketing Digital, transformando-o de uma coleção de táticas isoladas numa metodologia de crescimento integrada e compreensível. Vamos explorar cada pilar, desde a fundação estratégica até à execução tática e à medição do sucesso. Na Descomplicar, a nossa filosofia é que o marketing de sucesso não é sobre fazer tudo, mas sobre fazer as coisas certas, da forma certa, e na ordem certa.
|
||||
|
||||
Parte 1: A Revolução Digital – Porque o Marketing Digital é o Novo Normal
|
||||
|
||||
Para dominar o presente, temos de compreender a mudança fundamental que nos trouxe até aqui.
|
||||
|
||||
A Mudança no Poder: Do Vendedor para o Consumidor
|
||||
|
||||
O marketing tradicional era baseado na interrupção. As empresas controlavam a mensagem e empurravam-na para o público através da TV, rádio e imprensa. Hoje, o poder mudou de mãos. O consumidor moderno, armado com um smartphone e acesso ilimitado à informação, está no controlo. Ele escolhe o que vê, quando vê e em quem confia. Dados do PORDATA mostram a penetração massiva da internet na sociedade portuguesa, solidificando esta nova realidade.
|
||||
|
||||
O Marketing Digital, na sua essência, é a resposta a esta mudança. É uma abordagem de puxar, não de empurrar. Trata-se de criar valor e estar presente nos canais onde os seus clientes já estão a procurar ativamente por soluções.
|
||||
|
||||
As Vantagens Inegáveis do Marketing Digital incluem mensurabilidade precisa, segmentação cirúrgica, custo-efetividade e ROI, agilidade e flexibilidade, e construção de relações a longo prazo.
|
||||
|
||||
Parte 2: A Fundação Estratégica – O Plano Antes da Ação
|
||||
|
||||
O maior erro no Marketing Digital é saltar para as táticas sem uma estratégia. É como tentar construir uma casa sem plantas.
|
||||
|
||||
Primeiro passo: Definir Objetivos SMART. Toda a sua estratégia deve começar com uma resposta clara à pergunta: O que queremos alcançar? Os seus objetivos devem ser específicos, mensuráveis, atingíveis, relevantes e temporais.
|
||||
|
||||
Segundo passo: Construir as Suas Buyer Personas. Você não pode comunicar eficazmente se não souber com quem está a falar. Uma buyer persona é um perfil semi-fictício do seu cliente ideal.
|
||||
|
||||
Terceiro passo: Mapear a Jornada do Cliente. A jornada do cliente é o processo ativo que alguém percorre para se tornar seu cliente. Compreendê-la permite-lhe criar o conteúdo certo para o momento certo.
|
||||
|
||||
Parte 3: Os Pilares do Marketing Digital
|
||||
|
||||
O Marketing Digital é um ecossistema de disciplinas interligadas. Os pilares fundamentais incluem SEO, Marketing de Conteúdo, Marketing nas Redes Sociais, Publicidade Paga, Email Marketing e Automação de Marketing.
|
||||
|
||||
O SEO é o processo de otimizar o seu site para que ele apareça nos primeiros lugares dos resultados orgânicos do Google. O Marketing de Conteúdo trata-se de criar e distribuir conteúdo valioso, relevante e consistente para atrair e reter um público-alvo. As redes sociais são onde você constrói a sua comunidade e humaniza a sua marca.
|
||||
|
||||
A publicidade paga é a forma de obter visibilidade e tráfego imediatos. O email é o seu canal de comunicação direto e próprio. A automação é o motor que liga todas as peças e permite escalar a sua operação.
|
||||
|
||||
Parte 4: O Website – O Seu Quartel-General Digital
|
||||
|
||||
No meio de todas estas táticas e plataformas, o seu website é o único ativo que você controla a 100%. É o centro do seu universo digital. Todos os seus esforços de marketing digital devem, em última análise, convergir para o seu site.
|
||||
|
||||
Parte 5: A Medição do Sucesso
|
||||
|
||||
A beleza do Marketing Digital é que tudo é mensurável. O que não se mede, não se gere. O Google Analytics é a ferramenta gratuita e fundamental para analisar o tráfego e o comportamento no seu site.
|
||||
|
||||
Parte 6: A Integração
|
||||
|
||||
O verdadeiro poder do Marketing Digital não está em executar cada uma destas disciplinas de forma isolada, mas em integrá-las numa estratégia coesa.
|
||||
|
||||
O Marketing Digital é um processo contínuo de aprendizagem, teste e otimização. É uma jornada para compreender profundamente o seu cliente e encontrar formas cada vez mais eficazes de lhe entregar valor.
|
||||
|
||||
Para as empresas em Portugal, desde o negócio local à grande equipa, abraçar o Marketing Digital é abraçar o futuro. É a forma de competir, de crescer e de construir uma marca resiliente e relevante na economia moderna.
|
||||
|
||||
Está pronto para transformar a sua presença online de uma despesa numa máquina de crescimento? O caminho começa com o primeiro passo estratégico. Se precisa de um guia para o ajudar a navegar neste universo, nós estamos aqui. Marque uma Reunião e vamos desenhar juntos o mapa para o sucesso digital do seu negócio."""
|
||||
|
||||
# Voz Raquel - PT-PT Feminina
|
||||
voz = "pt-PT-RaquelNeural"
|
||||
|
||||
print("🎤 Gerando artigo completo com voz Raquel...")
|
||||
print(f"📝 Texto: {len(texto_completo)} caracteres")
|
||||
print(f"🎯 Voz: {voz} (Feminina PT-PT)")
|
||||
print("⏳ Gerando áudio... isto pode demorar alguns minutos...")
|
||||
|
||||
try:
|
||||
communicate = edge_tts.Communicate(texto_completo, voz)
|
||||
filename = "descomplicar_artigo_marketing_digital_raquel.mp3"
|
||||
await communicate.save(filename)
|
||||
|
||||
print("✅ Artigo completo gerado com sucesso!")
|
||||
print(f"📁 Ficheiro: {filename}")
|
||||
print("🎧 Duração estimada: 8-12 minutos")
|
||||
print("🎯 Pronto para usar em:")
|
||||
print(" • Podcasts da Descomplicar")
|
||||
print(" • Narração de vídeos")
|
||||
print(" • Acessibilidade do website")
|
||||
print(" • Apresentações automáticas")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro: {e}")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(gerar_artigo_raquel())
|
||||
67
tts-generator/gerar_formatado.py
Executable file
67
tts-generator/gerar_formatado.py
Executable file
@@ -0,0 +1,67 @@
|
||||
"""
|
||||
gerar_formatado.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Edge TTS - Texto formatado para melhor naturalidade
|
||||
import asyncio
|
||||
import edge_tts
|
||||
|
||||
async def gerar_com_pausas():
|
||||
# Texto com pausas e formatação para melhor entoação
|
||||
texto_formatado = """<speak>
|
||||
<prosody rate="0.9" pitch="medium">
|
||||
A Estratégia Definitiva para Crescer o Seu Negócio.
|
||||
|
||||
<break time="1s"/>
|
||||
|
||||
No século vinte e um, o mercado já não é um lugar físico. <break time="500ms"/> É um ecossistema digital em constante evolução.
|
||||
|
||||
<break time="500ms"/>
|
||||
|
||||
Os seus clientes não estão apenas a passar à porta da sua loja. <break time="300ms"/> Estão a pesquisar no Google, <break time="200ms"/> a pedir recomendações no Facebook, <break time="200ms"/> a descobrir marcas no Instagram <break time="200ms"/> e a procurar especialistas no LinkedIn.
|
||||
|
||||
<break time="1s"/>
|
||||
|
||||
Neste novo paradigma, ter uma presença digital não é uma opção. <break time="500ms"/> É a base sobre a qual os negócios modernos são construídos e escalados.
|
||||
|
||||
<break time="800ms"/>
|
||||
|
||||
Bem-vindo ao universo do Marketing Digital.
|
||||
|
||||
<break time="1.5s"/>
|
||||
|
||||
Para muitas empresas em Portugal, o termo Marketing Digital pode parecer um labirinto complexo e intimidante. <break time="500ms"/> Acrónimos como SEO, <break time="200ms"/> PPC <break time="200ms"/> e CRM, <break time="300ms"/> plataformas e táticas que mudam a uma velocidade vertiginosa.
|
||||
|
||||
<break time="800ms"/>
|
||||
|
||||
É fácil sentir-se sobrecarregado e não saber por onde começar. <break time="500ms"/> O que muitas vezes leva a ações descoordenadas: <break time="300ms"/> um post aqui, <break time="200ms"/> um anúncio ali, <break time="300ms"/> com poucos ou nenhuns resultados mensuráveis.
|
||||
|
||||
<break time="1s"/>
|
||||
|
||||
O problema não está nas ferramentas, <break time="300ms"/> mas na ausência de uma estratégia coesa que as una.
|
||||
|
||||
<break time="1.5s"/>
|
||||
|
||||
Este guia é o seu mapa para esse labirinto. <break time="500ms"/> O nosso objetivo é desmistificar o Marketing Digital, transformando-o de uma coleção de táticas isoladas numa metodologia de crescimento integrada e compreensível.
|
||||
|
||||
<break time="1s"/>
|
||||
|
||||
Na Descomplicar, a nossa filosofia é que o marketing de sucesso não é sobre fazer tudo, <break time="400ms"/> mas sobre fazer as coisas certas, <break time="300ms"/> da forma certa, <break time="300ms"/> e na ordem certa.
|
||||
</prosody>
|
||||
</speak>"""
|
||||
|
||||
voz = "pt-PT-RaquelNeural"
|
||||
|
||||
print("🎤 Gerando com formatação SSML para melhor naturalidade...")
|
||||
|
||||
communicate = edge_tts.Communicate(texto_formatado, voz)
|
||||
await communicate.save("descomplicar_formatado_natural.mp3")
|
||||
|
||||
print("✅ Versão formatada gerada: descomplicar_formatado_natural.mp3")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(gerar_com_pausas())
|
||||
46
tts-generator/gerar_limpo.py
Executable file
46
tts-generator/gerar_limpo.py
Executable file
@@ -0,0 +1,46 @@
|
||||
"""
|
||||
gerar_limpo.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Edge TTS - Versão corrigida SEM SSML
|
||||
import asyncio
|
||||
import edge_tts
|
||||
|
||||
async def gerar_texto_limpo():
|
||||
# Texto limpo, bem formatado, sem tags XML
|
||||
texto_limpo = """A Estratégia Definitiva para Crescer o Seu Negócio.
|
||||
|
||||
No século vinte e um, o mercado já não é um lugar físico. É um ecossistema digital em constante evolução.
|
||||
|
||||
Os seus clientes não estão apenas a passar à porta da sua loja. Estão a pesquisar no Google, a pedir recomendações no Facebook, a descobrir marcas no Instagram e a procurar especialistas no LinkedIn.
|
||||
|
||||
Neste novo paradigma, ter uma presença digital não é uma opção. É a base sobre a qual os negócios modernos são construídos e escalados.
|
||||
|
||||
Bem-vindo ao universo do Marketing Digital.
|
||||
|
||||
Para muitas empresas em Portugal, o termo Marketing Digital pode parecer um labirinto complexo e intimidante. Acrónimos como SEO, PPC e CRM. Plataformas e táticas que mudam a uma velocidade vertiginosa.
|
||||
|
||||
É fácil sentir-se sobrecarregado e não saber por onde começar. O que muitas vezes leva a ações descoordenadas: um post aqui, um anúncio ali, com poucos ou nenhuns resultados mensuráveis.
|
||||
|
||||
O problema não está nas ferramentas, mas na ausência de uma estratégia coesa que as una.
|
||||
|
||||
Este guia é o seu mapa para esse labirinto. O nosso objetivo é desmistificar o Marketing Digital, transformando-o de uma coleção de táticas isoladas numa metodologia de crescimento integrada e compreensível.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é que o marketing de sucesso não é sobre fazer tudo, mas sobre fazer as coisas certas, da forma certa, e na ordem certa."""
|
||||
|
||||
voz = "pt-PT-RaquelNeural"
|
||||
|
||||
print("🎤 Gerando versão limpa (sem SSML)...")
|
||||
|
||||
communicate = edge_tts.Communicate(texto_limpo, voz)
|
||||
await communicate.save("descomplicar_limpo_raquel.mp3")
|
||||
|
||||
print("✅ Versão limpa gerada: descomplicar_limpo_raquel.mp3")
|
||||
print("💡 Agora sem tags XML que a Raquel estava a ler!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(gerar_texto_limpo())
|
||||
61
tts-generator/openai_ptpt_hack.py
Executable file
61
tts-generator/openai_ptpt_hack.py
Executable file
@@ -0,0 +1,61 @@
|
||||
"""
|
||||
openai_ptpt_hack.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Tentativa de forçar PT-PT no OpenAI TTS
|
||||
# pip install openai
|
||||
|
||||
import os
|
||||
from openai import OpenAI
|
||||
from pathlib import Path
|
||||
|
||||
def generate_audio_openai_ptpt():
|
||||
"""
|
||||
Tenta gerar áudio PT-PT modificando o texto
|
||||
"""
|
||||
client = OpenAI(
|
||||
api_key=os.environ.get("OPENAI_API_KEY")
|
||||
)
|
||||
|
||||
# Adicionar indicações de pronuncia PT-PT
|
||||
texto_ptpt = """[Falar com sotaque português europeu, não brasileiro]
|
||||
|
||||
Bem-vindo à Descomplicar, a agência de aceleração digital que transforma a vossa presença online numa máquina de crescimento.
|
||||
|
||||
Somos especialistas em Marketing Digital, criação de sítios web profissionais e estratégias que geram resultados reais para o vosso negócio.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é simples: tornar o complexo mais simples. Descomplicamos o marketing digital para que vós vos possais focar no que fazeis melhor - gerir o vosso negócio."""
|
||||
|
||||
print("🇵🇹 Tentando forçar sotaque PT-PT no OpenAI...")
|
||||
|
||||
try:
|
||||
response = client.audio.speech.create(
|
||||
model="tts-1-hd",
|
||||
voice="nova", # Voz que pode soar mais neutra
|
||||
input=texto_ptpt,
|
||||
response_format="mp3"
|
||||
)
|
||||
|
||||
speech_file_path = Path("descomplicar_ptpt_tentativa.mp3")
|
||||
with open(speech_file_path, "wb") as f:
|
||||
f.write(response.content)
|
||||
|
||||
print(f"✅ Áudio gerado: {speech_file_path}")
|
||||
print("🎧 Ouve para ver se melhorou o sotaque")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro: {e}")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
if not os.environ.get("OPENAI_API_KEY"):
|
||||
print("❌ OPENAI_API_KEY não configurada!")
|
||||
exit(1)
|
||||
|
||||
generate_audio_openai_ptpt()
|
||||
115
tts-generator/openai_tts.py
Executable file
115
tts-generator/openai_tts.py
Executable file
@@ -0,0 +1,115 @@
|
||||
"""
|
||||
openai_tts.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# OpenAI TTS Generator for Descomplicar
|
||||
# pip install openai
|
||||
|
||||
import os
|
||||
from openai import OpenAI
|
||||
from pathlib import Path
|
||||
|
||||
def generate_audio_openai():
|
||||
"""
|
||||
Gera áudio usando OpenAI TTS API
|
||||
"""
|
||||
# Configurar cliente OpenAI
|
||||
client = OpenAI(
|
||||
api_key=os.environ.get("OPENAI_API_KEY")
|
||||
)
|
||||
|
||||
# Texto do artigo de Marketing Digital da Descomplicar
|
||||
texto_marketing = """A Estratégia Definitiva para Crescer o Seu Negócio
|
||||
|
||||
No século 21, o mercado já não é um lugar físico; é um ecossistema digital em constante evolução. Os seus clientes não estão apenas a passar à porta da sua loja; estão a pesquisar no Google, a pedir recomendações no Facebook, a descobrir marcas no Instagram e a procurar especialistas no LinkedIn. Neste novo paradigma, ter uma presença digital não é uma opção. É a base sobre a qual os negócios modernos são construídos e escalados. Bem-vindo ao universo do Marketing Digital.
|
||||
|
||||
Para muitas empresas em Portugal, o termo Marketing Digital pode parecer um labirinto complexo e intimidante de acrónimos como SEO, PPC e CRM, plataformas e táticas que mudam a uma velocidade vertiginosa. É fácil sentir-se sobrecarregado e não saber por onde começar, o que muitas vezes leva a ações descoordenadas – um post aqui, um anúncio ali – com poucos ou nenhuns resultados mensuráveis. O problema não está nas ferramentas, mas na ausência de uma estratégia coesa que as una.
|
||||
|
||||
Este guia é o seu mapa para esse labirinto. O nosso objetivo é desmistificar o Marketing Digital, transformando-o de uma coleção de táticas isoladas numa metodologia de crescimento integrada e compreensível. Vamos explorar cada pilar, desde a fundação estratégica até à execução tática e à medição do sucesso. Na Descomplicar, a nossa filosofia é que o marketing de sucesso não é sobre fazer tudo, mas sobre fazer as coisas certas, da forma certa, e na ordem certa."""
|
||||
|
||||
print("🎙️ Iniciando geração de áudio com OpenAI TTS...")
|
||||
print(f"📝 Texto tem {len(texto_marketing)} caracteres")
|
||||
|
||||
try:
|
||||
# Fazer request à OpenAI TTS API
|
||||
response = client.audio.speech.create(
|
||||
model="tts-1-hd", # Modelo de alta qualidade
|
||||
voice="nova", # Voz feminina natural
|
||||
input=texto_marketing,
|
||||
response_format="mp3"
|
||||
)
|
||||
|
||||
# Salvar o áudio
|
||||
speech_file_path = Path("descomplicar_marketing_digital.mp3")
|
||||
with open(speech_file_path, "wb") as f:
|
||||
f.write(response.content)
|
||||
|
||||
print(f"✅ Áudio gerado com sucesso: {speech_file_path}")
|
||||
print(f"📁 Ficheiro salvo em: {speech_file_path.absolute()}")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro ao gerar áudio: {e}")
|
||||
return False
|
||||
|
||||
def generate_audio_test():
|
||||
"""
|
||||
Teste rápido com texto menor
|
||||
"""
|
||||
client = OpenAI(
|
||||
api_key=os.environ.get("OPENAI_API_KEY")
|
||||
)
|
||||
|
||||
texto_teste = """Bem-vindo à Descomplicar, a agência de aceleração digital que transforma a sua presença online numa máquina de crescimento.
|
||||
|
||||
Somos especialistas em Marketing Digital, criação de websites profissionais e estratégias que geram resultados reais para o seu negócio.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é simples: tornar o complexo mais simples. Descomplicamos o marketing digital para que você se possa focar no que faz melhor - gerir o seu negócio."""
|
||||
|
||||
print("🧪 Testando OpenAI TTS com texto pequeno...")
|
||||
|
||||
try:
|
||||
response = client.audio.speech.create(
|
||||
model="tts-1", # Modelo standard (mais rápido)
|
||||
voice="nova", # Voz feminina
|
||||
input=texto_teste,
|
||||
response_format="mp3"
|
||||
)
|
||||
|
||||
speech_file_path = Path("descomplicar_teste.mp3")
|
||||
with open(speech_file_path, "wb") as f:
|
||||
f.write(response.content)
|
||||
|
||||
print(f"✅ Teste concluído: {speech_file_path}")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro no teste: {e}")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Verificar se API key está configurada
|
||||
if not os.environ.get("OPENAI_API_KEY"):
|
||||
print("❌ OPENAI_API_KEY não configurada!")
|
||||
print("Configure com: export OPENAI_API_KEY='sua_chave'")
|
||||
exit(1)
|
||||
|
||||
print("🤖 Gerador de Voz OpenAI - Descomplicar")
|
||||
print("=" * 50)
|
||||
|
||||
# Escolher entre teste ou completo
|
||||
escolha = input("Escolha: (t)este pequeno ou (c)ompleto? [t/c]: ").lower()
|
||||
|
||||
if escolha == 'c':
|
||||
print("\n🎯 Gerando áudio completo...")
|
||||
generate_audio_openai()
|
||||
else:
|
||||
print("\n🧪 Gerando teste...")
|
||||
generate_audio_test()
|
||||
|
||||
print("\n📁 Ficheiros MP3 gerados na pasta atual")
|
||||
2
tts-generator/requirements.txt
Executable file
2
tts-generator/requirements.txt
Executable file
@@ -0,0 +1,2 @@
|
||||
openai>=1.0.0
|
||||
edge-tts>=7.0.0
|
||||
32
tts-generator/run_edge_tts.sh
Executable file
32
tts-generator/run_edge_tts.sh
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
# run_edge_tts.sh
|
||||
# Author: Descomplicar® Crescimento Digital
|
||||
# Link: https://descomplicar.pt
|
||||
# Copyright: 2025 Descomplicar®
|
||||
|
||||
|
||||
# Edge TTS - Solução gratuita e com PT-PT nativo
|
||||
echo "🇵🇹 Configurando Edge TTS (Gratuito + PT-PT Nativo)"
|
||||
echo "=" * 55
|
||||
|
||||
# Ativar ambiente virtual
|
||||
if [ ! -d "venv" ]; then
|
||||
python3 -m venv venv
|
||||
fi
|
||||
|
||||
source venv/bin/activate
|
||||
|
||||
# Instalar edge-tts
|
||||
echo "📦 Instalando edge-tts..."
|
||||
pip install edge-tts
|
||||
|
||||
# Executar
|
||||
echo "🎙️ Gerando áudio com voz portuguesa nativa..."
|
||||
python edge_tts_ptpt.py
|
||||
|
||||
echo ""
|
||||
echo "🎧 Ficheiros gerados:"
|
||||
ls -la *.mp3 | grep edge 2>/dev/null || echo "Nenhum ficheiro encontrado"
|
||||
|
||||
echo ""
|
||||
echo "✅ Edge TTS - 100% gratuito, sem limites, PT-PT autêntico!"
|
||||
33
tts-generator/run_gemini_tts.bat
Executable file
33
tts-generator/run_gemini_tts.bat
Executable file
@@ -0,0 +1,33 @@
|
||||
@echo off
|
||||
REM Script para Windows - Configurar e executar o Gerador de Voz da Descomplicar
|
||||
|
||||
echo 🎙️ Configurando Gerador de Voz da Descomplicar...
|
||||
|
||||
REM Carregar API Key do .env
|
||||
if exist .env (
|
||||
for /f "tokens=1,2 delims==" %%a in (.env) do set %%a=%%b
|
||||
)
|
||||
if "%GEMINI_API_KEY%"=="" (
|
||||
echo ERRO: GEMINI_API_KEY nao configurada! Criar .env com GEMINI_API_KEY=...
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Verificar se Python está instalado
|
||||
python --version >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo ❌ Python não encontrado. Por favor, instale o Python 3.8+
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Instalar dependências
|
||||
echo 📦 Instalando dependências...
|
||||
pip install google-genai
|
||||
|
||||
REM Executar o script
|
||||
echo 🚀 Iniciando geração de áudio...
|
||||
python gemini_tts.py
|
||||
|
||||
echo ✅ Processo concluído! Verifique os ficheiros de áudio gerados.
|
||||
pause
|
||||
42
tts-generator/run_gemini_tts.sh
Executable file
42
tts-generator/run_gemini_tts.sh
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
# run_gemini_tts.sh
|
||||
# Author: Descomplicar® Crescimento Digital
|
||||
# Link: https://descomplicar.pt
|
||||
# Copyright: 2025 Descomplicar®
|
||||
|
||||
|
||||
# Script para configurar e executar o Gerador de Voz da Descomplicar
|
||||
# Usage: ./run_gemini_tts.sh
|
||||
|
||||
echo "🎙️ Configurando Gerador de Voz da Descomplicar..."
|
||||
|
||||
# Carregar API Key do .env
|
||||
if [ -f .env ]; then
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
fi
|
||||
if [ -z "$GEMINI_API_KEY" ]; then
|
||||
echo "ERRO: GEMINI_API_KEY nao configurada! Criar .env com GEMINI_API_KEY=..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verificar se Python está instalado
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo "❌ Python3 não encontrado. Por favor, instale o Python 3.8+"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verificar se pip está instalado
|
||||
if ! command -v pip &> /dev/null; then
|
||||
echo "❌ pip não encontrado. Por favor, instale o pip"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Instalar dependências
|
||||
echo "📦 Instalando dependências..."
|
||||
pip install google-genai
|
||||
|
||||
# Executar o script
|
||||
echo "🚀 Iniciando geração de áudio..."
|
||||
python3 gemini_tts.py
|
||||
|
||||
echo "✅ Processo concluído! Verifique os ficheiros de áudio gerados."
|
||||
66
tts-generator/run_gemini_tts_venv.sh
Executable file
66
tts-generator/run_gemini_tts_venv.sh
Executable file
@@ -0,0 +1,66 @@
|
||||
#!/bin/bash
|
||||
# run_gemini_tts_venv.sh
|
||||
# Author: Descomplicar® Crescimento Digital
|
||||
# Link: https://descomplicar.pt
|
||||
# Copyright: 2025 Descomplicar®
|
||||
|
||||
|
||||
# Script para configurar e executar o Gerador de Voz da Descomplicar
|
||||
# Com ambiente virtual para evitar conflitos do sistema
|
||||
|
||||
echo "🎙️ Configurando Gerador de Voz da Descomplicar..."
|
||||
|
||||
# Carregar API Key do .env
|
||||
if [ -f .env ]; then
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
fi
|
||||
if [ -z "$GEMINI_API_KEY" ]; then
|
||||
echo "ERRO: GEMINI_API_KEY nao configurada! Criar .env com GEMINI_API_KEY=..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verificar se Python está instalado
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo "❌ Python3 não encontrado. Por favor, instale o Python 3.8+"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Criar ambiente virtual se não existir
|
||||
if [ ! -d "venv" ]; then
|
||||
echo "📦 Criando ambiente virtual..."
|
||||
python3 -m venv venv
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Erro ao criar ambiente virtual. Instalando python3-venv..."
|
||||
sudo apt update
|
||||
sudo apt install python3-venv python3-full -y
|
||||
python3 -m venv venv
|
||||
fi
|
||||
fi
|
||||
|
||||
# Ativar ambiente virtual
|
||||
echo "🔄 Ativando ambiente virtual..."
|
||||
source venv/bin/activate
|
||||
|
||||
# Atualizar pip
|
||||
echo "🔧 Atualizando pip..."
|
||||
pip install --upgrade pip
|
||||
|
||||
# Instalar dependências
|
||||
echo "📦 Instalando dependências no ambiente virtual..."
|
||||
pip install google-genai
|
||||
|
||||
# Verificar se a instalação foi bem-sucedida
|
||||
if python -c "import google.genai" 2>/dev/null; then
|
||||
echo "✅ Dependências instaladas com sucesso!"
|
||||
else
|
||||
echo "❌ Erro na instalação das dependências"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Executar o script
|
||||
echo "🚀 Iniciando geração de áudio..."
|
||||
python gemini_tts.py
|
||||
|
||||
# Manter o ambiente ativo para debugging se necessário
|
||||
echo "✅ Processo concluído! Verifique os ficheiros de áudio gerados."
|
||||
echo "💡 Para usar novamente, execute: source venv/bin/activate && python gemini_tts.py"
|
||||
38
tts-generator/run_openai_tts.sh
Executable file
38
tts-generator/run_openai_tts.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
# run_openai_tts.sh
|
||||
# Author: Descomplicar® Crescimento Digital
|
||||
# Link: https://descomplicar.pt
|
||||
# Copyright: 2025 Descomplicar®
|
||||
|
||||
|
||||
# Script para executar OpenAI TTS com configuração automática
|
||||
echo "🤖 Configurando OpenAI TTS para a Descomplicar..."
|
||||
|
||||
# Carregar API Key do .env
|
||||
if [ -f .env ]; then
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
fi
|
||||
if [ -z "$OPENAI_API_KEY" ]; then
|
||||
echo "ERRO: OPENAI_API_KEY nao configurada! Criar .env com OPENAI_API_KEY=..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ativar ambiente virtual se existir, senão criar
|
||||
if [ ! -d "venv" ]; then
|
||||
echo "📦 Criando ambiente virtual..."
|
||||
python3 -m venv venv
|
||||
fi
|
||||
|
||||
echo "🔄 Ativando ambiente virtual..."
|
||||
source venv/bin/activate
|
||||
|
||||
# Instalar dependências OpenAI
|
||||
echo "📦 Instalando openai..."
|
||||
pip install openai
|
||||
|
||||
# Executar o script
|
||||
echo "🎙️ Executando gerador OpenAI TTS..."
|
||||
python openai_tts.py
|
||||
|
||||
echo "✅ Processo concluído!"
|
||||
echo "🎵 Verifique os ficheiros MP3 gerados"
|
||||
26
tts-generator/testar_opcoes_naturais.sh
Executable file
26
tts-generator/testar_opcoes_naturais.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
# testar_opcoes_naturais.sh
|
||||
# Author: Descomplicar® Crescimento Digital
|
||||
# Link: https://descomplicar.pt
|
||||
# Copyright: 2025 Descomplicar®
|
||||
|
||||
|
||||
# Teste rápido das diferentes opções
|
||||
echo "🎧 Testando opções para voz mais natural..."
|
||||
|
||||
source venv/bin/activate
|
||||
|
||||
echo "1️⃣ Testando voz masculina Duarte..."
|
||||
python teste_duarte.py
|
||||
|
||||
echo ""
|
||||
echo "2️⃣ Testando formatação melhorada..."
|
||||
python gerar_formatado.py
|
||||
|
||||
echo ""
|
||||
echo "🎧 Ficheiros gerados para comparação:"
|
||||
ls -la teste_duarte_ptpt.mp3 descomplicar_formatado_natural.mp3 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "💡 Ouve ambos e diz qual soa mais natural!"
|
||||
echo "📝 Se ainda não estiver bom, posso configurar Azure Speech"
|
||||
109
tts-generator/teste_comparativo_vozes.py
Executable file
109
tts-generator/teste_comparativo_vozes.py
Executable file
@@ -0,0 +1,109 @@
|
||||
# Teste comparativo: Todas as vozes OpenAI + truques PT-PT
|
||||
# pip install openai
|
||||
|
||||
import os
|
||||
from openai import OpenAI
|
||||
from pathlib import Path
|
||||
|
||||
def test_all_openai_voices():
|
||||
"""
|
||||
Testa todas as vozes do OpenAI para encontrar a mais PT-PT
|
||||
"""
|
||||
client = OpenAI(
|
||||
api_key=os.environ.get("OPENAI_API_KEY")
|
||||
)
|
||||
|
||||
# Texto teste com palavras que revelam sotaque
|
||||
texto_teste = """Olá, bem-vindos à Descomplicar. Somos uma agência portuguesa especializada em marketing digital.
|
||||
|
||||
Ajudamos empresas a crescer através de estratégias digitais eficazes.
|
||||
|
||||
O nosso website está disponível em www.descomplicar.pt e oferecemos serviços de consultoria, criação de sites e gestão de redes sociais."""
|
||||
|
||||
vozes = ["alloy", "echo", "fable", "onyx", "nova", "shimmer"]
|
||||
|
||||
print("🧪 Testando todas as vozes OpenAI para PT-PT...")
|
||||
print("=" * 60)
|
||||
|
||||
for voz in vozes:
|
||||
print(f"🎤 Testando voz: {voz}")
|
||||
|
||||
try:
|
||||
response = client.audio.speech.create(
|
||||
model="tts-1-hd",
|
||||
voice=voz,
|
||||
input=texto_teste,
|
||||
response_format="mp3"
|
||||
)
|
||||
|
||||
speech_file_path = Path(f"teste_voz_{voz}.mp3")
|
||||
with open(speech_file_path, "wb") as f:
|
||||
f.write(response.content)
|
||||
|
||||
print(f"✅ Gerado: {speech_file_path}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro com voz {voz}: {e}")
|
||||
|
||||
print("\n🎧 Ouve todos os ficheiros para comparar qual soa mais PT-PT")
|
||||
|
||||
def test_ptpt_tricks():
|
||||
"""
|
||||
Testa vários truques para forçar PT-PT
|
||||
"""
|
||||
client = OpenAI(
|
||||
api_key=os.environ.get("OPENAI_API_KEY")
|
||||
)
|
||||
|
||||
textos = {
|
||||
"normal": "Olá, bem-vindos à Descomplicar, a vossa agência de marketing digital.",
|
||||
|
||||
"com_indicacao": "[Português Europeu] Olá, bem-vindos à Descomplicar, a vossa agência de marketing digital.",
|
||||
|
||||
"ortografia_ptpt": "Olá, bem-vindos à Descomplicar. Actualizamos constantemente os nossos métodos de optimização.",
|
||||
|
||||
"vocabulario_ptpt": "Olá, bem-vindos à Descomplicar. Criamos sítios web e ecrãs optimizados para telemóveis.",
|
||||
|
||||
"formal_ptpt": "Vossa Excelência, bem-vindos à Descomplicar. Prestamos serviços de consultoria em marketing digital."
|
||||
}
|
||||
|
||||
print("🇵🇹 Testando truques para PT-PT...")
|
||||
print("=" * 40)
|
||||
|
||||
for nome, texto in textos.items():
|
||||
print(f"📝 Teste: {nome}")
|
||||
|
||||
try:
|
||||
response = client.audio.speech.create(
|
||||
model="tts-1-hd",
|
||||
voice="nova", # Voz mais neutra
|
||||
input=texto,
|
||||
response_format="mp3"
|
||||
)
|
||||
|
||||
speech_file_path = Path(f"ptpt_trick_{nome}.mp3")
|
||||
with open(speech_file_path, "wb") as f:
|
||||
f.write(response.content)
|
||||
|
||||
print(f"✅ Gerado: {speech_file_path}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
if not os.environ.get("OPENAI_API_KEY"):
|
||||
print("❌ OPENAI_API_KEY não configurada!")
|
||||
exit(1)
|
||||
|
||||
print("🔬 Teste Comparativo OpenAI TTS - PT-PT vs PT-BR")
|
||||
print("=" * 55)
|
||||
|
||||
escolha = input("Testar: (v)ozes diferentes ou (t)ruques PT-PT? [v/t]: ").lower()
|
||||
|
||||
if escolha == 't':
|
||||
test_ptpt_tricks()
|
||||
else:
|
||||
test_all_openai_voices()
|
||||
|
||||
print("\n🎯 Conclusão: Compara os ficheiros MP3 gerados!")
|
||||
print("💡 Se nenhum soar PT-PT, confirma que precisamos de outra solução")
|
||||
30
tts-generator/teste_duarte.py
Executable file
30
tts-generator/teste_duarte.py
Executable file
@@ -0,0 +1,30 @@
|
||||
"""
|
||||
teste_duarte.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Edge TTS - Teste com voz Duarte (masculina)
|
||||
import asyncio
|
||||
import edge_tts
|
||||
|
||||
async def teste_duarte():
|
||||
texto_teste = """Bem-vindos à Descomplicar, a agência de aceleração digital que transforma a vossa presença online numa máquina de crescimento.
|
||||
|
||||
Somos especialistas em Marketing Digital, criação de websites profissionais e estratégias que geram resultados reais para o vosso negócio.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é simples: tornar o complexo mais simples."""
|
||||
|
||||
voz = "pt-PT-DuarteNeural"
|
||||
|
||||
print(f"🎤 Testando voz masculina: {voz}")
|
||||
|
||||
communicate = edge_tts.Communicate(texto_teste, voz)
|
||||
await communicate.save("teste_duarte_ptpt.mp3")
|
||||
|
||||
print("✅ Teste Duarte gerado: teste_duarte_ptpt.mp3")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(teste_duarte())
|
||||
43
tts-generator/teste_nova_chave_gemini.sh
Executable file
43
tts-generator/teste_nova_chave_gemini.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
# teste_nova_chave_gemini.sh
|
||||
# Author: Descomplicar® Crescimento Digital
|
||||
# Link: https://descomplicar.pt
|
||||
# Copyright: 2025 Descomplicar®
|
||||
|
||||
|
||||
# Teste rápido da nova chave Google Gemini
|
||||
echo "🎯 Testando nova chave Google Gemini..."
|
||||
|
||||
# Carregar API Key do .env
|
||||
if [ -f .env ]; then
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
fi
|
||||
if [ -z "$GEMINI_API_KEY" ]; then
|
||||
echo "ERRO: GEMINI_API_KEY nao configurada! Criar .env com GEMINI_API_KEY=..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ativar ambiente virtual se existir
|
||||
if [ -d "venv" ]; then
|
||||
echo "🔄 Ativando ambiente virtual..."
|
||||
source venv/bin/activate
|
||||
fi
|
||||
|
||||
# Verificar se google-genai está instalado
|
||||
echo "📦 Verificando dependências..."
|
||||
python -c "import google.genai" 2>/dev/null || {
|
||||
echo "📦 Instalando google-genai..."
|
||||
pip install google-genai
|
||||
}
|
||||
|
||||
# Executar teste pequeno primeiro
|
||||
echo "🧪 Executando teste com texto pequeno..."
|
||||
python gemini_tts_teste.py
|
||||
|
||||
echo ""
|
||||
echo "📁 Ficheiros gerados:"
|
||||
ls -la *.wav 2>/dev/null || echo "❌ Nenhum ficheiro WAV encontrado"
|
||||
|
||||
echo ""
|
||||
echo "🎯 Se funcionou, execute o completo com:"
|
||||
echo "./run_gemini_tts_venv.sh"
|
||||
25
tts-generator/teste_quota.sh
Executable file
25
tts-generator/teste_quota.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# teste_quota.sh
|
||||
# Author: Descomplicar® Crescimento Digital
|
||||
# Link: https://descomplicar.pt
|
||||
# Copyright: 2025 Descomplicar®
|
||||
|
||||
|
||||
# Teste rápido com texto pequeno
|
||||
echo "🧪 Testando com texto menor para verificar quota..."
|
||||
|
||||
# Carregar API Key do .env
|
||||
if [ -f .env ]; then
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
fi
|
||||
if [ -z "$GEMINI_API_KEY" ]; then
|
||||
echo "ERRO: GEMINI_API_KEY nao configurada!"
|
||||
exit 1
|
||||
fi
|
||||
source venv/bin/activate
|
||||
|
||||
echo "🎤 Gerando áudio de teste..."
|
||||
python gemini_tts_teste.py
|
||||
|
||||
echo "📁 Ficheiros gerados:"
|
||||
ls -la *.wav 2>/dev/null || echo "Nenhum ficheiro WAV encontrado"
|
||||
41
tts-generator/teste_rapido_edge.py
Executable file
41
tts-generator/teste_rapido_edge.py
Executable file
@@ -0,0 +1,41 @@
|
||||
"""
|
||||
teste_rapido_edge.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Edge TTS - Teste rápido corrigido
|
||||
# pip install edge-tts
|
||||
|
||||
import asyncio
|
||||
import edge_tts
|
||||
|
||||
async def gerar_audio_rapido():
|
||||
"""
|
||||
Teste rápido com voz correta
|
||||
"""
|
||||
texto = "Olá, bem-vindos à Descomplicar. Somos uma agência portuguesa de marketing digital que transforma a vossa presença online numa máquina de crescimento."
|
||||
|
||||
# Testar ambas as vozes PT-PT
|
||||
vozes = [
|
||||
("pt-PT-RaquelNeural", "feminina"),
|
||||
("pt-PT-DuarteNeural", "masculina")
|
||||
]
|
||||
|
||||
for voz, genero in vozes:
|
||||
print(f"🎤 Testando voz {genero}: {voz}")
|
||||
|
||||
try:
|
||||
communicate = edge_tts.Communicate(texto, voz)
|
||||
filename = f"teste_{genero}_ptpt.mp3"
|
||||
await communicate.save(filename)
|
||||
|
||||
print(f"✅ Gerado: {filename}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erro com {voz}: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(gerar_audio_rapido())
|
||||
34
tts-generator/teste_todas_vozes.sh
Executable file
34
tts-generator/teste_todas_vozes.sh
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# teste_todas_vozes.sh
|
||||
# Author: Descomplicar® Crescimento Digital
|
||||
# Link: https://descomplicar.pt
|
||||
# Copyright: 2025 Descomplicar®
|
||||
|
||||
|
||||
# Carregar API key do .env
|
||||
if [ -f .env ]; then
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
fi
|
||||
if [ -z "$OPENAI_API_KEY" ]; then
|
||||
echo "ERRO: OPENAI_API_KEY nao configurada! Criar .env com OPENAI_API_KEY=..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🔬 Teste Comparativo de Vozes OpenAI para PT-PT"
|
||||
echo "=" * 50
|
||||
|
||||
# Ativar venv se não estiver ativo
|
||||
if [[ "$VIRTUAL_ENV" == "" ]]; then
|
||||
source venv/bin/activate
|
||||
fi
|
||||
|
||||
# Executar teste
|
||||
python teste_comparativo_vozes.py
|
||||
|
||||
echo ""
|
||||
echo "🎧 Ficheiros gerados para comparação:"
|
||||
ls -la *.mp3 | grep teste_voz 2>/dev/null || echo "Nenhum ficheiro de teste encontrado"
|
||||
ls -la *.mp3 | grep ptpt_trick 2>/dev/null || echo "Nenhum ficheiro de truque encontrado"
|
||||
|
||||
echo ""
|
||||
echo "💡 Ouve cada ficheiro para identificar qual soa mais PT-PT"
|
||||
33
tts-generator/teste_velocidade.py
Executable file
33
tts-generator/teste_velocidade.py
Executable file
@@ -0,0 +1,33 @@
|
||||
"""
|
||||
teste_velocidade.py
|
||||
|
||||
Author: Descomplicar® Crescimento Digital
|
||||
Link: https://descomplicar.pt
|
||||
Copyright: 2025 Descomplicar®
|
||||
"""
|
||||
|
||||
# Edge TTS - Usando rate parameter (funciona!)
|
||||
import asyncio
|
||||
import edge_tts
|
||||
|
||||
async def gerar_velocidade_ajustada():
|
||||
texto = """Bem-vindos à Descomplicar, a agência de aceleração digital que transforma a vossa presença online numa máquina de crescimento.
|
||||
|
||||
Somos especialistas em Marketing Digital, criação de websites profissionais e estratégias que geram resultados reais para o vosso negócio.
|
||||
|
||||
Na Descomplicar, a nossa filosofia é simples: tornar o complexo mais simples."""
|
||||
|
||||
voz = "pt-PT-RaquelNeural"
|
||||
|
||||
# Edge TTS suporta rate como parâmetro na voice string
|
||||
voz_ajustada = f"{voz}:rate=-20%" # 20% mais devagar
|
||||
|
||||
print("🎤 Testando velocidade ajustada (20% mais devagar)...")
|
||||
|
||||
communicate = edge_tts.Communicate(texto, voz_ajustada)
|
||||
await communicate.save("teste_velocidade_raquel.mp3")
|
||||
|
||||
print("✅ Teste com velocidade ajustada: teste_velocidade_raquel.mp3")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(gerar_velocidade_ajustada())
|
||||
Reference in New Issue
Block a user