⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ncwnd_detail.cpp~

📁 用linux开发的安防暴警的有关代码
💻 CPP~
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************************					添加振铃或留提示语 ******************************************************************************************/void AddRingAnswer (void){  if (g_nTimeOut<=0)			//录音长度超过0秒才能添加  {    InformDlg("无法添加!","错误信息");    return;  }  const char *curname = g_AddRingWnd_Ipt->value();		//当前振铃或留言名称  if ( strcmp(curname, LOCAL_TYPE_COMMON)==0 || strcmp(curname, DIAL_TYPE_COMMON)==0 )  {    char t[128];    sprintf(t, "%s 是系统保留名称", curname);    InformDlg (t,"错误信息");    return;  }  Flve_Combo *c;  if (record_operation_id==1)	  c= cbo_local_setup_sound;  else	  c =cbo_auto_dial_sound;	  int max=0;  max = c->item.count();  for (int i=0; i<max; ++i)			//判断是否与现有的名称重名  {    const char *title = c->item[i].item();    if (strcmp(title, curname)==0)    {      InformDlg("所选文件名已经存在!","错误信息");      return;    }  }  char despath[256];  sprintf(despath, "%s/%s", SOUND_FILE_PATH, curname);  char cmd[128];				//拷贝声音到声音文件目录  sprintf(cmd, "mv %s %s", ALERT_TEMP_SOUNDFILE, despath);  system(cmd);  //这里应该判断system的返回值,判断存储空间是否够用  //  c->item.add(curname);  cbo_local_setup_sound->item.add(curname);  cbo_auto_dial_sound->item.add(curname);  g_AddRingWnd->hide();  g_AddRingWnd_Slider->value(0);  g_nTimeOut = 0;//  IsChanged = true;}/******************************************************************************************					添加振铃窗口,按钮消息处理 ******************************************************************************************/void cb_AddRingWnd_Btn (Fl_Button *o, void *p){  int i = (int)p;  switch (i)  {    case 1:		//“录音”按钮    {      if ( !g_bRecording )      {        Record(o);      }    }    break;    case 2:		//“放音”按钮    {      if ( !g_bPlaying && g_nTimeOut!=0 )      {        Play(o);      }    }    break;    case 3:		//“停止”按钮    {      g_bRecording = false;      g_bPlaying = false;      usleep(200000);	//进程阻塞0.2秒      g_AddRingWnd_Btn_Play->activate();      g_AddRingWnd_Btn_Record->activate();      g_AddRingWnd_Btn_Add->activate();      g_AddRingWnd_Btn_Cancel->activate();      g_AddRingWnd_Btn_Record->value(0);      g_AddRingWnd_Btn_Play->value(0);    }    break;    case 4:		//“添加”按钮      AddRingAnswer();    break;    case 5:		//“取消”按钮    {      g_AddRingWnd->hide();      g_AddRingWnd_Slider->value(0);      g_nTimeOut = 0;      unlink(ALERT_TEMP_SOUNDFILE);    }    break;  }}/******************************************************************************************						录音计时器 ******************************************************************************************/void RecordTimer (void *i){  static int p=0;  if (1==(int)i)		//如果用户刚按下录音按钮则直接进入返回等待下一秒的事件  {    p = 0;    g_AddRingWnd_Slider->value(0);    sprintf(g_szTimeBoxTitle, "长度 : %02d / %02d 秒", p, g_nDeftTimeOut);    g_AddRingWnd_Box->redraw();    Fl::repeat_timeout(1.0, RecordTimer);    return;  }  if ( !g_bRecording )	//如果用户按下停止按钮,则返回(在这种情况下,滑杆位置保持不变)  {    g_nTimeOut = p;    goto exit;  }  else if ( (--g_nTimeOut)!=0 )	//如果未到达规定时限,滑杆向前进一格  {    g_AddRingWnd_Slider->value(++p);    sprintf(g_szTimeBoxTitle, "长度 : %02d / %02d 秒", p, g_nDeftTimeOut);    g_AddRingWnd_Box->redraw();    Fl::repeat_timeout(1.0, RecordTimer);    return;  }  else				//达到时限时,滑杆再向前进一格  {    g_AddRingWnd_Slider->value(++p);    sprintf(g_szTimeBoxTitle, "长度 : %02d / %02d 秒", p, g_nDeftTimeOut);    g_AddRingWnd_Box->redraw();    g_nTimeOut = p;  }exit:  g_AddRingWnd_Btn_Record->value(0);  g_AddRingWnd_Btn_Play->activate();  g_AddRingWnd_Btn_Add->activate();  g_AddRingWnd_Btn_Cancel->activate();  g_bRecording = false;}/******************************************************************************************						录音函数 ******************************************************************************************/int Record (Fl_Button *o){  //录音之前要检查声音设备是否可用,还要删除临时文件  remove(ALERT_TEMP_SOUNDFILE);  printf("Before open audio device !\n");  int audio_fd = open(AUDIODEV, O_RDONLY | O_NONBLOCK);		//打开声音设备  if (-1==audio_fd)  {    InformDlg("打开声音设备出错,无法录音!","错误信息");    return -1;  }  printf("After open audio dev !\n");  o->value(1);  g_nTimeOut = g_nDeftTimeOut;  g_AddRingWnd_Btn_Play->deactivate();  g_AddRingWnd_Btn_Add->deactivate();  g_AddRingWnd_Btn_Cancel->deactivate();  g_AddRingWnd_Slider->maximum(g_nDeftTimeOut);  g_bRecording = true;  RecordTimer((void *)1);  pthread_t pid;  pthread_create(&pid, NULL, Record_Thread, (void *)audio_fd);  return 1;}/******************************************************************************************						放音计时器 ******************************************************************************************/void PlayTimer (void *i){  static int p=0;  static int prevTimeout=0;  if (1==(int)i)		//如果用户刚按下录音按钮则直接进入返回等待下一秒的事件  {    p = 0;    prevTimeout = g_nTimeOut;    g_AddRingWnd_Slider->value(0);    sprintf(g_szTimeBoxTitle, "长度 : %02d / %02d 秒", p, g_nDeftTimeOut);    g_AddRingWnd_Box->redraw();    Fl::repeat_timeout(1.0, PlayTimer);    return;  }  if ( !g_bPlaying )	//如果用户按下停止按钮,则返回(在这种情况下,滑杆位置保持不变)  {    g_nTimeOut = prevTimeout;    goto exit;  }  else if ( (--g_nTimeOut)!=0 )	//如果未到达规定时限,滑杆向前进一格  {    g_AddRingWnd_Slider->value(++p);    sprintf(g_szTimeBoxTitle, "长度 : %02d / %02d 秒", p, g_nDeftTimeOut);    g_AddRingWnd_Box->redraw();    Fl::repeat_timeout(1.0, PlayTimer);    return;  }  else				//达到时限时,滑杆再向前进一格  {    g_AddRingWnd_Slider->value(++p);    sprintf(g_szTimeBoxTitle, "长度 : %02d / %02d 秒", p, g_nDeftTimeOut);    g_AddRingWnd_Box->redraw();    g_nTimeOut = prevTimeout;  }exit:  g_AddRingWnd_Btn_Play->value(0);  g_AddRingWnd_Btn_Record->activate();  g_AddRingWnd_Btn_Add->activate();  g_AddRingWnd_Btn_Cancel->activate();  g_bPlaying = false;}/******************************************************************************************						放音函数 ******************************************************************************************/int Play (Fl_Button *o){  int audio_fd = open(AUDIODEV, O_WRONLY);		//打开声音设备  if (-1==audio_fd)  {    fl_alert("打开声音设备出错,无法录音!");    return -1;  }  o->value(1);  g_AddRingWnd_Btn_Record->deactivate();  g_AddRingWnd_Btn_Add->deactivate();  g_AddRingWnd_Btn_Cancel->deactivate();  g_AddRingWnd_Slider->maximum(g_nDeftTimeOut);  g_bPlaying = true;  PlayTimer((void *)1);  pthread_t pid;  pthread_create(&pid, NULL, Play_Thread, (void *)audio_fd);  return 1;}/******************************************************************************************					录音线程函数 ******************************************************************************************/void *Record_Thread (void *p){  int audio_fd = (int)p;  RecordToFile(audio_fd, ALERT_TEMP_SOUNDFILE, &g_bRecording,2);  close(audio_fd);  pthread_exit(NULL);}/******************************************************************************************					放音线程函数 ******************************************************************************************/void *Play_Thread (void *p){  int audio_fd = (int)p;  PlaySound(audio_fd, ALERT_TEMP_SOUNDFILE, &g_bPlaying,2);  close(audio_fd);  pthread_exit(NULL);}/******************************************************************************************					添加振铃窗口消息处理函数 ******************************************************************************************/void cb_ShowAddRingWnd (Fl_Window *o){  if ( g_bPlaying || g_bRecording )  {    return;  }  o->hide();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -