Python知识:生成声波并显示
scipy.signal.chirp — SciPy v1.8.0 Manual
1 说明
如何自己产生一个声波? 采用signal.chirp产生声波,对声波读、存、参数设定,等声波操作,都依靠一个叫Wav的对象完成。
2 读文件Wave_read Objects
Wave_read Objects对象是由open()返回,Wave_read Objects内部函数是:
Wave_read.
close
()
如果流被wave打开,请关闭它,并使实例不可用。这在对象集合中自动调用。
Wave_read.
getnchannels
()
返回音频通道数(1个用于单声道 mono,2个用于立体声 stereo)。
Wave_read.
getsampwidth
()
返回以字节为单位的样本宽度。
Wave_read.
getframerate
()
返回采样频率。
Wave_read.
getnframes
()
返回音频帧数。
Wave_read.
getcomptype
()
返回压缩类型(“无”是唯一受支持的类型,因wav格式从不压缩)。
Wave_read.
getcompname
()
压缩getcomptype()的人能读格式。通常“不压缩”平行“无”。
Wave_read.
getparams
()
返回一个属性名称的列组:(nchannels, sampwidth, framerate, nframes, comptype, compname)
, equivalent to output of the get*()
methods.
Wave_read.
readframes
(n)
读取第n个帧的声音采样信号,以 bytes 格式读入。
Wave_read.
rewind
()
将文件指针倒回音频流的开头。
以下两种方法是为了与aifc模块兼容而定义的,不做任何有趣的事情。
Wave_read.
getmarkers
()
Returns None
.
Wave_read.
getmark
(id)
Raise an error.
The following two methods define a term “position” which is compatible between them, and is otherwise implementation dependent.
Wave_read.
setpos
(pos)
Set the file pointer to the specified position.
Wave_read.
tell
()
Return current file pointer position
3 存储 Wave_write Objects¶
对于可查找的输出流,wave头将自动更新,以反映实际写入的帧数。对于不可见流,写入第一帧数据时,nframes值必须准确。通过调用setnframes()或setparams(),在调用close()之前写入的帧数,然后使用writeframesraw()写入帧数据,或者通过调用writeframes()写入所有要写入的帧数据,可以获得准确的nframes值。在后一种情况下,writeframes()将计算数据中的帧数,并在写入帧数据之前相应地设置nframes。
Wave_write.
close
()
确保nframes是正确的,如果文件是由wave打开的,关闭该文件。此方法在对象集合中调用。如果输出流不可查找且nframes与实际写入的帧数不匹配,则会引发异常。
Wave_write.
setnchannels
(n)
设置通道
Wave_write.
setsampwidth
(n)
设置采样宽度 n bytes.
Wave_write.
setframerate
(n)
设置帧的速率. 在版本3.2中更改:此方法的非整数输入被四舍五入到最接近的整数。
Wave_write.
setnframes
(n)
将帧数设置为n。如果实际写入的帧数不同,这将在以后更改(如果输出流不可查找,则此更新尝试将引发错误)。
Wave_write.
setcomptype
(type, name)
设置压缩类型和描述。目前,仅支持压缩类型NONE,这意味着不支持压缩。
Wave_write.
setparams
(tuple)
获取属性的元组,元组应该是(nchannels、sampwidth、framerate、nframes、comptype、compname),其值对set*()方法有效。设置所有参数。
Wave_write.
tell
()
返回文件中的当前位置,与Wave_read的免责声明相同。告诉()并挥手阅读。setpos()方法。
Wave_write.
writeframesraw
(data)
编写音频帧,但不更正nframes。在版本3.4中更改:现在接受任何类似对象的字节。
Wave_write.
writeframes
(data)
编写音频帧并确保nframes是正确的。如果输出流不可查找,并且写入数据后写入的帧总数与之前为nframes设置的值不匹配,则会引发错误。
Changed in version 3.4: Any bytes-like object is now accepted.
4 signal.chirp函数
函数说明:
Frequency-swept名叫余弦信号发生器。
在下文中,‘Hz’应解释为“每单位循环数”;此处不要求单位为一秒。重要的区别是旋转单位是周期,而不是弧度。同样,t可以表示空间而不是时间。
函数格式:
scipy.signal.chirp(t, f0, t1, f1, method='linear', phi=0, vertex_zero=True)
参数:
t:array_like
评估波形的时间。
f0:float
在时间t = 0处的频率(例如Hz)。
t1:float
指定f1的时间。
f1:float
在时间t1处的波形频率(例如Hz)。
method:{‘linear’, ‘quadratic’, ‘logarithmic’, ‘hyperbolic’}, 可选参数
频率扫描的种类。如果未给出,则假定为线性。有关更多详细信息,请参见下面的注释。
phi:float, 可选参数
相位偏移,以度为单位。默认值为0。
vertex_zero:bool, 可选参数
仅当方法为‘quadratic’时才使用此参数。它确定抛物线的顶点(即频率的图表)是在t = 0还是在t = t1。
返回值:
y:ndarray
包含在t处以请求的time-varying频率评估的信号的numpy数组。更准确地说,函数返回cos(phase + (pi/180)*phi)
其中相是整数(从0到t的)2*pi*f(t)
。f(t)
在下面定义。
5、Python代码
#!usr/bin/env python
#code=utf-8from tkinter import *
import wave
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
import syssys.setrecursionlimit(1000000)#define the params of wave
channels = 1
sampwidth = 2
framerate = 9600
file_name = 'sweep.wav'
frequency_begin = 1
frequency_end = 100
#define the time of wave
time = 1def Generate_Wav():#generate the time bart = np.arange(0,time,1.0/framerate)#generate the chirp signal from 300 to 3300Hzwave_data = signal.chirp(t, frequency_begin, time, frequency_end, method = 'linear')*1000#cast to the type of shortwave_data = wave_data.astype(np.short)#open a wav documentf = wave.open(file_name,"wb")#set wav paramsf.setnchannels(channels)f.setsampwidth(sampwidth)f.setframerate(framerate)#turn the data to stringf.writeframes(wave_data.tobytes())f.close()def my_button(root,label_text,button_text,button_func):'''''function of creat label and button'''#label detailslabel = Label(root)label['text'] = label_textlabel.pack()#label detailsbutton = Button(root)button['text'] = button_textbutton['command'] = button_funcbutton.pack()def read_wave_data(file_path):#open a wave file, and return a Wave_read objectf = wave.open(file_path,"rb")#read the wave's format infomation,and return a tupleparams = f.getparams()#get the infonchannels, sampwidth, framerate, nframes = params[:4]#Reads and returns nframes of audio, as a string of bytes.str_data = f.readframes(nframes)#close the streamf.close()#turn the wave's data to arraywave_data = np.frombuffer(str_data, dtype = np.short)time = np.arange(0, nframes) * (1.0/framerate)return wave_data, timedef Plot_Wav():wave_data, time = read_wave_data(file_name)plt.plot(time, wave_data)plt.grid(True)plt.show()def main():root = Tk()my_button(root, 'Generate a sweep wav', 'Generate', Generate_Wav)my_button(root, 'Plot the wav', 'Plot', Plot_Wav)root.mainloop()if __name__ == "__main__":main()
Python知识:生成声波并显示相关推荐
- Python 根据生成的txt对多目标跟踪结果画框可视化显示
Python 根据生成的txt对多目标跟踪结果画框可视化显示 2022.1.3更新 输入为视频文件与多目标跟踪结果生成的txt文件(格式与gt一致) 输出为视频文件 draw_mot.py impor ...
- python生成表格并显示在浏览器_Pyodide:在浏览器端实现Python全栈科学计算
现在越来越多的软件都Web化,浏览器化.虽然科学计算是一计算密集型的方向,对性能要求和实时性较高.但是数据计算方面也一直在做着这样的探索和发展. Jypyer notbook项目让科学计算真正实现了W ...
- 大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图?如果你阅读大数据分析文章,则可能已经迷失了FiveThirtyEight的内容.自然,他们的出色可视化使你印象深刻.你想制作自己的出 ...
- python自动生成鸡汤文_python爬虫+pyinstaller制作一个属于自己的心灵鸡汤
效果图如下: 实现方法 用Python爬虫对现有的api进行请求,获取彩虹屁,然后用tkinter模块形成一个可视化的gui,最后用pyinstaller对该py文件打包,这就是最后的彩虹屁生成器. ...
- 用python随机生成数字_如何实现python随机生成数字?
今天小编就生成随机数,整理了多个方式,方便大家在项目时,根据自己的需求,直接拿来套用即可,以下内容相当详细,具体来看看吧~ 说明:python中生成随机数主要用到random模块,方法主要包括:ran ...
- python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题
最近想学习一些python数据分析的内容,就弄了个爬虫爬取了一些数据,并打算用Anaconda一套的工具(pandas, numpy, scipy, matplotlib, jupyter)等进行一些 ...
- python横向柱状图-python画柱状图--不同颜色并显示数值的方法
用python画柱状图容易,但是如何对不同柱子使用不同颜色呢?同时在柱子顶端显示精确数值? 主要用的方法为: atplotlib.pyplot.bar(left, height, width=0.8, ...
- python etree创建xml_利用 Python ElementTree 生成 xml的实例
Python 处理 xml 文档的方法有很多,除了经典的 sax 和 dom 之外,还有一个 ElementTree. 首先 import 之: from xml.etree import Eleme ...
- 我的Python脚本——生成任意波形并存为txt
我的Python脚本--生成任意波形并存为txt 一. 脚本功能 根据采样点数,采样周期数等参数以及波形的数学表达式,生成任意波形 将波形数据转为指定位宽的二进制补码,然后存为txt 绘制原始波形和转 ...
最新文章
- 去掉chrome记住密码后自动填充表单的黄色背景
- python线程池模块_Python并发编程之线程池/进程池--concurrent.futures模块
- CreateThread创建线程函数详细讲解
- 按住 ctrl 并滚动鼠标滚轮才可缩放地图_ZBrush自定义缩放快捷键
- 回归分析中自变量共线性_具有大特征空间的回归分析中的变量选择
- 引用 病毒是怎么命名的?教你认识病毒命名规则
- Android系统(204)---ContentProvider
- SPOJ QTree【树链剖分】
- java 测试 jar_java – 从可执行jar运行spring测试
- 【Python】pip超详细教程,pip的安装与使用,解决pip下载速度慢的问题
- 深入浅出MFC:动态创建控件
- iOS客户端安装包大小优化
- Java具体可以做什么?
- 【分享】超级菜鸟另类玩swf反汇编
- python 的魔法函数
- 八爪鱼怎样导入mysql_网页数据如何导出到数据库 - 八爪鱼采集器
- c语言 socket send,C语言中send()函数和sendto()函数的使用方法
- Python3飞机大战全代码(亲测OJBK)
- 【LeetCode】417. Pacific Atlantic Water Flow 太平洋大西洋水流问题
- 阿里妈妈展示广告粗排:面向链路一致性优化的端到端序学习模型
热门文章
- 禁忌搜索算法求解带时间窗的车辆路径问题原理讲解
- 里面使用轮播_小程序ColorUI框架初步使用教程及个人项目实战
- xshell无法连接linux虚拟机问题的解决办法
- Python编程基础:第四节 类型转换Type Cast
- Tomcat performance optimization through consolidated log file handlers
- HBase 数据库检索性能优化策略--转
- Where to Store your JWTs – Cookies vs HTML5 Web Storage--转
- weblogic 异常常见处理方法
- 评分卡上线后如何进行评分卡的监测
- 技术有时间衰减因子.