20 QT里的声卡编程
来源:互联网 发布:ubuntu lrzsz 编辑:程序博客网 时间:2024/06/10 12:03
声音三要素: 采样率, 量化精度, 声道 通常我们用一位二进制表示两种状态, 如1表示高电平, 0表示低电平。在音频领域里,如只用一位二进制表示声音,那么只能表示发声和不发声两种状态(蜂鸣器)。如果使用过音频分析软件会发现,声音是由连续的不规则的波形来表示, 根本不可能用一位二进制数据表示一个人发出的声音。但可以用多位二进制的数据来表示(音频里通常是用8位或者16位). 如用8位数据表示 0 -- 20KHz: 0xff可表示20KHz, 0xfe表示19.92KHz, 0xfc表示19.84KHz .... 把声音经过测量转换成多位的二进制数据就是在计算机系统里存储的原始声音数据(也叫pcm数据), 数据的位数就是量化精度。通常是8位/16位 采样率就是声音转换成二进制数据的频率,常用的采样率有: 8000, 11025, 22050, 44100, 48000 从声音的还原角度来说采样率越高,质量就越好。 声音就是表示声音源的通道。嵌入式系统里通常是单声道/双声道. CD唱片通常是发烧友所用的,片中没有图像。而一张蝶片有650M左右,为什么只有十多首歌曲? 算一算: 高保真肯定是用最高的采样率48000, 量化精度16位(2字节), 立体声2声道. 一首歌通常200秒 48000 * 2 * 2 * 200 = 38400000字节, 大概38M一首歌曲
////////////////////////
在QT里用QAudioDeviceInfo类获取声卡设备的信息。 QAudioInput类操作声卡的录音 QAudioOutput类操作声卡的放音 QAudioFormat类对象用于配置声卡所用的声音三要素。
一. 录音操作
1. 配置声音三要素 QAudioFormat format; format.setSampleRate(48000); //采样率 format.setChannelCount(2); //声道 format.setSampleSize(16); //量化精度 format.setCodec("audio/pcm"); // 目前只支持pcm数据 2. 创建QAudioInput对象, 并传递要配置的声音参数 QAudioInput *ainput = new QAudioInput(format); //这里是使用默认的录音设备,也可以使用另一重载的构造函数指定使用的录音设备。 3. 让录音设备开始录音. QIODevice *dev = ainput->start(); // 调用start函数后, 返回QIODevice对象的地址。我们就通过此对象接收录音设备的数据。 //当录音设备数据准备好时,dev指向的对象会发出readyRead信号,只需要连接此信号的槽函数里调用read函数接收即可 connect(dev, SIGNAL(readyRead()), this, SLOT(slot_read())); void Widget::slot_read() { QIODevice *dev = qobject_cast<QIODevice *>(sender()); QByteArray ba; ba = dev->readAll(); //可以把ba里的数据存放到一个文件里,如"/test.raw". 完毕后, 可用"aplay /test.raw -f S16_LE -r 48000 -c 2"来测试 }
二. 放音(过程与录音差不多)
1. 配置声音三要素 QAudioFormat format; format.setSampleRate(48000); //采样率 format.setChannelCount(2); //声道 format.setSampleSize(16); //量化精度 format.setCodec("audio/pcm"); // 目前只支持pcm数据 2. 创建QAudioOutput对象, 并传递要配置的声音参数 QAudioOutput *aoutput = new QAudioOutput(format); //这里是使用默认的音频设备,也可以使用另一重载的构造函数指定使用的音频设备。 3. 让音频设备开始放音. QIODevice *dev = aoutput->start(); // 调用start函数后, 返回QIODevice对象的地址。我们就通过此对象的write函数把声音数据交给声卡发声。
阅读全文
0 0
- 20 QT里的声卡编程
- 17 QT里的uart编程
- 18 QT里的摄像头编程
- Qt里的moc
- Qt里的OpenGL
- Qt里的.ui
- VS2008中的声卡编程
- linux下声卡编程
- Qt里的智能指针
- Qt里的原子操作
- QT的qsemaphore编程
- QT的wince编程
- Qt的UDP编程
- Qt的串口编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- TensorFlow3:构建卷积神经的MNIST
- MATLAB数组元素引用的三种方法
- 腾讯centos云服务器编码问题
- MySQL 半同步复制数据安全与一致性分析
- Sass中的mixins混合使用
- 20 QT里的声卡编程
- Java 观察者模式
- android 启动优化(一)
- NYoj 96 n-1位数
- 第八天 如何用RandomAccessFile操作进行文件copy?
- Android开发规范
- linux简单单个变量的无锁计算
- java序列化
- Android开发知识点图