前两天帮心理系的写的一个小程序,灰常灰常简单。
大致内容是通过一些情绪学习之后,评定之后声音的情绪反应。软件的需求也比较简单:
- 给定三种类型的masker音频,乱序之后播放给被试;
- 被试听到声音之后,根据情绪感受,对情绪效价和情绪唤起打分;
- 打分之后自动播放下一个声音;
- 最后统计三种类型的平均分;
大致效果如下:
界面用QT写的,声音播放用的QT Phonon自带的
//创建媒体对象
media_object = new Phonon::MediaObject(this);
Phonon::AudioOutput *audio_output = new Phonon::AudioOutput(Phonon::MusicCategory, this);
Phonon::createPath(media_object, audio_output);//绑定源和接收器
一个定时刷新界面的函数:可以实现自动播放下一个声音
timer =new QTimer(this);
connect( timer, SIGNAL(timeout()), this, SLOT(NextSource()) );
timer->start(1000); //每20毫秒刷新一次界面
刷新时判断用户操作:
void SAM::NextSource(){
if(selected_a==1&&selected_b==1){
selected_a=0;
selected_b=0;
//some ui codes here
played_counter++;
if(played_counter>=sources.size()){
QMessageBox msgBox;
msgBox.setText(QString::fromLocal8Bit("测试结束\n谢谢您的参与!"));
msgBox.setStyleSheet("font: 48pt \"幼圆\";background-color: rgb(0,0,0));color: rgb(255, 255, 255);");
msgBox.exec();
qApp->quit();
std::ofstream fout("out.txt");
fout<<"Log:"<<std::endl;
fout<<"masker\ta\tb"<<std::endl;
float masker1_suma=0,masker1_sumb=0;
float masker2_suma=0,masker2_sumb=0;
float masker3_suma=0,masker3_sumb=0;
int masker1_counter=0,masker2_counter=0,masker3_counter=0;
for(int i=0;i<sources.size();i++){
fout<<source_maskers[i]<<"\t"<<source_a[i]<<"\t"<<source_b[i]<<std::endl;
if(source_maskers[i]==1){
masker1_suma+=source_a[i];
masker1_sumb+=source_b[i];
++masker1_counter;
}else if(source_maskers[i]==2){
masker2_suma+=source_a[i];
masker2_sumb+=source_b[i];
++masker2_counter;
}else if(source_maskers[i]==3){
masker3_suma+=source_a[i];
masker3_sumb+=source_b[i];
++masker3_counter;
}
}
fout<<"\nAverage:"<<std::endl;
fout<<"masker\ta\tb"<<std::endl;
masker1_suma=(float)masker1_suma/masker1_counter;
masker1_sumb=(float)masker1_sumb/masker1_counter;
masker2_suma=(float)masker2_suma/masker2_counter;
masker2_sumb=(float)masker2_sumb/masker2_counter;
masker3_suma=(float)masker3_suma/masker3_counter;
masker3_sumb=(float)masker3_sumb/masker3_counter;
fout<<"1\t"<<masker1_suma<<"\t"<<masker1_sumb<<std::endl;
fout<<"2\t"<<masker2_suma<<"\t"<<masker2_sumb<<std::endl;
fout<<"3\t"<<masker3_suma<<"\t"<<masker3_sumb<<std::endl;
}
else{
int played_index=source_orders[played_counter];
media_object->setCurrentSource(sources.at(played_index));
media_object->play();
}
}
}
还有一个乱序的函数:
void SAM::RandVector()
{
int source_size=sources.size();
for(int i=0;i<source_size;i++){
bool if_order=false;
while(!if_order){
int tmp_order=rand()%source_size;
if(source_orders[tmp_order]==-1){
source_orders[tmp_order]=i;
if_order=true;
}
}
}
for(int i=0;i<source_size;i++){
int source_index=source_orders[i];
Phonon::MediaSource current_source=sources[source_index];
const std::string source_name=current_source.fileName().toStdString();
if(source_name.find("masker1")<source_name.size()){
source_maskers.push_back(1);
}else if(source_name.find("masker2")<source_name.size()){
source_maskers.push_back(2);
}else if(source_name.find("masker3")<source_name.size()){
source_maskers.push_back(3);
}
}
}
工程:http://download.csdn.net/detail/xiaowei_cqu/5370789
代码:http://www.pudn.com/downloads542/sourcecode/multimedia/audio/detail2241547.html
分享到:
相关推荐
project验证码project验证码project验证码project验证码
Eclipse Web Project转Dynamic Project教程
project project project project
Project Pro+Project Server操作说明
Sync Project with gradle files:对gradle文件之后,或刷新gradle配置时使用; Make project:只是对项目中新产生或修改过的文件进行一次编译,已经编译过了的就不会编译了,耗时相对较短; Clean Project :删除...
Steelray Project Viewer
project 2003 教程;让你快速掌握project20003 project 2003序列号,sn绝对可用(记事本); project 2007 序列号,sn可用(word文档);经过本人亲测,各位放心下载!
project2003转换器,高版本转换
project
web deployment project web deployment project web deployment project web deployment project web deployment project
project 2016是旗下的一款项目管理软件,作为office套餐中的一员,这款软件可以帮你简化项目、资源和项目组合管理。集成的规划工具有助于跟踪项目并保持井井有条。project2016拥有熟悉的自动日程安排工具,可以帮助...
Project2003-2007转换器
这是本人制作的一个ms project 2007的模板,用不同颜色的字体区分出摘要任务、关键路径和里程碑。当你用此模板编制计划时,会自动根据任务的不同而使用不同颜色的字体
project 案例合集,学习project入门必备,快速了解应用project!
PROJECT教程PROJECT教程PROJECT教程PROJECT教程PROJECT教程PROJECT教程
Project项目管理 42个案例
icrosoft Project (或MSP)是由微软公开发售项目管理软件的。软件设计的最终目的是协同帮助项目经理发现计划、为各种项目分配合适的资源、跟踪进度、管理项目的预算和分析工作量。第一版微软Project是微软Project ...
Project_Default.xml1
pintos project1的几部优先级抢占等等