pyqt之 QAudioFormat()#存储音频信息学习

from math import pi, sin

import struct, sys

from PyQt4.QtCore import QBuffer, QByteArray, QIODevice, Qt

from PyQt4.QtGui import QApplication, QFormLayout, QLineEdit, QHBoxLayout, \

QPushButton, QSlider, QVBoxLayout, QWidget

from PyQt4.QtMultimedia import QAudio, QAudioDeviceInfo, QAudioFormat, QAudioOutput

class Window(QWidget):

def __init__(self, parent = None):

QWidget.__init__(self, parent)

format = QAudioFormat()#存储音频信息

format.setChannels(1)#通道

format.setFrequency(22050)#采样率赫兹

format.setSampleSize(16)#采样大小

format.setCodec("audio/pcm")#设置编解码器的编解码器

format.setByteOrder(QAudioFormat.LittleEndian)

format.setSampleType(QAudioFormat.SignedInt)

self.output = QAudioOutput(format, self)

self.frequency = 440

self.volume = 0

self.buffer = QBuffer()

self.data = QByteArray()

self.deviceLineEdit = QLineEdit()

self.deviceLineEdit.setReadOnly(True)

self.deviceLineEdit.setText(QAudioDeviceInfo.defaultOutputDevice().deviceName())

self.pitchSlider = QSlider(Qt.Horizontal)

self.pitchSlider.setMaximum(100)

self.volumeSlider = QSlider(Qt.Horizontal)

self.volumeSlider.setMaximum(32767)

self.volumeSlider.setPageStep(1024)

self.playButton = QPushButton(self.tr("&Play"))

self.pitchSlider.valueChanged.connect(self.changeFrequency)

self.volumeSlider.valueChanged.connect(self.changeVolume)

self.playButton.clicked.connect(self.play)

formLayout = QFormLayout()

formLayout.addRow(self.tr("Device:"), self.deviceLineEdit)

formLayout.addRow(self.tr("P&itch:"), self.pitchSlider)

formLayout.addRow(self.tr("&Volume:"), self.volumeSlider)

buttonLayout = QVBoxLayout()

buttonLayout.addWidget(self.playButton)

buttonLayout.addStretch()

horizontalLayout = QHBoxLayout(self)

horizontalLayout.addLayout(formLayout)

horizontalLayout.addLayout(buttonLayout)

def changeFrequency(self, value):

self.frequency = 440 + (value * 2)

def play(self):

if self.output.state() == QAudio.ActiveState:

self.output.stop()

if self.buffer.isOpen():

self.buffer.close()

self.createData()

self.buffer.setData(self.data)

self.buffer.open(QIODevice.ReadOnly)

self.buffer.seek(0)

self.output.start(self.buffer)

def changeVolume(self, value):

self.volume = value

def createData(self):

# Create 2 seconds of data with 22050 samples per second, each sample

# being 16 bits (2 bytes).

self.data.clear()

for i in xrange(2 * 22050):

t = i / 22050.0

value = int(self.volume * sin(2 * pi * self.frequency * t))

self.data.append(struct.pack("<h", value))

if __name__ == "__main__":

app = QApplication(sys.argv)

window = Window()

window.show()

sys.exit(app.exec_())

时间: 2024-10-14 23:57:10

pyqt之 QAudioFormat()#存储音频信息学习的相关文章

I2S音频总线学习

IIS音频总线学习(一)数字音频技术 一.声音的基本概念 声音是通过一定介质传播的连续的波. 图1 声波 重要指标: 振幅:音量的大小 周期:重复出现的时间间隔 频率:指信号每秒钟变化的次数 声音按频率分类: 图2 声音的频率(语音信号频率范围:300Hz-3kHz) 声音的传播携带了信息,它是人类传播信息的一种主要媒体. 声音的三种类型: 波形声音:包含了所有声音形式 语音:不仅是波形声音,而且还有丰富的语言内涵(抽象→提取特征→意义理解) 音乐:与语音相比,形式更规范.音乐是符号化的声音.

【大话存储II】学习笔记(15章),文件级集群系统

[大话存储II]学习笔记(15章),块级集群存储系统里面分析的主要是块集群系统,同样文件级存储也可以集群化. 因为NAS系统的前端网络是以太网,速度比较低,导致NAS主要用于一些非关键业务中,比如文件共享.但是一些特殊应用也需要多主机同时访问某个大文件,比如3D渲染集群等.如果我们使用块集群存储系统,则会存在一个问题,需要在应用程序上引入文件锁,而NAS的文件系统一般都自带有文件锁机制,所以还不如把NAS存储系统进行集群化. 在谈怎么样把NAS系统进行集群化之前,我们说说集群文件系统的架构.集群

MySQL的统计信息学习总结

原文:MySQL的统计信息学习总结 统计信息概念 MySQL统计信息是指数据库通过采样.统计出来的表.索引的相关信息,例如,表的记录数.聚集索引page个数.字段的Cardinality.....MySQL在生成执行计划时,需要根据索引的统计信息进行估算,计算出最低代价(或者说是最小开销)的执行计划.MySQL支持有限的索引统计信息,因存储引擎不同而统计信息收集的方式也不同. MySQL官方关于统计信息的概念介绍几乎等同于无,不过对于已经接触过其它类型数据库的同学而言,理解这个概念应该不在话下.

使用Perfstat工具收集Netapp存储诊断信息

概要简介 Perfstat是一个Netapp存储诊断数据命令行收集工具,该工具能够收集Netapp存储的详尽的信息,包括配置信息和性能数据,针对于Netapp存储OS的2种模式分别有两个版本: 存储模式 Perfstat版本 7 mode Perfstat 7 Cluster Mode Perfstat 8 perfstat 7.x用于收集 7 mode Netapp存储的信息,perfstat 8.x主要用于收集Cluster mode Netapp存储信息 注意: 从Netapp Data

iOS开发项目篇—20存储账号信息

iOS开发项目篇—20存储账号信息 一.简单说明 1.不论请求是否成功,都在发送Post请求后,隐藏遮罩. 2.在授权成功后,切换根控制器. (1)说明 切换到控制器有几种情况,要么是切换到新特性,要么是切换到“首页”. 没有必要每次进入程序都需要登录,且每次返回的数据都是一样的,所以只需要把拿到的信息保存到沙盒里就可以了. 判断上次有没有登录成功(把拿到的access_token保存到沙盒中,如果沙盒中有access_token,说明上次登录成功),如果上次登陆成功,那么就判断是否要进入新特性

十一周 存储班长信息的学生类

#include <iostream> using namespace std; class Stu //声明基类 { public: Stu(int n, string nam ); //基类构造函数 void display( ); //成员函数,输出基类数据成员 protected: //(*)访问权限为保护型的数据成员 int num; //学生学号 string name; //学生姓名 }; class StuDetail: public Stu //声明派生类StuDetail

JAVA之IO技术相关Properties类 存储配置文件信息

package ioTest.io3; /* * Properties存储配置文件信息 * 1.文件信息--------------------------- * 2.根据文件信息获取key和value---|流| * 3.将key,value的之对应存储到properties对象中 */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOu

pyqt ColumnView, QFileSystemModel, QSplitter, QTreeView例子学习(由官方例子提供学习)

from PyQt4.QtGui import (QApplication, QColumnView, QFileSystemModel, QSplitter, QTreeView) #注意 """ QColumnView类提供了一个模型/视图列视图的实现,继承QAbstractItemView 提供了一个本地文件系统的数据模型,继承QAbstractItemModel 实现了一个分流器小部件,继承qframe 提供了一个默认的模型/视图树视图的实现,继承QAbstractI

利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能

利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一个接收动态添加div的容器 <div> 功能区域 <br /> <input id="1" type="checkbox" value="新闻" name="11" />新闻 <input id="2" type="checkbox"