鱼C论坛

 找回密码
 立即注册
查看: 299|回复: 1

[已解决]波形图 不连续

[复制链接]
发表于 2023-8-16 13:31:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. // ************定义全局变量*************
  2. #define NUM_SAMPLES 1024
  3. HWAVEIN hWaveIn;
  4. WAVEFORMATEX waveform;
  5. short g_samples[NUM_SAMPLES];
  6. //位深=16,每个采样点两个字节
  7. WAVEHDR waveHeader;
  8. int zong = 0;
  9. CWnd* pWnd;  //picture控件句柄
  10. HWND hWnd;
  11. HDC hdc;
  12. HPEN hpen;
  13. HPEN oldhpen;
  14. RECT rect;
  15. HBRUSH hbr;
  16. HBRUSH oldhbr;
  17. HANDLE mutex;//互斥锁句柄
  18. int beisu ;//纵向缩小倍数
  19. int beisu1;//横向放大倍数倍数

  20. int nReturn;
  21. WAVEINCAPS* pwic;
  22. int suoyin = 0;//麦克风ID


  23. // TODO: 在此添加额外的初始化代码

  24.         // 设置音频格式
  25.         waveform.wFormatTag = WAVE_FORMAT_PCM;
  26.         waveform.nChannels = 1;   // 声道数
  27.         waveform.nSamplesPerSec = 44100;   // 采样频率
  28.         waveform.wBitsPerSample = 16;   // 位深
  29.        
  30.         waveform.nBlockAlign = waveform.nChannels * (waveform.wBitsPerSample / 8);
  31.         waveform.nAvgBytesPerSec = waveform.nSamplesPerSec * waveform.nBlockAlign;
  32.         waveform.cbSize = 0;

  33.         //创建并准备缓冲区
  34.         waveHeader.lpData = (LPSTR)g_samples;
  35.         waveHeader.dwBufferLength = NUM_SAMPLES * sizeof(short);
  36.         waveHeader.dwBytesRecorded = 0;
  37.         waveHeader.dwUser = 0;
  38.         waveHeader.dwFlags = 0;
  39.         waveHeader.dwLoops = 0;
  40.         pWnd = GetDlgItem(IDC_SOUND);  //获取picture控件句柄
  41.         hWnd = ::GetDlgItem(GetSafeHwnd(), IDC_SOUND);
  42.         hdc = ::GetDC(hWnd);
  43.         hpen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));//创建画笔
  44.         oldhpen= (HPEN)SelectObject(hdc, hpen);
  45.         ::GetClientRect(hWnd, &rect);//获取picture控件客户区的坐标
  46.         hbr = CreateSolidBrush(RGB(255, 255, 255));
  47.         oldhbr =(HBRUSH)SelectObject(hdc, hbr);
  48.         FillRect(hdc, &rect, hbr);//绘制并填充矩形

  49.         myspin.SetRange32(0, 1000);    //调节的范围
  50.         myspin.SetBase(10); //十进制
  51.         myspin.SetBuddy(GetDlgItem(IDC_EDIT1));    //设置关联的编辑框
  52.         myspin.SetPos(200);//设置当前值
  53.         beisu = 200;
  54.         beisu1 = 6;

  55.         int nReturn = waveInGetNumDevs();//获取系统中存在的波形音频输入设备数
  56.         if (nReturn==0) {
  57.                 AfxMessageBox(_T("请插入麦克风!"));
  58.                 return 0;
  59.         }

  60.         pwic = new WAVEINCAPS[nReturn];
  61.         for (int i = 0; i < nReturn; i++) {
  62.                 MMRESULT mmresult = waveInGetDevCaps(i, (pwic+i), sizeof(WAVEINCAPS)); //获取给定的波形音频输入设备的信息
  63.                 m_cmbRec.AddString(pwic->szPname);
  64.                 //m_cmbRec下拉列表框变量名
  65.         }

  66.         m_cmbRec.SetCurSel(0);
  67.         suoyin= m_cmbRec.GetCurSel();//获取选中项的索引号





复制代码




我的问题:我采集麦克风音频,画出波形图,可是 波形图 不连续  ??


最佳答案
2023-8-16 13:32:16
你的问题可能是由于采集音频数据的方式不正确导致的。在你的代码中,你使用了 waveInGetNumDevs 来获取系统中存在的波形音频输入设备数,并使用 waveInGetDevCaps 获取每个设备的信息。然后,你使用 waveInOpen 打开设备,并使用 waveInPrepareHeader 和 waveInAddBuffer 准备和添加缓冲区。最后,你使用 waveInStart 开始采集音频数据。

然而,在你的代码中,我没有看到你使用 waveInStart 来开始采集音频数据。这可能是导致波形图不连续的原因之一。你需要在准备好缓冲区后,调用 waveInStart 来开始采集音频数据。

另外,你的代码中没有显示你如何处理采集到的音频数据。你需要在采集到音频数据后,对数据进行处理并更新波形图的显示。你可以使用 waveInProc 回调函数来处理采集到的音频数据,并在回调函数中更新波形图的显示。

你可以尝试在适当的位置调用 waveInStart 来开始采集音频数据,并在 waveInProc 回调函数中处理和更新波形图的显示,以解决波形图不连续的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-16 13:32:16 | 显示全部楼层    本楼为最佳答案   
你的问题可能是由于采集音频数据的方式不正确导致的。在你的代码中,你使用了 waveInGetNumDevs 来获取系统中存在的波形音频输入设备数,并使用 waveInGetDevCaps 获取每个设备的信息。然后,你使用 waveInOpen 打开设备,并使用 waveInPrepareHeader 和 waveInAddBuffer 准备和添加缓冲区。最后,你使用 waveInStart 开始采集音频数据。

然而,在你的代码中,我没有看到你使用 waveInStart 来开始采集音频数据。这可能是导致波形图不连续的原因之一。你需要在准备好缓冲区后,调用 waveInStart 来开始采集音频数据。

另外,你的代码中没有显示你如何处理采集到的音频数据。你需要在采集到音频数据后,对数据进行处理并更新波形图的显示。你可以使用 waveInProc 回调函数来处理采集到的音频数据,并在回调函数中更新波形图的显示。

你可以尝试在适当的位置调用 waveInStart 来开始采集音频数据,并在 waveInProc 回调函数中处理和更新波形图的显示,以解决波形图不连续的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 14:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表