【web】vue 播放后端(flask)发送的 mp3 文件

文章目录

    • 演示
    • 后端(flask)
    • 前端(vue3)
    • 重要说明

演示

在这里插入图片描述

后端(flask)

  • 后端返回的是 mp3 文件的 url,是可以直接在浏览器上打开后播放的
  • 处理跨域请求
    pip install flask-cors
    
  • 后端代码
    from flask import Flask, request, jsonify
    from flask_cors import CORS
    
    # 我的 mp3 文件存放路径
    audio_temp_dir = 'garbage_can'
    
    # static_folder 下的文件,可以直接通过 url 访问
    app = Flask(__name__, static_folder=f'./{audio_temp_dir}')
    # 全局跨域
    CORS(app, supports_credentials=True)
    
    
    @app.route("/speech", methods=['POST'])
    def transfer_text_to_speech():
        request_data = request.json
        # 处理 mp3 文件,得到文件名
        file_name = do_something()
        return jsonify({
            """
                request.host_url : 后端 url(app.run() 时,控制台打印的那个 url)
                audio_temp_dir: 音频文件存放的文件夹(自定义的)
                file_name: mp3 文件
            """
            'url': f'{request.host_url}{audio_temp_dir}/{file_name}'
        })
    
    
    if __name__ == '__main__':
        app.run(port=5000)
    
    

前端(vue3)

  • html
    <template>
    	<!-- 演示中使用的是 element-plus 的 button 组件 -->
    	<button type="primary" @click="handleAudio"">播放</button>
    	<audio ref="audioPlayer" controls>
    			<source :src="audioUrl" type="audio/mpeg">
    			Your browser does not support the audio element.
        </audio>
    </template>
    
  • js
    export default {
        name: "你的组件名",
        data() {
            return {
                audioUrl: null
            }
        },
    }
        methods: {
    		handleAudio() {
                axios.post('http://127.0.0.1:5000/speech', {
                    // post 请求参数
                }).then(response => {
                	// 后端返回的数据是 { url : xxxx }
                    this.audioUrl = response.data.url;
                    this.$refs.audioPlayer.src = this.audioUrl;
                    
                    // 直接播放声音
                    this.$refs.audioPlayer.play();
                    // 打印的链接是可以直接在浏览器端播放的
                    console.log(this.audioUrl)
                })
            }
    	}
    

重要说明

  • 我尝试在 vue 中使用 v-model 来绑定 audio 标签的 src(得到响应后设置src),但是这样做无法正常播放音频,原因不明,知道的可以在评论区分享一下
  • 如果通过设置标签的 ref 属性,再通过 this.$refs 设置 audio 标签的 src,就可以成功播放

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/286351.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

骑砍战团MOD开发(30)-游戏大地图map.txt

骑砍1战团mod开发-大地图制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rz4y1c7wH/ 一.骑砍游戏大地图 骑砍RTS视角游戏大地图 大地图静态模型(map.txt) 军团/城镇图标(module_parties.py). 骑砍大地图的战争迷雾和天气通过API进行管理和控制: # Weather-h…

Selenium框架添加CONNECT以抓取https网站

Selenium框架 Selenium是一个用于Web应用程序测试的强大工具&#xff0c;它提供了一系列的API&#xff0c;可以模拟用户在浏览器中的操作&#xff0c;包括点击、填写表单、导航等。在进行网络提取数据时&#xff0c;https网站的数据提取一直是一个技术难点。Selenium作为一个自…

git 如何撤销历史某次merge

git&#xff0c;如何 撤销某一次历史提交或merge&#xff0c;并保留该版本的后续提交&#xff1f; 场景1&#xff1a; 你有两个功能迭代版本的分支&#xff0c;一个是 15 号上线&#xff0c;一个是25号上线。5号的时候产品突然说&#xff0c;这两个版本一起上&#xff0c;然后…

[Flutter]Json和序列化数据

为较小的项目使用手动序列化数据 手动 JSON 解码是指在 dart:convert 中使用内置的 JSON 解码器。它包括将原始 JSON 字符串传递给 jsonDecode() 方法&#xff0c;然后在产生的 Map<String, dynamic> 计算结果中寻找你需要的值。它没有外部依赖或者特定的设置过程&#…

【数据库原理】(1)数据库技术的发展

数据与信息 数据&#xff1a;数据并非只是数字&#xff0c;像文字、符号、图像、影音等都属于数据的范畴。但一般会用数字来表述客观事物的数量、质量、关系等&#xff0c;便于更加直观的看待问题。 语义&#xff1a;数据还需要结合关联的语义解释才能够清晰的描述事物&#…

【CANopen】关于STM32的CanFestival移植

系列文章目录 文章目录 系列文章目录一、准备工作二、源码移植1、新建CubeMX工程2、移植CanFestival源码3、去除源码中的多余项4、源码修改 三、底层驱动适配四、字典工具1、字典的使用 使用STM32F407单片机 一、准备工作 CanFestival下载 二、源码移植 1、新建CubeMX工程 …

gorm.PrepareStmt模式使用不当问题查询

一、背景 xx服务内存持续上涨。内存占用10%以内&#xff0c;在QPS无明显变化的前提下&#xff0c;内存占用50%左右。 dump了一下heap内存&#xff0c;发现主要是 InitUserCacheRefresh 任务代码占用 正常来说&#xff0c;dao层查完数据库之后&#xff0c;对象应该会释放&…

设计模式:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式 1. 为什么需要工厂模式&#xff1f;2. 简单工厂模式2.1. 定义2.2. 代码实现2.3. 优点2.4. 缺点2.5. 适用场景 3. 工厂方法模式3.1. 有了简单工厂模式为什么还需要有工厂方法模式&#xff1f;3.2. 定义3.3. 代码实现3.4. 主要优点3.5.…

Python怎么修改进程名称

目录 一、进程名称的概念 二、Python修改进程名称的方法 三、代码示例与使用说明 四、注意事项 五、适用场景 六、总结 Python是一种强大的编程语言&#xff0c;广泛应用于各种应用程序的开发。在Python中&#xff0c;修改进程名称可以通过多种方式实现。下面我们将深入探…

红队打靶练习:SAR: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 小结 目录探测 1、gobuster 2、dirsearch WEB CMS 1、cms漏洞探索 2、RCE漏洞利用 提权 get user.txt 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface:…

【Linux C | 文件操作】获取文件元数据的几个函数 | stat、fstat、lstat

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

吸烟者问题-第三十一天

目录 问题描述 解决问题 是否需要设置一个专门的互斥信号量&#xff1f; 结论 问题描述 该题属于”生产者-消费者”问题&#xff0c;更详细的说应该是“可生产多种产品的单生产者-多消费者” 解决问题 1、 关系分析&#xff1a;找出题目中描述的各个进程&#xff0c;分析…

(一)输出输入

文章目录 输出printf输出格式控制常见的几种格式输出小数输出很奇特指定位数对齐方式 代码现象 输入scanf输入格式控制输入坑代码现象 %c 格式控制的坑混合类型输入问题 输出printf 输出格式控制 如&#xff1a;%(占位符/格式字符) printf(“a%d”,a); 常见的几种格式输出 …

海外网红营销:母婴品牌提升影响力和市场份额的绝佳途径

随着全球化的加速和社交媒体的普及&#xff0c;越来越多的母婴品牌开始寻求海外市场拓展。在这个过程中&#xff0c;海外网红营销成为了品牌方们青睐的策略之一。本文Nox聚星将和大家探讨母婴品牌如何利用海外网红营销来提升品牌影响力并拓展市场份额。 母婴品牌的核心消费者是…

BIOS:计算机中的特洛伊木马

内容概述&#xff1a; 由于主板制造商在计算机启动时用来显示品牌徽标的图像分析组件相关的问题&#xff0c;多个安全漏洞&#xff08;统称为 LogoFAIL&#xff09;允许攻击者干扰计算机设备的启动过程并安装 bootkit。x86 和 ARM 设备都面临风险。主板固件供应链安全公司 Bin…

02--数据定义语言DDL

1、数据定义语言DDL 1.1 操作数据库-DDL 创建数据库 create database 数据库名称; 创建数据库&#xff0c;并指定字符集 create database 数据库名称 character set 字符集名; 查询所有数据库的名称 show databases; 查询某个数据库的字符集:查询某个数据库的创建语句及字…

【Matlab】ELM极限学习机时序预测算法(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88681649 一&#xff0c;概述 ELM&#xff08;Extreme Learning Machine&#xff09;是一种单层前馈神经网络结构&#xff0c;与传统神经网络不同的是&#xff0c;ELM的隐层神经元权重以及偏置都是随机产生的…

tecplot360 提取某一点随时加变化的参数

tecplot360 提取某一点随时加变化的参数 效果过程录制宏打开所有数据&#xff08;都进来所有的data数据&#xff09; 效果 如下&#xff0c;红点处随时间变化的温度曲线 过程 简单理解就是将所有计算的data帧中固定点的参数取出来 所以先录制宏&#xff0c;然后应用宏自动取…

大模型时代下AIGC新浪潮

大模型时代下AIGC新浪潮 文章目录 大模型时代下AIGC新浪潮1. **相关概念**2. **迎接大模型时代**3. **ChatGPT引爆AIGC产业**4. **从产业链宏观看AIGC**1. **上游&#xff1a;基础层**2. **中游&#xff1a;技术层/模型层**1. **模型层介绍**2. **预训练大模型分类与介绍** 3. …

品优购实战案例

1. 开发工具 VScode 、Photoshop&#xff08;fw&#xff09;、主流浏览器&#xff08;以Chrome浏览器为主&#xff09; 2. 技术栈  利用 HTML5 CSS3 手动布局&#xff0c;可以大量使用 H5 新增标签和样式  采取结构与样式相分离&#xff0c;模块化开发  良好的代码规范有…