语音信号处理(声速,回声,音高,界面设计PyQt5)_Python语言

摘要:
DefYuSu(自我):#速度设置f=波。open(r“test.wav”,“rb”)#读取格式信息#(nchannels,sampwidth,framerate,nframes,comptype,compname)params=f。getparams()nchannels,sampwidth,framerate,nframes=params[:4]#读取波形数据str_data=f.r
def YuSu(self):     #语速设置       
        f = wave.open(r"test.wav", "rb")
        # 读取格式信息
        # (nchannels, sampwidth, framerate, nframes, comptype, compname)
        params = f.getparams()
        nchannels, sampwidth, framerate, nframes = params[:4]
        # 读取波形数据
        str_data = f.readframes(nframes)
        f.close()
        # 将波形数据转换为数组
        wave_data = np.fromstring(str_data, dtype=np.short)
        time = np.arange(0, nframes) * (1.0 / framerate)

        # 要通过我们设定的名字来调用这些组件
        # price_box.toPlainText() 是一个内置的可以读取输入框中的值的函数。
        # 通过函数读取到的是一个 string 类型的值,所以我们需要把他转换成 integer 类型并存在一个price 变量中
        # price = int(self.price_box.toPlainText())
        # value() 是读取spinbox 中值的函数
        yusu = self.yusu_doubleSpinBox.value()
        # 语速设置
        wave_data1 = wave_data.astype(np.short)
        f = wave.open(r"test_yusu.wav", "wb")

        # 配置声道数、量化位数和取样频率
        f.setnchannels(1)
        f.setsampwidth(2)
        f.setframerate(yusu * framerate)  #改变采样率
        # 将wav_data转换为二进制数据写入文件
        f.writeframes(wave_data1.tostring())
        f.close()

        chunk = 1024
        f = wave.open(r"test_yusu.wav", "rb")
        p = pyaudio.PyAudio()

        # 打开声音输出流
        stream = p.open(format=p.get_format_from_width(f.getsampwidth()),
                        channels=f.getnchannels(),
                        rate=f.getframerate(),
                        output=True)

        # 写声音输出流进行播放
        while True:
            data = f.readframes(chunk)
            if data == "": break
            stream.write(data)
        stream.close()
        p.terminate()

        f = wave.open(r"test_yusu.wav", "rb")
        # 读取格式信息
        # (nchannels, sampwidth, framerate, nframes, comptype, compname)
        params = f.getparams()
        nchannels, sampwidth, framerate, nframes = params[:4]
        # 读取波形数据
        str_data = f.readframes(nframes)
        f.close()
        # 将波形数据转换为数组
        wave_data = np.fromstring(str_data, dtype=np.short)
        time = np.arange(0, nframes) * (1.0 / framerate)
        self.curve2.setData(time, wave_data)
        self.curve2.attach(self.qwtPlot_2)
        self.qwtPlot_2.replot()    

回声添加,两种方法:叠加法和滤波法

def HuiSheng(self):
        f = wave.open(r"test.wav", "rb")
        # 读取格式信息
        # (nchannels, sampwidth, framerate, nframes, comptype, compname)
        params = f.getparams()
        nchannels, sampwidth, framerate, nframes = params[:4]
        # 读取波形数据
        str_data = f.readframes(nframes)
        f.close()

        # 将波形数据转换为数组
        wave_data = np.fromstring(str_data, dtype=np.short)
        time = np.arange(0, nframes) * (1.0 / framerate)
        huisheng = self.huisheng_spinBox.value()
        # 滤波,一次回声
        b1 = np.array([1])
        b2 = np.zeros([1, 6000])
        b3 = np.array([0.7])
        b = np.append(b1, b2)
        b = np.append(b, b3)
        a = 1
        wave_data = np.append(wave_data, np.zeros([1, nframes]))
        wave_filter = signal.lfilter(b, a, wave_data)

        # 写Wave文件
        # t = np.arange(0,np.max(time)*2,1.0/framerate)

        # 打开WAV文档
        wave_filter = wave_filter.astype(np.short)
        f = wave.open(r"test_huisheng.wav", "wb")

        # 配置声道数、量化位数和取样频率
        f.setnchannels(1)
        f.setsampwidth(2)
        f.setframerate(framerate)
        # 将wav_data转换为二进制数据写入文件
        f.writeframes(wave_filter.tostring())
        f.close()

        # 播放声音
        chunk = 1024
        f = wave.open(r"test_huisheng.wav", "rb")
        p = pyaudio.PyAudio()

        # 打开声音输出流
        stream = p.open(format=p.get_format_from_width(f.getsampwidth()),
                        channels=f.getnchannels(),
                        rate=f.getframerate(),
                        output=True)

        # 写声音输出流进行播放
        while True:
            data = f.readframes(chunk)
            if data == "": break
            stream.write(data)

        stream.close()
        p.terminate()

        f = wave.open(r"test_huisheng.wav", "rb")
        # 读取格式信息
        # (nchannels, sampwidth, framerate, nframes, comptype, compname)
        params = f.getparams()
        nchannels, sampwidth, framerate, nframes = params[:4]
        # 读取波形数据
        str_data = f.readframes(nframes)
        f.close()
        # 将波形数据转换为数组
        wave_data = np.fromstring(str_data, dtype=np.short)
        time = np.arange(0, nframes) * (1.0 / framerate)
        
        self.curve2.setData(time, wave_data)
        self.curve2.attach(self.qwtPlot_2)
        self.qwtPlot_2.replot()

 界面:

语音信号处理(声速,回声,音高,界面设计PyQt5)_Python语言第1张

免责声明:文章转载自《语音信号处理(声速,回声,音高,界面设计PyQt5)_Python语言》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android程序对不同手机屏幕分辨率自适应的总结Manjaro终端美化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORM之单表操作

ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动 ORM是“对象-关系-映射”的简称。 一、单表操作 创建表 1、创建模型 创建名为book的app,在...

Python中的可视化神器:pyecharts

pyecharts是一款将python与echarts结合的强大的数据可视化工具,本文将为你阐述pyecharts的使用细则 前言 我们都知道python上的一款可视化工具matplotlib,而前些阵子做一个Spark项目的时候用到了百度开源的一个可视化JS工具-Echarts,可视化类型非常多,但是得通过导入js库在Java Web项目上运行,平时用P...

Python统计list中各个元素出现的次数

来自:天蝎圣诞结 利用Python字典统计 利用Python的collection包下Counter类统计 利用Python的pandas包下的value_counts类统计 字典统计 a = [1, 2, 3, 1, 1, 2] dict ={} for key ina: dict[key] = dict.get(key, 0) + 1...

高斯分布(Gaussian Distribution)的概率密度函数(probability density function)

高斯分布(Gaussian Distribution)的概率密度函数(probability density function) 对应于numpy中: numpy.random.normal(loc=0.0, scale=1.0, size=None) 参数的意义为: loc:float 此概率分布的均值(对应着整个分布的中心centre) scale...

python中的多线程编程与暂停、播放音频的结合

先给两个原文链接: https://blog.csdn.net/u013755307/article/details/19913655 https://www.cnblogs.com/scolia/p/6132950.html 播放wav音频的原代码: #引入库 importpyaudio importwave importsys #定义数据流块...

python 字符串 转 bit, bitarray 异或加密

Python中异或加密要将str 转为 bitarray, 提示: int类型和纯数字的字符串也可以异或处理, 可能更方便 from bitarray import bitarray def str2bitarray(msg):  # msg 为str   msg_2 = ""  # 转为1010拼接成字符串   for a in msg.encode(...