Tronquer un texte en partie de 300 caractères.

Tout en conservant les mots.

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour :)

J'ai crée avec ma raspberry pi et une petite enceinte un petit projet node.js il y a quelques jours me permettant d'envoyer un message via un interface web à celui-ci (rsp) et qu'il prononce ce message avec une voix artificielle. J'ai crée plusieurs petites fonctions sympa: réveil, musique, news… J'ai voulu rajouter une petite fonction permettant de faire raconter des creepypastas (des histoires qui font peurs).

J'utilise une api pour générer la voix artificielle, acapela-boxe. Je n'ai pas trouvé un autre moyen de générer une voix artificiellement étant gratuit, malheureusement l'api google translate ne l'ai plus il y a quelques mois. Cette api limite l'entrée texte à 300 caractères, ce qui est dérangeant puisqu'une histoire fait plus de 300 caractères. J'ai donc pensé à tronquer le texte à cette limite, le problème, c'est que je voudrais qu'il ne soit pas tronquer au milieu d'une phrase ou d'un mot. Je ne sais pas du tout comment je pourrais procéder, je vous affiche le code de ma fonction, son but est de transformer un texte en mp3 (m'voyez ce que je veux dire).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function get_mp3(lang, voice, text, destination){
    var max_lenght = 300;

    if(text.length >= max_lenght)
    {
        console.log('You are not allowed to process text tire more than 300 characters !');
        text = text.substring(0, max_lenght);
    }

    request.post({url:'http://www.acapela-group.com/demo-tts/DemoHTML5Form_V2.php', form: {
        MyLanguages:lang,
        MySelectedVoice:voice,
        MyTextForTTS: text,
        t:"1",
        SendToVaaS:""
    }}, 
    function(err, httpResponse, body){
        var patt = /\'(http:\/\/(?:\w|\.|\/|-)+\.mp3)\'/;
        var res = body.match(patt);
        var url = res[1];
        console.log(url);

        request(url, {encoding: 'binary'}, function(err2, httpResponse2, body2) {
            if(!err2 && httpResponse2.statusCode == 200) 
            {
                fs.writeFile(destination, body2, 'binary', function(err3) {
                    if(err3)
                      console.log(err3);
                    else
                      console.log("The file was saved!");
                      say(destination);
                }); 
            }
        }); 
    });
}

Seb.

+0 -0

Cette réponse a aidé l'auteur du sujet

Tu peux commencer par récupérer les phrases (split selon les points ?). Puis tu pars d'une chaine vide x et parcours ton tableau, dont tu ajoutes les éléments (les phrases) en fin de chaine. Quand tu vas dépasser 300 (longueur de chaine + longueur élément courant > 300), tu donnes ta chaine à acapela-boxe et la vides, puis poursuis le parcours de ton tableau.

+3 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte