python:如何播放 .spx 声音文件

.spx 是 Speex音频编解码器的文件扩展名,它是一种开源的、免费的音频编解码器,主要用于语音压缩和语音通信领域。spx 文件通常用于语音记录、VoIP应用、语音信箱等场景。

.mp3 是一种广泛使用的音频格式,它采用了有损压缩算法,可以在保持较高音质的同时减小文件大小。mp3文件可以在各种设备和平台上播放,包括计算机、移动设备、音频播放器等。

FFmpeg 可以将.spx文件转码成.wav文件,基于 pyaudio 和 wave 实现播放.wav 声音文件。

where ffmpeg
D:\FFmpeg\64\ffmpeg.exe
#-- 转换.spx 到 .wav:
ffmpeg -i input.spx -acodec pcm_s16le output.wav
#-- 转换.wav 到 .mp3:
ffmpeg -i input.wav -f mp3  output.mp3

pip install pyaudio
pip install wave

编写 play_spx.py  如下

# -*- coding: utf-8 -*-
""" 播放 *.spx 音频文件 """
import os
import sys
import time
from tkinter import filedialog
import pyaudio
import wave# main()
f1 = ''
if len(sys.argv) ==1:filetypes = [('spx file','.spx'),('ogg file','.ogg')]f1 = filedialog.askopenfilename(initialdir='D:/Music', filetypes=filetypes)
elif len(sys.argv) ==2:f1 = sys.argv[1]
else:print('usage: python play_spx.py file1.spx')sys.exit(1)if not os.path.exists(f1):print(f"{f1} is not exists.")sys.exit(2)fn,ext = os.path.splitext(f1)
if ext.lower() not in ('.spx','.ogg'):print('ext is not (.spx , .ogg )')sys.exit(2)f2 = fn +'.wav'
if not os.path.exists(f2):os.system(r"D:\FFmpeg\64\ffmpeg.exe -i %s -acodec pcm_s16le %s" % (f1,f2))
else:print(f"{f2} is exists")# 初始化 PyAudio
p = pyaudio.PyAudio()def play_wav(filename):# 打开 WAV 文件wf = wave.open(filename, 'rb')# 打开音频流stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=wf.getnchannels(),rate=wf.getframerate(), output=True)chunk = 1024data = wf.readframes(chunk)while data :stream.write(data)data = wf.readframes(chunk)stream.stop_stream()stream.close()wf.close()print(f2)
#time.sleep(1)
time1 = time.time()
# 播放音频
play_wav(f2)
time2 = time.time()
print("run time: %.3f s" % (time2-time1))

运行 python play_spx.py 

参阅:pyaudio:基于pyaudio和pydub 实现一个简易音乐播放器播放wav、mp3等格式音乐


安装 pip install pygame
pygame 能播放*.mid , *.mp3 , *.wav ,编写 play_mid.py  如下:

# -*- coding: utf-8 -*-
import os
import sys
import time
from tkinter import filedialog
import traceback
import pygame
from pygame import mixerdef mixer_init():freq = 44100bitsize = -16channels = 2buffer = 2048mixer.init(freq, bitsize, channels, buffer)# optional volume 0 to 1.0mixer.music.set_volume(0.9)def play_mid(file):if mixer.music.get_busy():mixer.music.fadeout(1000)mixer.music.stop()clock = pygame.time.Clock()try:mixer.music.load(file)except:print(traceback.format_exc())mixer.music.play()while mixer.music.get_busy():clock.tick(30)# main()
f1 = ''
if len(sys.argv) ==1:filetypes = [('mid file','.mid'),('mp3 file','.mp3'),('wav file','.wav')]f1 = filedialog.askopenfilename(initialdir='D:/Music', filetypes=filetypes)
elif len(sys.argv) ==2:f1 = sys.argv[1]
else:print('usage: python play_mid.py file1.mid')print('usage: python play_mid.py file1.mp3')print('usage: python play_mid.py file1.wav')sys.exit(1)if not os.path.exists(f1):print(f"{f1} is not exists.")sys.exit(2)fn,ext = os.path.splitext(f1)
if ext.lower() not in ('.mid','.mp3','.wav'):print('.ext is not (.mid , .mp3','.wav')sys.exit(2)time1 = time.time()
print(f1)
mixer_init()
try:play_mid(f1)
except KeyboardInterrupt as ex:# if user hits Ctrl+C then exit# (works only in console mode)mixer.music.fadeout(1000)mixer.music.stop()raise SystemExit from ex
mixer.music.stop()
time2 = time.time()
print("run time: %.3f s" % (time2-time1))

运行 python play_mid.py output.wav

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的…

Vue3学习笔记-事件-4

一、事件处理 使用v-on或者后面加事件&#xff1a; <template><button v-on:click"addCount()">{{count}}</button> </template> 二、事件传参 传event&#xff1a; 不传参时&#xff0c;默认自动接收 event 传自定义参数时&#xff0c…

Node.js下载安装及环境配置

目录 一、下载 1. 查看电脑版本&#xff0c;下载对应的安装包 2. 下载路径下载 | Node.js 中文网 二、安装步骤 1. 双击安装包 2. 点击Next下一步 3. 选择安装路径 4. 这里我选择默认配置&#xff0c;继续Next下一步&#xff08;大家按需选择&#xff09; 5. 最后inst…

k8s二进制集群之ETCD集群证书生成

安装cfssl工具配置CA证书请求文件创建CA证书创建CA证书策略配置etcd证书请求文件生成etcd证书 继续上一篇文章《负载均衡器高可用部署》下面介绍一下etcd证书生成配置。其中涉及到的ip地址和证书基本信息请替换成你自己的信息。 安装cfssl工具 下载cfssl安装包 https://github…

使用python实现与本地ollama部署的deepseek对话

专栏总目录 按照ollama官方doc的example操作&#xff0c;没有成功与本地ollama上的deepseek-r1:1.5b通讯后&#xff0c;发现vscode可以调用本地ollama上的deepseek模型。 为了实现与ollama上的deepseek模型通讯&#xff0c;我使用wireshark对本地回环地址进行侦听后&#xff0c…

【大模型理论篇】最近大火的DeepSeek-R1初探系列1

1. 背景介绍 这一整个春节&#xff0c;被DeepSeek-R1刷屏。各种铺天盖地的新闻以及老板发的相关信息&#xff0c;着实感受到DeepSeek-R1在国外出圈的震撼。 DeepSeek推出了新的推理模型&#xff1a;DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个在没有经过监督微调…

C++哈希表深度解析:从原理到实现,全面掌握高效键值对存储

目录 一、核心组件与原理 1. 哈希函数&#xff08;Hash Function&#xff09; 2. 冲突解决&#xff08;Collision Resolution&#xff09; 3. 负载因子&#xff08;Load Factor&#xff09;与扩容 二、C实现&#xff1a;std::unordered_map 1. 模板参数 2. 关键操作与复…

Pandoc, Zotero, JabRef 管理论文引用,生成参考文献 | 撰写论文 paper

书接上回&#xff0c;使用 Obsidian, Zotero, JabRef, Pandoc, Markup-Markdown | 撰写论文 paper 管理论文引用&#xff0c;生成参考文献 TL; DR导出 bibliography 文件JabRefZotero 参考文献引用语法reference-docLinks TL; DR 安装 pandoc v3.6.2. 使用一下命令&#xff0c…

为AI聊天工具添加一个知识系统 之85 详细设计之26 批流一体式 与数据提取器

Q843、批流一体式 统一数据处理框架 "批流一体式统一数据处理框架" 这一概念通常指的是一种将批处理&#xff08;Batch Processing&#xff09;和流处理&#xff08;Stream Processing&#xff09;结合在一起的数据处理架构。它的目标是提供一个统一的框架&#xff…

深入理解 `box-sizing: border-box;`:CSS 布局的利器

深入理解 box-sizing: border-box;&#xff1a;CSS 布局的利器 默认行为示例代码 使用 box-sizing: border-box;示例代码 全局应用 box-sizing: border-box;示例代码 实际应用场景1. 表单布局2. 网格布局 总结 在 CSS 中&#xff0c;box-sizing 属性决定了元素的总宽度和高度是…

CSDN原力值提升秘籍:解锁社区活跃新姿势

在 CSDN 这个技术交流的大舞台上&#xff0c;原力值不仅是个人活跃度的象征&#xff0c;更是开启更多权益与福利的钥匙。最近&#xff0c;我出于自身需求&#xff0c;一头扎进了提升原力值的研究中&#xff0c;经过多方探索与资料整理&#xff0c;现在就迫不及待地把这些干货分…

计算机网络——流量控制

流量控制的基本方法是确保发送方不会以超过接收方处理能力的速度发送数据包。 通常的做法是接收方会向发送方提供某种反馈&#xff0c;如&#xff1a; &#xff08;1&#xff09;停止&等待 在任何时候只有一个数据包在传输&#xff0c;发送方发送一个数据包&#xff0c;…

2024美团春招硬件开发笔试真题及答案解析

目录 一、选择题 1、在 Linux,有一个名为 file 的文件,内容如下所示: 2、在 Linux 中,关于虚拟内存相关的说法正确的是() 3、AT89S52单片机中,在外部中断响应的期间,中断请求标志位查询占用了()。 4、下列关于8051单片机的结构与功能,说法不正确的是()? 5、…

【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)

目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1. 修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例…

Kafka分区策略实现

引言 Kafka 的分区策略决定了生产者发送的消息会被分配到哪个分区中&#xff0c;合理的分区策略有助于实现负载均衡、提高消息处理效率以及满足特定的业务需求。 轮询策略&#xff08;默认&#xff09; 轮询策略是 Kafka 默认的分区策略&#xff08;当消息没有指定键时&…

c++ stl 遍历算法和查找算法

概述&#xff1a; 算法主要由头文件<algorithm> <functional> <numeric> 提供 <algorithm> 是所有 STL 头文件中最大的一个&#xff0c;提供了超过 90 个支持各种各样算法的函数&#xff0c;包括排序、合并、搜索、去重、分解、遍历、数值交换、拷贝和…

2.2 实现双向链表的快速排序

实现一个双向链表的快速排序。 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h>…

力扣动态规划-19【算法学习day.113】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&#xff01;&#xff01;&#xff01; 习题 1.矩形中移动的最大次数 题目链接…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中&#xff0c;向 addConstr 这个方法中传入一个 TempConstr 对象&#xff0c;在模型中就会根据这个对象生成一个约束。更重要的是&#xff1a;TempConstr 对象可以传给所有addConstr系列方法&#xff0c;所以下面先介绍 TempConstr 对象 TempConstr TempC…

五子棋对弈

问题描述 "在五子棋的对弈中&#xff0c;友谊的小船说翻就翻&#xff1f;" 不&#xff01;对小蓝和小桥来说&#xff0c;五子棋不仅是棋盘上的较量&#xff0c;更是心与心之间的沟通。这两位挚友秉承着"友谊第一&#xff0c;比赛第二"的宗旨&#xff0c;决…