1. Go to this page and download the library: Download nosun/edge-tts library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Nosun\EdgeTts\Facades\EdgeTts;
// Basic text-to-speech
$result = EdgeTts::synthesize('Hello, World!');
// Get audio data
$audioData = $result->audioData;
// Save to file
$path = EdgeTts::synthesizeToFile('Hello, World!', '/path/to/output.mp3');
// Save to Laravel Storage
$storagePath = EdgeTts::synthesizeToStorage('Hello, World!', 'greeting.mp3');
use Nosun\EdgeTts\Facades\EdgeTts;
// With custom voice and parameters
$result = EdgeTts::synthesize('你好世界!', [
'voice' => 'zh-CN-XiaoxiaoNeural', // Chinese female voice
'rate' => '+20%', // Slightly faster
'pitch' => '+10Hz', // Higher pitch
'volume' => '+50%', // Louder
]);
// Save with custom options
EdgeTts::synthesizeToFile(
'Welcome to Laravel!',
'/path/to/output.mp3',
[
'voice' => 'en-US-GuyNeural',
'rate' => '-10%',
]
);
use Nosun\EdgeTts\Facades\EdgeTts;
// Stream audio in real-time with metadata
$stream = EdgeTts::stream('This is a long text that will be streamed...', [
'boundary' => 'WordBoundary', // or 'SentenceBoundary'
]);
foreach ($stream as $chunk) {
if ($chunk['type'] === 'audio') {
// Process audio chunk
file_put_contents('output.mp3', $chunk['data'], FILE_APPEND);
} elseif ($chunk['type'] === 'WordBoundary' || $chunk['type'] === 'SentenceBoundary') {
// Process metadata for subtitle generation
echo "Text: {$chunk['text']}\n";
echo "Offset: {$chunk['offset']} ticks\n";
echo "Duration: {$chunk['duration']} ticks\n";
}
}
use Nosun\EdgeTts\Facades\EdgeTts;
// Get all available voices
$voices = EdgeTts::voices();
foreach ($voices as $voice) {
echo $voice->shortName . ' - ' . $voice->localeName . PHP_EOL;
}
// Filter voices by locale
$chineseVoices = EdgeTts::voicesByLocale('zh-CN');
// Filter voices by gender
$femaleVoices = EdgeTts::voicesByGender('Female');
// Get a specific voice
$voice = EdgeTts::getVoice('en-US-JennyNeural');
// Check if voice exists
if (EdgeTts::voiceExists('zh-CN-YunxiNeural')) {
// Voice is available
}
// Get all available locales
$locales = EdgeTts::getLocales();
use Nosun\EdgeTts\EdgeTts;
class TtsController extends Controller
{
public function synthesize(EdgeTts $edgeTts, Request $request)
{
$result = $edgeTts->synthesize($request->input('text'));
return response($result->audioData)
->header('Content-Type', 'audio/mpeg');
}
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Nosun\EdgeTts\Facades\EdgeTts;
class TtsController extends Controller
{
public function synthesize(Request $request)
{
$request->validate([
'text' => ' }
$filename = 'tts_' . uniqid() . '.mp3';
$path = EdgeTts::synthesizeToStorage($request->text, $filename, $options);
return response()->json([
'success' => true,
'path' => $path,
'url' => Storage::url($path),
]);
}
public function download(Request $request)
{
$request->validate([
'text' => '
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Nosun\EdgeTts\Facades\EdgeTts;
class ProcessTextToSpeech implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(
public string $text,
public string $filename,
public array $options = []
) {}
public function handle(): void
{
EdgeTts::synthesizeToStorage(
$this->text,
$this->filename,
$this->options
);
}
}