• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 声音输入的奇怪问题!?

声音输入的奇怪问题!?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了电脑声音输入有问题,电脑没声音是什么问题,电脑没声音驱动没问题,问题是时代的声音,win10声音问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 声音输入的奇怪问题!?
描述:

源程序如下:从麦克风读入声音,如果声音够大就退出,显示读入的声音。
#include <stdio.h>
#include <windows.h>
#include <windowsx.h>
#include <string.h>
#include <mmsystem.h>
void main()
{
short a=2,b=3;
WAVEFORMATEX waveformat;     //与声音输入有关的结构体
WAVEHDR m_pWaveHdr;
MMTIME mmt;
HWAVEIN  m_hWaveIn;
UINT uDeviceID;
FILE * stream;
int testresult;
DWORD datasize = 48000;
int i;
printf("START \n");
stream=fopen("results.txt","w+");
fprintf(stream,"mic %hd buffer %d \n ", a,  b );   
                      /*准备麦克风输入*/
waveformat.wFormatTag=WAVE_FORMAT_PCM;
waveformat.nChannels=1;
waveformat.nSamplesPerSec=8000;
waveformat.nAvgBytesPerSec=8000;
waveformat.nBlockAlign=1;
waveformat.wBitsPerSample=8; //指定录音格式
waveformat.cbSize=0;
  a=waveInGetNumDevs();      
  waveInOpen(&m_hWaveIn,WAVE_MAPPER, &waveformat, (DWORD)NULL,0L,CALLBACK_WINDOW);  //打开麦克风
  m_pWaveHdr.lpData = (char *)GlobalLock( GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE, datasize) );
  memset(m_pWaveHdr.lpData, 0, datasize );
  m_pWaveHdr.dwBufferLength = datasize;
  m_pWaveHdr.dwBytesRecorded = 0;
  m_pWaveHdr.dwUser = 0;
  m_pWaveHdr.dwFlags = 0;
  m_pWaveHdr.dwLoops = 0;
  waveInPrepareHeader( m_hWaveIn, &m_pWaveHdr, sizeof(WAVEHDR) ); //准备内存块录音
  waveInAddBuffer( m_hWaveIn, &m_pWaveHdr, sizeof(WAVEHDR) );
  
                 /*开始记录声音*/
  if (waveInStart(m_hWaveIn)==MMSYSERR_NOERROR) testresult=1;
  else testresult=0;
  mmt.wType = TIME_BYTES;
  printf("record %d",testresult);
while (1)
{
  waveInGetPosition(m_hWaveIn, &mmt, sizeof(MMTIME));
  m_pWaveHdr.dwBytesRecorded = mmt.u.cb;
  
  if(*(m_pWaveHdr.lpData+m_pWaveHdr.dwBytesRecorded-1)>120)
  //if(*(m_pWaveHdr.lpData+m_pWaveHdr.dwBytesRecorded-1)>-50&&*(m_pWaveHdr.lpData+m_pWaveHdr.dwBytesRecorded-1)<50 )
  {
  //fprintf(stream,"%s %ld %s","reaction_time ",reaction_time,"\t");
      printf("\n data %hd",*(m_pWaveHdr.lpData+m_pWaveHdr.dwBytesRecorded-1));
  printf("\n point %d",mmt.u.cb);
  printf("\n header %d",m_pWaveHdr.lpData);
  printf("\n data1 %hd",*(m_pWaveHdr.lpData+5));
  fprintf(stream,"%s","\n");
  printf("\n data:");
  for(i=0;i<mmt.u.cb;i++)
  {
  printf("%hd ",*(m_pWaveHdr.lpData+i));
  }
  printf("\n OK!");
  break;
  }
  
 /* if(getkey()&&pressed==0)  
  {
  fprintf(stream,"wavedata %hd \n ", *(m_pWaveHdr.lpData+m_pWaveHdr.dwBytesRecorded-1) );
  }*/
  
}
    /*结束记录声音*/
  waveInReset(m_hWaveIn);
               /*结束麦克风输入*/
   waveInUnprepareHeader(m_hWaveIn, &m_pWaveHdr, sizeof(WAVEHDR)) ;
   GlobalFree(GlobalHandle( m_pWaveHdr.lpData ));
   waveInClose(m_hWaveIn);
fclose (stream);
return;
}
可是有些电脑里面程序可以正常使用,有些电脑里面不用任何输入就自动退出了。数据类型是短整形,数值范围-128~127。从得到得数据看,如果没有麦克风输入,数值应该是-128,这样的话程序可以正常运行;但是在很多电脑上,没有声音输入数值也是127,程序就自动退出了。不知道这是为什么?


解决方案1:

扩大此值范围试试。换成无符号型。

解决方案2:

帮你顶一下!


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 声音输入的奇怪问题!?

相关文章

  • 2017-06-05 arm安装QT+OpencvGTK+?
  • 2017-06-05 如何在vc中调用扫描仪驱动程序?都用到哪些API函数?给高分!!!
  • 2017-06-05 杀毒需要什么基础?
  • 2017-06-05 我想写网卡的驱动,谁能告诉我那些标准在那里下。如RTL8019as
  • 2017-06-05 pthread_create创建多线程,报错问题,求教,急
  • 2017-06-05 USBD_CONFIGURATION_HANDLE这个结构是如何定义的?
  • 2017-06-05 vxworks支持AMD的cpu吗?
  • 2017-06-05 请问是否有什么工具软件可以随时抓取PCMCIA接口的数据
  • 2017-06-05 eeprom断电丢失,我要疯了,求助
  • 2017-06-05 三一重工中联重科如何计算重定位中的运行时存储地址

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 怎样修改万网的域名SOA到自己的服务器?
    • ALLJOYN支持跨网关通讯么
    • 有关CF卡驱动的问题?
    • wince60操作系统读写excel问题
    • 刚进一家公司,对给的任务不是很明白,求帮助
    • 使用USB设备、打印机、软驱会调用那些API函数
    • 怎样用驱动处理光盘弹出的消息?
    • D12TESTSys无法在Win7/Win8下安装,能否通过修改inf解决?
    • vxworks67加载RTL8139驱动的问题
    • innosetup怎么安装inf文件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有