【问题标题】:Speech synthesis model creates audio but html page returns previous audio语音合成模型创建音频但 html 页面返回以前的音频
【发布时间】:2021-06-10 16:16:03
【问题描述】:

我有一个经过训练的语音合成模型。它每次从 html 页面中的 textarea 正确创建音频并将其保存为静态文件夹。但有时当我从文件夹返回音频时,它会带来较旧的音频。它不会每次都发生,但我找不到解决方案。

html音频代码

{% if my_audio %}
    <audio controls>
        <source src="{{ url_for('static', filename='a.wav') }}" type="audio/wav"/>
    </audio>                
{% endif %}

烧瓶代码(如果需要)

from flask import Flask, render_template, request
import inference

app = Flask(__name__)
app.static_folder = 'static'

@app.route("/")
def home():
    return render_template("index.html")

@app.route("/sentez", methods = ["POST"])
def sentez():
    if request.method == "POST":
        metin = request.form["metin"]
        created_audio = inference.create_model(metin)
    return render_template("index.html", my_audio = created_audio)

if __name__ == "__main__":
    app.run();

【问题讨论】:

    标签: python html flask audio static


    【解决方案1】:

    此问题是由于浏览器在首次运行后从其缓存而不是静态文件夹中获取文件所致。您需要向音频文件的 URL(或查询字符串)附加一个唯一的参数,以便它从静态文件夹中获取新副本。我建议附加经过的毫秒数,getTime() 方法在 JavaScript 中执行此操作。

    更改源的 JavaScript 等价物如下:

    function playAudio() {
       var audioFile = new Audio('./a.wav');
       //URL is ./a.wav
       audioFile.play()
    }
    

    改成

    function playAudio() {
       var audioFile = new Audio('./a.wav?' + new Date().getTime()); 
       //URL becomes something like ./a.wav?1623483193060
       audioFile.play()
    }
    

    您可以了解如何在 Flask 中执行相同的操作来修改语句

    {{ url_for('static', filename='a.wav') }}
    

    【讨论】:

    • 我会试试这个。谢谢。
    • @kaganince1 解决了您的问题吗?您可能想在 ? 之后添加 t=以便 URL 查询字符串成为正确的键值对。 ?t=1623483193060
    • 我每次都用随机数创建不同的文件名。这解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多