2017-05-01 3 views
0

Ich versuche, die IBM Watson Text to Speech API über eine Webseite zu verwenden. Auf der Webseite habe ich ein Formular, das den Satz oder das Wort, den der Benutzer gelesen haben möchte, und einen Button "SPEAK!" das schließt und liest die Formulareingabe. Mein Problem ist, dass wenn ich in die Konsole schaue, um sicherzustellen, dass alles reibungslos läuft, sehe ich, dass meine Audiodatei nicht gefunden wird.404 Fehler bei der Verwendung von Jade/Pug zur Ausgabe von Audio auf einer Webseite

App.js - das ist der Code, der an die API anschließt und dann den synthetisierten Code an "audioFiles/Output.ogg" sendet, wo sie aufgerufen werden können.

var input; 
app.get("/speech", function(req, res, next) { 
input = req.query.speech; 
const TextToSpeechV1 = require('watson-developer-cloud/text-to-speech/v1'); 
const fs = require('file-system'); 
if(input) { 
    var intentValNumber = input.length; 
} 
console.log(intentValNumber); 
if (intentValNumber > 0) { 
    const text_to_speech = new TextToSpeechV1({ 
     url: "URL is here", 
     username: 'UserName is here', 
     password: 'PassWord is here', 
     version_date: TextToSpeechV1.VERSION_DATE_2017_04_26 
    }); 
    var params = { 
     text: input, 
     voice: 'en-US_MichaelVoice', 
     accept: 'audio/ogg' 
    }; 
    console.log(input); 
    // Pipe the synthesized text to a file. 
    text_to_speech.synthesize(params).on('error', function(error) { 
    console.log('Error:', error); 
    }).pipe(fs.createWriteStream('audioFiles/output.ogg')); 
}; 
next(); 
}); 

rede.pug - hier sollten das Formular und das Audio ausgeführt werden.

extends layout 

block content 
.main.container.row 
    .col-md-6.col-md-offset-3 
    h1.display-4.m-b-2 Magic Reading! 
    form(method="GET" action="/speech") 
     div.form-group 
     label(for='speech') Type something to be spoken: 
     input#speech.form-control(type='text', placeholder='Type something to be read' name='speech') 
     button.btn.btn-primary(type='submit') SPEAK! 
     audio(controls='', autoplay='') 
     source(src='../audioFiles/output.ogg', type='audio/ogg') 

Spezifische Fehler - GET http://localhost:3000/audioFiles/output.ogg

Vielen Dank im Voraus für jede Beratung! Lassen Sie mich auch wissen, wenn jemand mehr Informationen über den Fehler oder den Code benötigt.

EDIT - das ist eine vereinfachte Version meiner Verzeichnisstruktur ist ...

Project 
    | 
    +-- audioFiles(folder) 
    | | 
    | + - output.ogg 
    | + - music.mp3 
    | 
    +-- public(folder) 
    |  | 
    |  + - images(folder) 
    |  + - stylesheets(folder) 
    |  
    +-- routes(folder) 
    | | 
    | +-- index.js 
    |  
    +-- views(folder) 
    | | 
    | +-- speech.pug 
    |  
    + -- app.js 
+0

Sind 'audioFiles/output.ogg' auf dem Server vorhanden? Wenn ja, haben Sie Probleme beim Laden des statischen Inhalts. –

+0

@Mukesh Sharma Ja, es existiert auf dem Server. Wenn ich ein Problem beim Laden statischer Inhalte habe, wie würde ich das beheben? – ItsMeRileyP

+0

cool. Zeigen Sie Ihre Verzeichnisstruktur an. Sie müssen 'express.static' verwenden. –

Antwort

0

die folgende Zeile hinzufügen in Ihrem app.js

app.use("/audioFiles", express.static(path.join(__dirname, "audioFiles")))

Dann sollte http://localhost:3000/audioFiles/output.ogg nicht 404 geben Error.

+0

Vielen Dank! Es wird den 404-Fehler los und es gibt das Audio auf der Seite aus! Nur noch eine Frage und das könnte Sie komplett in die andere Richtung führen ... Können statische Dateien "on the fly" oder in Echtzeit aktualisiert werden? Ich erwähnte irgendwo in meinem letzten Kommentar/Antwort, dass meine Audiodatei geändert werden musste, wenn sich die Eingabe änderte. Hätten statische Dateien die Fähigkeit, sich so zu verändern? Entschuldigung, wenn dies die Frage, die ich ursprünglich gestellt habe, komplett ändert. – ItsMeRileyP

+0

'statisch' ist ein vager Begriff. Ja, wenn sich die zugrunde liegenden Dateien ändern, wird URL den neuesten Inhalt liefern. –

+0

Ich habe versucht, den Code, den Sie mir gegeben haben, und es funktioniert gut, nur ein Problem. Wenn sich meine Audiodatei ändert, wird die neue Audiodatei nicht von der Website bereitgestellt, sondern es wird die vorherige Audiodatei bereitgestellt. Ich merke, dass es sich nur ändert, wenn ich die Seite verlasse und zurückkomme. Ich muss es ändern, sobald sich die Audiodatei ändert. Wie kann ich das machen? Ein Teil von mir glaubt, dass ich eine andere Technik als den "express.static" -Ansatz brauche ... – ItsMeRileyP

Verwandte Themen