通过 Python Flask 网络服务器播放保存在本地驱动器中的音频文件

用户11860063

当我导航到本地磁盘并选择音频 .wav(或任何其他音频类型)文件并点击提交时,我没有得到音频输出。

我正在考虑编写一个“if 语句”,它告诉我的程序何时将所选文件分配给变量“文件名”,然后使用分配的文件/链接重新加载程序。

我对这样的 if 语句做了一些尝试,但由于缺乏编码技能而失败。

PS 我提到了“if 语句”解决方法,因为我认为这是我问题的解决方案,否则我意识到我可能是 200% 错误的。

如果可以,请你帮助我。谢谢。

我的代码:

from __future__ import print_function
from gnuradio import analog
from gnuradio import audio
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser


class TopBlock22(gr.top_block): 


    def getfile(self, filename):

        gr.top_block.__init__(self, "Top Block 22")

        print('[TopBlock22] getfile: filename:', filename)

        filename = filename.encode('utf-8') 

        self.blocks_file_source_0 = blocks.file_source(gr.sizeof_float*1, filename, True)
        self.audio_sink = audio.sink(32000, '', True)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_file_source_0, 0), (self.audio_sink, 0))


# -----------------------------------------------------------------------------

from flask import Flask, flash, request, redirect, jsonify, render_template_string


app = Flask(__name__)


tb = TopBlock22()
tb.start()


@app.route("/")
def index():
    args_filename = request.args.get('filename', '')


    return render_template_string('''<!DOCTYPE html>
<html>


<body>

<!-- Previous filename: {{ filename }} -->
<form action="getfile" method="POST" enctype="multipart/form-data">
    Project file path: <input type="file" name="file"><br>
    <input type="submit" value="Submit">
</form>



</body>
</html>''', filename=args_filename)


@app.route('/getfile', methods=['GET','POST'])
def getfile():


    result = request.files.get('file')
    print('[/getfile] result:', result.filename)

    if result:

        result.save(result.filename) 

        tb.getfile(result.filename)



    return redirect('/')



if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

回溯输出(无错误:

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 138-727-058
127.0.0.1 - - [23/Aug/2019 13:36:47] "GET / HTTP/1.1" 200 -
[/getfile] result: song.wav
[TopBlock22] getfile: filename: song.wav
gr::log :INFO: audio source - Audio sink arch: alsa
127.0.0.1 - - [23/Aug/2019 13:36:52] "POST /getfile HTTP/1.1" 302 -
127.0.0.1 - - [23/Aug/2019 13:36:52] "GET / HTTP/1.1" 200 -
简单

所有示例都没有使用 Flask 来更容易地测试问题。


若要从文件中听到声音我必须跑getfile()start()

from __future__ import print_function
from gnuradio import gr
from gnuradio import audio
from gnuradio import blocks


class TopBlock22(gr.top_block): 

    #def __init__(self):
    #    gr.top_block.__init__(self, "Top Block 22")

    def getfile(self, filename):
        print('[TopBlock22] getfile: filename:', filename)

        filename = filename.encode('utf-8') 

        self.blocks_file_source_0 = blocks.file_source(gr.sizeof_float*1, filename, True)
        self.audio_sink = audio.sink(32000, '', True)

        self.connect((self.blocks_file_source_0, 0), (self.audio_sink, 0))

# -----------------------------------------------------------------------------

tb = TopBlock22()

tb.getfile('song.wav')
tb.start()

tb.wait()

使用getfile()start(),听到的声音它必须stop()start()它一次。

from __future__ import print_function
from gnuradio import gr
from gnuradio import audio
from gnuradio import blocks


class TopBlock22(gr.top_block): 

    #def __init__(self):
    #    gr.top_block.__init__(self, "Top Block 22")

    def getfile(self, filename):
        print('[TopBlock22] getfile: filename:', filename)

        filename = filename.encode('utf-8') 

        self.blocks_file_source_0 = blocks.file_source(gr.sizeof_float*1, filename, True)
        self.audio_sink = audio.sink(32000, '', True)

        self.connect((self.blocks_file_source_0, 0), (self.audio_sink, 0))

        self.stop()
        self.start()

# -----------------------------------------------------------------------------

tb = TopBlock22()

tb.start()

tb.getfile('song.wav')

tb.wait()

或者它必须使用lock()unlock()

from __future__ import print_function
from gnuradio import gr
from gnuradio import audio
from gnuradio import blocks


class TopBlock22(gr.top_block): 

    #def __init__(self):
    #    gr.top_block.__init__(self, "Top Block 22")

    def getfile(self, filename):
        print('[TopBlock22] getfile: filename:', filename)

        filename = filename.encode('utf-8') 

        self.blocks_file_source_0 = blocks.file_source(gr.sizeof_float*1, filename, True)
        self.audio_sink = audio.sink(32000, '', True)

        self.lock()
        self.connect((self.blocks_file_source_0, 0), (self.audio_sink, 0))
        self.unlock()

# -----------------------------------------------------------------------------

tb = TopBlock22()

tb.start()

tb.getfile('song.wav')

tb.wait()

但这不会在您加载新文件时断开先前的声音。它必须记住是否加载了其他文件并用于disconnect()停止以前的声音。

from __future__ import print_function
from gnuradio import gr
from gnuradio import audio
from gnuradio import blocks


class TopBlock22(gr.top_block): 

    def __init__(self):
        gr.top_block.__init__(self, "Top Block 22")

        # at star file is not loaded and not connected
        self.file_source_connected = False

    def getfile(self, filename):
        print('[TopBlock22] getfile: filename:', filename)

        filename = filename.encode('utf-8') 

        ##################################################
        # Connections
        ##################################################

        self.lock()

        # disconnect previous file
        if self.file_source_connected:
            self.disconnect((self.blocks_file_source_0, 0), (self.audio_sink, 0))

        # use new file
        self.blocks_file_source_0 = blocks.file_source(gr.sizeof_float*1, filename, True)
        self.audio_sink = audio.sink(32000, '', True)

        self.connect((self.blocks_file_source_0, 0), (self.audio_sink, 0))

        self.unlock()

        # remember that file is connected
        self.file_source_connected = True


# -----------------------------------------------------------------------------
import time

tb = TopBlock22()
tb.start()

tb.getfile('song.wav') # use one file 
time.sleep(3)
tb.getfile('another_song.wav') # use another file later

tb.wait()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过链接在网络服务器上执行python脚本

在网络服务器上运行的Flask应用可调用远程服务器python模块

通过Flask-Python服务React生产应用程序(本地服务器)

通过Python Flask服务器提供服务时,Vue应用无法加载

通过HTTPS服务Flask服务器

如何在flask网络服务器上检索数据作为文件对象?

通过代理IP连接到Flask本地服务器

拒绝通过 URL 从网络服务器直接下载文件

如何识别在Python Flask中通过AJAX发出的请求?

通过查询获取数据库服务器在网络服务器中的位置

在python中通过TCP服务器网络发送对象

Django + Gunicorn + Nginx + Python -> 从网络服务器下载文件的链接

将文件作为 JSON 上传到 Python 网络服务器

在python中通过本地服务器进行通信

通过flask在服务器中上传和保存文件出错

使用git在Python网络服务器中自动递增版本号

通过 Docker 容器和 Nginx 网络服务器在 Laravel 中获取用户的 IP 地址

通过Apollo Client发送文件并在Graphene Flask服务器中接收

有没有办法使用flask-python通过api从服务器发送一个zip文件?

okhttp-urlconnection测试使模拟网络服务器崩溃,但仍通过

通过 Flask 将音频文件从 mp3 转换为 flac,并保存在 Google Cloud Storage

使用CLI通过HTTPS运行Flask开发服务器

通过python禁用Google驱动器文件的下载选项

用 python 启动 Flask 服务器

从 Flask 服务器运行 python 脚本

使用Flask将通过POST请求接收的数据打印到本地服务器

在Flask服务中调用本地python文件

从基于Flask的Python服务器下载文件

如何通过 url (Glide) 从服务器的音频文件中获取专辑封面