`
bcyy
  • 浏览: 1823874 次
文章分类
社区版块
存档分类
最新评论

【Project】情绪评定

 
阅读更多

前两天帮心理系的写的一个小程序,灰常灰常简单。

大致内容是通过一些情绪学习之后,评定之后声音的情绪反应。软件的需求也比较简单:

  1. 给定三种类型的masker音频,乱序之后播放给被试;
  2. 被试听到声音之后,根据情绪感受,对情绪效价和情绪唤起打分;
  3. 打分之后自动播放下一个声音;
  4. 最后统计三种类型的平均分;
大致效果如下:

界面用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


(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu未经允许请勿用于商业用途)



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics