snd音频库在Qt5中的使用
来源:互联网 发布:游客人流量软件 编辑:程序博客网 时间:2024/05/17 00:57
Snd音频库在Qt5中的使用
在工程文件夹(.pro文件同级)下创建3rdParty文件夹,将libsndfile全部拷贝到此文件夹,如图所示
在.pro文件中加入如下代码:
INCLUDEPATH+=$$PWD/3rdParty/libsndfile/include
LIBS += -L$$PWD/3rdParty/libsndfile/lib-llibsndfile-1
其中$$PWD=当前工作目录
加入引用
#include "sndfile.h"
加入宏定义
#define SAMPLE_RATE 44100
#define SAMPLE_COUNT (SAMPLE_RATE *4) /* 4 seconds */
#define AMPLITUDE (1.0 *0x7FFFFFFF)
#define LEFT_FREQ (344.0 /SAMPLE_RATE)
#define RIGHT_FREQ (2 * 344.0 /SAMPLE_RATE)
创建音频文件的函数
void MainWindow::creatWav(){ SNDFILE *file ; SF_INFO sfinfo ; int k ; int *buffer ; if (! (buffer = (int*)malloc (2 * SAMPLE_COUNT * sizeof (int)))) { printf ("Mallocfailed.\n") ; exit (0) ; } ; memset (&sfinfo, 0, sizeof (sfinfo)) ; sfinfo.samplerate = SAMPLE_RATE; sfinfo.frames = SAMPLE_COUNT; sfinfo.channels = 2 ; sfinfo.format =(SF_FORMAT_WAV | SF_FORMAT_PCM_16) ; if (! (file = sf_open ("sine.wav", SFM_WRITE, &sfinfo))) { printf ("Error : Not ableto open output file.\n") ; } ; for (k = 0 ; k < SAMPLE_COUNT ; k++) { buffer [2 * k] = AMPLITUDE *sin (LEFT_FREQ * 2 * k * M_PI) ; buffer [2 * k + 1] = AMPLITUDE * cos (RIGHT_FREQ * 2 * k * M_PI) ; } ; if (sf_write_int (file, buffer, sfinfo.channels * SAMPLE_COUNT) !=sfinfo.channels * SAMPLE_COUNT) puts (sf_strerror (file)) ; sf_close (file) ;}
读取音频文件并写入txt的函数
void MainWindow::readTest(){ ui->setupUi(this); SF_INFO sf_info; SNDFILE *snd_file; double *buf1; sf_info.format = 0; snd_file = sf_open("sine.wav", SFM_READ, &sf_info) ; WriteLog(sf_version_string()); WriteLog("samplerate:"+QString::number(sf_info.samplerate)); WriteLog("open success"); buf1 = (double *)malloc(sf_info.channels*sf_info.frames*sizeof(double)); WriteLog("malloc success"); sf_readf_double(snd_file, buf1, sf_info.frames) ; WriteLog("read success"); QFile file1("left.txt"); QFile file2("right.txt"); file1.open(QIODevice::WriteOnly | QIODevice::Append); file2.open(QIODevice::WriteOnly | QIODevice::Append); WriteLog("file open success"); QTextStream text_stream1(&file1); QTextStream text_stream2(&file2); for(int i=0;i
写日志文件的函数
void MainWindow::WriteLog(QString message){ QFile file("log.txt"); //文件大于10M执行删除 if(file.size()>= 10000000)file.remove(); file.open(QIODevice::WriteOnly | QIODevice::Append); QTextStream text_stream(&file); text_stream << message << "\r\n"; file.flush(); file.close();}
阅读全文
0 0
- snd音频库在Qt5中的使用
- QT5.7在VS2015中的使用(1)
- QT5.7在VS2015中的使用(3)
- qt5.3.2在ros(机器人操作系统)中的使用:qmake与cmake(qt5.4.0不适用)
- 在 QT5 中使用 SQLITE
- qt5.0在vs中的乱码问题。
- 【Qt菜鸟】QTextCodec在Qt5中的改变
- DRA音频标准在CMMB中的应用
- 音频库-bass使用
- Qt5.1静态库使用
- HTML5中的视频音频使用详解
- 使用JS播放HTML5中的音频
- QT5与Qt4,在设置样式表中的差异
- qt5 采集摄像头的视音频
- 在windows8上使用VS2012编译QT5.1.1
- 在Qt5.3.0里编译、配置、使用OpenCV
- 在Qt5.3.0里编译、配置、使用OpenCV
- 在Qt5的QML中使用QZXing识别二维码
- 行为识别-知乎热门圆桌
- WinDbg
- 关于MB1A生产发料后退货
- ==时间复杂度==
- poj-1164 The Castle 城堡 DFS计数
- snd音频库在Qt5中的使用
- HDU-2017 多校训练赛6-1003-Inversion
- 完全自定义RecyclerView下拉刷新上拉加载
- vb.net类型转换函数
- Linux打包以及压缩
- centos7在线安装cloudera manager 5
- GitHub-上传项目到GitHub
- Java基础---学生信息管理系统(借助Array List)
- 关于git提交文件结尾问题的介绍