在 Flask 中发送声音可以通过多种方式实现,下面将详细介绍两种常见的方法:使用 HTML5 audio 标签和通过 FlaskAudio 扩展。
1. 使用 HTML5 audio 标签
HTML5 提供了 audio 标签,可以用于在网页中嵌入音频文件,在 Flask 应用中,可以将音频文件作为静态资源提供,并通过 HTML5 audio 标签进行播放,下面是一个简单的示例:
创建一个 Flask 应用并设置静态文件夹:
from flask import Flask, render_template app = Flask(__name__, static_folder='static')
在 templates
文件夹下创建一个 HTML 模板文件(index.html
),并添加以下内容:
<!DOCTYPE html> <html> <head> <title>Flask 发送声音</title> </head> <body> <h1>Flask 发送声音示例</h1> <audio controls> <source src="{{ url_for('static', filename='sound.mp3') }}" type="audio/mpeg"> 您的浏览器不支持 audio 元素。 </audio> </body> </html>
在上面的代码中,我们使用了 Jinja2 模板引擎提供的 url_for()
函数来构建音频文件的 URL。{{ url_for('static', filename='sound.mp3') }}
会生成一个指向 static
文件夹下的 sound.mp3
文件的 URL。
接下来,在 Flask 应用中使用 render_template()
函数渲染模板并显示在浏览器中:
@app.route('/') def index(): return render_template('index.html')
现在,运行 Flask 应用,并在浏览器中访问根路径(http://localhost:5000/
),你将看到一个带有音频播放器的页面,点击播放器上的播放按钮,即可播放音频文件。
2. 使用 FlaskAudio 扩展
FlaskAudio 是一个用于处理音频文件的 Flask 扩展,它提供了一些方便的功能,如文件上传、下载和播放等,下面是使用 FlaskAudio 扩展发送声音的示例:
安装 FlaskAudio 扩展:
pip install flaskaudio
在 Flask 应用中导入扩展并初始化:
from flask import Flask, render_template, request, send_from_directory from flask_audio import Audio, AudioList, AudioUploader, AudioStreaming, AudioDownloader, AudioDeleter from werkzeug.utils import secure_filename import os app = Flask(__name__) app.config['UPLOAD_FOLDER'] = 'uploads' # 设置上传音频文件的存储路径 app.config['ALLOWED_EXTENSIONS'] = {'mp3', 'wav'} # 允许上传的文件类型列表 audio = Audio(app) # 创建 Audio 对象实例化扩展功能 audio_list = AudioList(app) # 创建 AudioList 对象实例化扩展功能列表视图功能 audio_uploader = AudioUploader(app) # 创建 AudioUploader 对象实例化扩展功能上传功能 audio_streaming = AudioStreaming(app) # 创建 AudioStreaming 对象实例化扩展功能流式传输功能 audio_downloader = AudioDownloader(app) # 创建 AudioDownloader 对象实例化扩展功能下载功能 audio_deleter = AudioDeleter(app) # 创建 AudioDeleter 对象实例化扩展功能删除功能
接下来,定义路由和相应的处理函数:
@app.route('/upload', methods=['GET', 'POST']) def upload(): if request.method == 'POST': file = request.files['file'] # 获取上传的文件对象 if file and file.filename.endswith(('.mp3', '.wav')): filename = secure_filename(file.filename) # 确保文件名安全并避免重复命名冲突 file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) # 保存文件到指定路径 return redirect(url_for('index')) # 重定向到主页显示已上传的音频文件列表页面 return render_template('upload.html') # 如果请求方法是GET,则渲染上传页面模板并返回给用户填写表单信息和上传文件的操作界面。
在上述代码中,我们使用 request.files
获取上传的文件对象,并检查其扩展名是否为允许的文件类型之一(这里只允许 .mp3
和 .wav
),如果文件存在且符合要求,则将其保存到指定的上传文件夹中,并重定向到主页以显示已上传的音频文件列表页面,否则,返回上传页面模板供用户填写表单信息和上传文件。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/478728.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复