Exemple #1
0
void Widget::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu menu;
    menu.addAction(tr("删除"),this, SLOT(DelateMusic()));
    menu.addAction(tr("清空列表"), this, SLOT(ClearPlayList()));
    menu.exec(event->globalPos());
}
Exemple #2
0
/*----------------------------------------------------------------------------------------
函数名: PlayChange
参数:
		code:传入需要判断的码值
返回值:
		1/0:连续出现50次-1时返回一次0/其余返回0
描述:
		分析code值所处的作用(音量调节、录音、普通播音),并按照分类分别执行
----------------------------------------------------------------------------------------*/
int8_t PlayChange(int32_t dwCode)
{
	static int32_t dwValidCode;
	static uint8_t cntErr = 0;	    		
	if ((dwCode!=-1 && (dwCode != dwValidCode || cntErr > 5))){
		LOG(("dwCode:%d",dwCode));
		g_bHaveCamAction = 1;
		dwValidCode = dwCode;
		ClearPlayList();
		if(IsAboutMusic(dwCode));
		else if(IsChangeRole(dwCode));
		else if(IsVolumeCtrl(dwCode));
//		else if(HaveRecord(dwCode));
		else	PlayBegin(dwCode);
		cntErr = 0;
	}
	else if(dwCode == -1){
		cntErr++;
	}else if(dwCode == dwValidCode){
		cntErr = 0;
	}
	if(cntErr >= 50){
		cntErr = 0;
		return 0;
	}
	return 1;
}
Exemple #3
0
/*----------------------------------------------------------------------------------------
函数名: DPWMPlayUninit
参数:
		None
返回值:
		None
描述:
		停止PDMA操作,关闭DPWM设备
----------------------------------------------------------------------------------------*/
static void DPWMPlayUninit(void)
{
	DrvPDMA_EnableCH(eDRVPDMA_CHANNEL_2, eDRVPDMA_DISABLE);
	while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_2));
	DrvDPWM_DisablePDMA();  
	DrvDPWM_Close();
}
///*----------------------------------------------------------------------------------------
//函数名: ClearPlayList
//参数:
//		dwPlayCurAddr:音频开始地址
//		dwAudioEndAddr:音频结束的地址
//返回值:
//		None
//描述:
//		初始化一下播音参数,解码数据填满环形缓冲区,开启PDMA和DPWM播音
//----------------------------------------------------------------------------------------*/
void ClearPlayList(void)
{
	g_cntPlayAudio = g_nCurPlayAudio = 0;
	g_bNoInterruptedAudio = 0;
}
///*----------------------------------------------------------------------------------------
//函数名: StopPlayAudio
//参数:
//		None
//返回值:
//		None
//描述:
//		停止播音并关闭设备,从中采用让音量逐渐变小的方式避免"啪"的声音
//----------------------------------------------------------------------------------------*/
void StopPlayAudio(void)
{
	uint8_t i,nVolumeIndexBak = 0;
	nVolumeIndexBak = g_nVolumeIndex;
	for( i=0; i < CYCLEBUFFER_SIZE/320; i++){
		g_nVolumeIndex -= 1;
		if( (g_dwLastWritedPosition + SIREN7FRAME) > ((uint32_t)g_waCycBuffer + CYCLEBUFFER_SIZE * 2) )
			g_dwLastWritedPosition = (uint32_t)g_waCycBuffer;
		PlayVolumeCtrl((int16_t *)g_dwLastWritedPosition,SIREN7FRAME);
		g_dwLastWritedPosition += SIREN7FRAME;
	}
	g_nVolumeIndex = nVolumeIndexBak;
	g_bStopPlay = 1;
	DPWMPlayUninit();
}
///*----------------------------------------------------------------------------------------
//函数名: PlayResume
//参数:
//		dwPlayCurAddr:音频开始地址
//		dwAudioEndAddr:音频结束的地址
//返回值:
//		None
//描述:
//		初始化一下播音参数,解码数据填满环形缓冲区,开启PDMA和DPWM播音
//----------------------------------------------------------------------------------------*/
void PlayResume(void)
{
	if(g_bStopPlay){
		g_bStopPlay = 0;
		memset(g_waCycBuffer, 0xFF, sizeof(g_waCycBuffer));
		PDMAStart();
		PlayWork(0, 0, 0);
	}
}
///*----------------------------------------------------------------------------------------
//函数名: AddToPlayList
//参数:
//		dwPlayCurAddr:音频开始地址
//		dwAudioEndAddr:音频结束的地址
//返回值:
//		None
//描述:
//		初始化一下播音参数,解码数据填满环形缓冲区,开启PDMA和DPWM播音
//----------------------------------------------------------------------------------------*/
void AddToPlayList(uint32_t dwFirstCode)
{
	if(g_cntPlayAudio != PLAY_LIST_MAX_CNT)
		g_dwaPlayList[g_cntPlayAudio++] = (uint16_t)dwFirstCode;
	else
		LOG(("link Audio exceed "));
}
///*----------------------------------------------------------------------------------------
//函数名: PlayList
//参数:
//		dwPlayCurAddr:音频开始地址
//		dwAudioEndAddr:音频结束的地址
//返回值:
//		None
//描述:
//		初始化一下播音参数,解码数据填满环形缓冲区,开启PDMA和DPWM播音
//----------------------------------------------------------------------------------------*/
void PlayList(void)
{	
	if((!g_bNoInterruptedAudio || g_bStopPlay) && (g_nCurPlayAudio != g_cntPlayAudio)){
		PlayBegin((uint32_t)g_dwaPlayList[g_nCurPlayAudio++]);
		g_bNoInterruptedAudio = 1;
	}else if(g_nCurPlayAudio == g_cntPlayAudio){
		ClearPlayList();
	}
}
Exemple #4
0
void ProcessHead(void)
{
	#define HEAD_AUDIO_NUM  3
	static uint8_t nHeadAudioIndex = 0;
	
	if(!g_bStopPlay){
		ClearPlayList();
		StopPlayAudio();
	}else{
		PlayBegin(PEN_HEAD_AUDIO1 + nHeadAudioIndex);
		if((++nHeadAudioIndex) >= HEAD_AUDIO_NUM){
			nHeadAudioIndex = 0;
		}
	}
}
Exemple #5
0
/*----------------------------------------------------------------------------------------
函数名: PlayService
参数:
		None
返回值:
		None
描述:
		播音服务的主循环,负责按键检测,数据解码并填充缓冲区,电量检测等等
----------------------------------------------------------------------------------------*/
void PlayService(void)
{
	KEYMSG msg;

	LedFlashForCam(LED_ON);
	while(g_nState == PLAY_STATE)
	{		
		if(KEY_MsgGet(&msg)){
//			LOG(("KEY:Value:%d,TYPE:%d,HOLDTIME:%d\r\n",msg.Key_MsgValue,msg.Key_MsgType,msg.Key_HoldTime));
			g_bHaveKeyAction = 1;
			if(msg.Key_MsgValue == KEY_ON_OFF){
				if(msg.Key_MsgType == KEY_TYPE_SP){
					if(!g_bStopPlay)
						StopPlayAudio();
					else
						PlayResume();
				}else if(msg.Key_MsgType == KEY_TYPE_LP){	
					g_nState = PWRDOWN_STATE;
				}
			}else if(msg.Key_MsgValue == KEY_RECORD){
				if(msg.Key_MsgType == KEY_TYPE_LP){
					g_nState = RECORD_STATE;		
				}else if(msg.Key_MsgType == KEY_TYPE_SP){
					PlayRecord();
				}
			}else if(msg.Key_MsgValue == KEY_MACESR){
				if(msg.Key_MsgType == KEY_TYPE_LP){
					g_nState = MVREC_STATE;
				}else if(msg.Key_MsgType == KEY_TYPE_SP){
					g_nState = ESR_STATE;
				}
			}else if(msg.Key_MsgValue == KEY_TOUCH){
				if(msg.Key_MsgType == KEY_TYPE_SP){
					ProcessHead();
				}
			}
		}
		PlayWork(0,0,0);
		PlayList();
		if(!PlayChange(GetCamCode())){
//			cam_init(eDRVPDMA_CHANNEL_3);	//笔头初始化参数
		}
		CommonCheck();
	}
	ClearPlayList();
	StopPlayAudio();
	LedFlashForCam(LED_OFF);
}