Laravel Image

In this tutorial, we’ll use the built-in Web Speech API provided by modern web browsers. The Web Speech API allows us to perform text-to-speech without relying on external libraries, making it a lightweight and convenient solution.

Step 1: Install Laravel

Begin by installing a new Laravel project. Open your terminal or command prompt and run the following command to create a new Laravel project:

composer create-project --prefer-dist laravel/laravel text-to-speech-app
cd text-to-speech-app

Step 2: Create a Text-to-Speech View

Next, create a Blade view where users can input text and listen to the speech output. In the resources/views directory, create a new Blade file named text_to_speech.blade.php.

<!-- resources/views/text_to_speech.blade.php -->
<!DOCTYPE html>
<html>
<head>
    <title>Text to Speech</title>
</head>
<body>
    <h1>Text to Speech Conversion</h1>
    <input type="text" id="textInput" placeholder="Enter text to speak">
    <button id="speakButton">Speak</button>

    <script>
        // JavaScript code will be added later
    </script>
</body>
</html>

This view provides a user interface with an input field where users can enter text and a “Speak” button to trigger the text-to-speech conversion.

Step 3: Implement JavaScript for Text-to-Speech

In the same text_to_speech.blade.php file, add JavaScript code to handle text-to-speech functionality using the Web Speech API.

<!-- resources/views/text_to_speech.blade.php -->
<script>
    document.getElementById('speakButton').addEventListener('click', function() {
        const text = document.getElementById('textInput').value;
        const sentences = text.match(/[^\.!\?]+[\.!\?]+/g); // Split text into sentences

        if (sentences && sentences.length > 0) {
            speak(sentences);
        } else {
            alert('Please enter some text to speak.');
        }
    });

    function speak(sentences) {
        if ('speechSynthesis' in window) {
            const speechQueue = [];
            sentences.forEach(function(sentence) {
                const speech = new SpeechSynthesisUtterance();
                speech.text = sentence;
                speechQueue.push(speech);
            });

            playSpeechQueue(speechQueue);
        } else {
            alert('Text-to-speech is not supported in this browser.');
        }
    }

    function playSpeechQueue(queue) {
        if (queue.length > 0) {
            const speech = queue.shift();
            speech.onend = function() {
                playSpeechQueue(queue); // Play the next sentence after the current one ends
            };

            window.speechSynthesis.speak(speech);
        }
    }
</script>

This JavaScript code handles the text-to-speech functionality. When the user clicks the “Speak” button, the entered text will be split into sentences, and each sentence will be synthesized separately using the Web Speech API. The function playSpeechQueue is introduced to handle the sequential playback of each sentence.

Step 4: Add a Route to Access the Text-to-Speech View

In the routes/web.php file, add the following route definition:

// routes/web.php
Route::get('/text-to-speech', function () {
    return view('text_to_speech');
});

This route specifies that when a user accesses the /text-to-speech URL, it will return the text_to_speech.blade.php view we created earlier.

Step 5: Access the Text-to-Speech Page

Start the Laravel development server by running the following command (if you haven’t already):

php artisan serve

Now, visit http://localhost:8000/text-to-speech in your web browser to access the text-to-speech page. You can enter text in the input field and click the “Speak” button to listen to the speech output.

With the additional route defined, users can now access the text-to-speech page directly through the /text-to-speech URL, and Laravel will serve the corresponding view.

Congratulations! You’ve successfully implemented client-side text-to-speech functionality in your Laravel application using the Web Speech API. Users can now enjoy enhanced accessibility by listening to the content in your application. This lightweight and user-friendly feature can greatly improve the overall user experience.

Read More