Hey guys, how are you?
I’m trying to create a plugin here for personal use, I don’t know how to program and I’m using ChatGPT and the error is as follows.
When I click on the button to generate audio, it returns an empty audio file. Can someone help me please?
<?php
/*
Plugin Name: Text to Audio by ChatGPT
Description: Plugin para transformar texto em áudio usando a API da OpenAI
Version: 0.1
Author: Alex Camargo
*/
// Adiciona uma opção ao menu administrativo
function text_to_audio_menu() {
add_menu_page('Configurações de Text to Audio', 'Text to Audio', 'manage_options', 'text_to_audio_settings', 'text_to_audio_settings_page');
}
add_action('admin_menu', 'text_to_audio_menu');
// Página de configurações no menu administrativo
function text_to_audio_settings_page() {
?>
<div class="wrap">
<h2>Configurações de Text to Audio</h2>
<form method="post" action="options.php">
<?php settings_fields('text_to_audio_settings_group'); ?>
<?php do_settings_sections('text_to_audio_settings_group'); ?>
<table class="form-table">
<tr valign="top">
<th scope="row">Chave da API da OpenAI:</th>
<td><input type="text" name="text_to_audio_api_key" value="<?php echo esc_attr(get_option('text_to_audio_api_key')); ?>" /></td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}
// Adiciona configurações ao WordPress
function text_to_audio_settings() {
register_setting('text_to_audio_settings_group', 'text_to_audio_api_key');
}
add_action('admin_init', 'text_to_audio_settings');
// Adiciona shortcode para a página
function text_to_audio_shortcode() {
ob_start();
?>
<div class="text-to-audio-form">
<form id="text-to-audio-form">
<label for="text-to-audio-text">Texto:</label>
<textarea id="text-to-audio-text" name="text"></textarea>
<label for="text-to-audio-voice">Voz:</label>
<select id="text-to-audio-voice" name="voice">
<option value="alloy">Alloy</option>
<option value="echo">Echo</option>
<option value="fable">Fable</option>
<option value="onyx">Onyx</option>
<option value="nova">Nova</option>
<option value="shimmer">Shimmer</option>
</select>
<label for="text-to-audio-model">Modelo:</label>
<select id="text-to-audio-model" name="model">
<option value="tts-1">TTS-1</option>
<option value="tts-1-hd">TTS-1 HD</option>
</select>
<button id="text-to-audio-generate">Gerar Áudio</button>
<button id="text-to-audio-download" style="display:none;">Download Áudio</button>
</form>
<audio id="text-to-audio-player" controls style="display:none;"></audio>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('text-to-audio-generate').addEventListener('click', function(e) {
e.preventDefault();
var text = document.getElementById('text-to-audio-text').value;
var voice = document.getElementById('text-to-audio-voice').value;
var model = document.getElementById('text-to-audio-model').value;
// Chama a API da OpenAI
var apiKey = '<?php echo esc_js(get_option("text_to_audio_api_key")); ?>'; // Obtém a chave da API do WordPress
jQuery.ajax({
url: 'https://api.openai.com/v1/audio/speech',
type: 'POST',
headers: {
'Authorization': 'Bearer ' + apiKey,
'Content-Type': 'application/json',
},
data: JSON.stringify({
'model': model,
'input': text,
'voice': voice,
}),
success: function(result) {
// Salva o resultado como um arquivo MP3
var audioData = result.audio;
var blob = new Blob([audioData], { type: 'audio/mpeg' });
var url = URL.createObjectURL(blob);
// Atualiza o reprodutor de áudio
var audioPlayer = document.getElementById('text-to-audio-player');
var downloadButton = document.getElementById('text-to-audio-download');
audioPlayer.src = url;
audioPlayer.style.display = 'block';
downloadButton.style.display = 'block';
downloadButton.addEventListener('click', function() {
// Adicione a lógica para permitir o download do áudio aqui
var a = document.createElement('a');
a.href = url;
a.download = 'speech.mp3';
a.click();
});
},
error: function(error) {
console.error('Erro na chamada da API da OpenAI', error);
}
});
});
});
</script>
<?php
return ob_get_clean();
}
add_shortcode('text_to_audio', 'text_to_audio_shortcode');
?>