2017-05-01 48 views
0

我正尝试通过网页使用IBM Watson Text to Speech API。在网页上,我有一个表格,用户想要阅读的句子或单词以及“SPEAK!”按钮。完成并读取表单输入。我的问题是,当我在控制台中查看以确保一切顺利时,我发现我的音频文件未找到。使用Jade/Pug在网页上输出音频时出现404错误

App.js - 这是连接到api的代码,然后将合成代码发送到“audioFiles/Output.ogg”,在那里可以访问它们。

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(); 
}); 

speech.pug - 这是表单和音频应该执行的地方。

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') 

特定的错误 - 获取http://localhost:3000/audioFiles/output.ogg

预先感谢任何建议!另外让我知道是否有人需要更多关于错误或代码的信息。

编辑 - 这是我的目录结构的简化版本...

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

服务器上是否存在'audioFiles/output.ogg'?如果是,那么您在加载静态内容时遇到了问题。 –

+0

@Mukesh Sharma是的,它确实存在于服务器上。如果我在加载静态内容时遇到问题,我该如何解决这个问题? – ItsMeRileyP

+0

很酷。显示你的目录结构。你必须使用'express.static' –

回答

0

添加下面一行在你app.js

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

然后,http://localhost:3000/audioFiles/output.ogg不应该给404错误。

+0

非常感谢!它确实消除了404错误,并且它正在发送页面上的音频!还有一个问题,这可能会导致你在另一个方向......静态文件可以“即时”或实时更新吗?我在最近的评论/回复中提到,当输入改变时,我的音频文件需要更改。静态文件是否能够像这样改变?对不起,如果这完全改变了我最初问的问题。 – ItsMeRileyP

+0

'static'是模糊的术语。是的,如果底层文件发生变化,网址将提供最新内容。 –

+0

我一直在尝试你给我的代码,它工作得很好,只是一个问题。当我的音频文件发生变化时,该网站不会提供新的音频,它正在服务之前的音频文件。我注意到,只有当我离开网站并回来时它才会发生变化。我需要它在音频文件更改后立即更改。我怎样才能做到这一点?我认为,除了“express.static”方法之外,我还需要其他技术...... – ItsMeRileyP