关于waveInReset/waveOutReset锁死问题

waveInReset/waveOutReset死锁原因与解决方案 问题背景 录音播音实际需求1、随时终止2、录音并非文件,而是形成rtp发送3、播音并非源于文件,而是源于rtp 因此Waveform audio使用的buffer较小,不断的装载/发送 buffer,终止的时候Reset并且close.大致如下调用的循环 录音waveInUnprepareHeaderwaveInPrepareHeaderwa 阅读详情
  在调用waveInReset/waveOutReset期间,系统调用了回调函数,如果设置bStop标志,使回调函数在这时什么都不做直接返回,问题就解决了。
         注意,发出了停止指令后,回调函数所做的第一件事就是返回,哪怕做了一件与声音无关的事,也要产生意外 。
waveInStop死锁 //MMRESULT mmRet = waveInOpen(&m_hWaveIn, /*nDevId*/WAVE_MAPPER, &waveFormat, (DWORD_PTR)WaveInProcFun, (DWORD_PTR)this, CALLBACK_FUNCTION); //采用回调用的方法,当你异常拔插设备的时候,很容易导致程序死锁 阅读详情

相关推荐

WaveIn&WaveOut;的使用示例

用WaveIn开发的录制,用WaveOut开发的播放,目的是方便广大爱好者的学习。

WinAPI: waveInReset - 重置输入

提示: 函数会终止输入, 位置清0; 放弃未处理的缓冲区并返回给程序; TWaveHdr 结构中的 dwBytesRecorded 将包含实际数据的长度. //声明: waveInReset( hWaveIn: HWAVEIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5;...

weixin_33701251的博客 154

电动汽车欧标直流充电标准解析

电动汽车和电动汽车充电市场是动态发展的,欧洲也正在努力部署基础设施,以支持欧洲快速增长和多样化的电动汽车充电需求。

网络安全的研究者、新能源行业的追求者 7616

解决WaveInReset死锁问题

试过好多次waveInReset,,结果都造成程序停止响应。。。刚刚又看了看MSDNwaveInResetThe waveInReset function stops input on the given waveform-audio input device and resets the current position to zero. All pending buffers are mark...

wmnmtm的专栏 940

多期DID实战指南:从CSDID原理到分组加权策略

本文深入解析多期DID(CSDID方法)在政策评估中的实战应用,从核心思想到分组加权策略全面讲解。通过电商扶贫等案例,详细演示如何正确处理分批实施政策的数据分析,包括分组拆解、子模块DID操作及加权平均选择,帮助研究者规避常见误区,提升政策评估的准确性。

weixin_26833503的博客 524

Materials Studio多层聚合物建模全流程:从Build Layers到LAMMPS data文件导出避坑指南

本文详细解析了使用Materials Studio构建多层聚合物模型并导出为LAMMPS data文件的全流程。重点剖析了Build Layers工具的核心逻辑、真空层处理技巧,并提供了解决导出过程中Z轴坐标偏移问题的实战方案,特别是如何利用msi2lmp工具的-shift参数进行精准校正,确保模型在LAMMPS中模拟的稳定性和准确性。

hhh00的博客 913

waveInAddBuffer死锁的大雷解决

从来没有一个bug让我这么抓狂,足足查了3天3夜,官方文档翻了一遍说的基本无用。具体项目就是使用waveIn系列函数获取windows系统麦克风数据,虽然windows上有好几种方法获取麦克风数据,我最终还是选择了它。

jiexijihe945的博客 1077

UGUI合批杀手:Mask/RectMask2D为何必断合批?

颜色缓冲负责记录像素颜色;模板缓冲负责记录“这个像素的模板值”(一个小整数);渲染时,你可以设定:只有模板值为 X 的地方才允许画;或者往某些区域写特定的模板值。类似于:先拿一支隐形笔在纸上画出一块区域,给它记一个编号“1”,后面的涂色动作只允许涂在“编号为1”的区域上。合批的前提:渲染状态不变,连续元素能一口气画完。材质、贴图、混合模式、Stencil、裁剪区域……都得一致。Mask / RectMask2D 的本质:在渲染状态上加规则——“只在某个区域内允许写像素”。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 118

WinAPI: waveOutReset - 重置输出

提示: 函数会终止输入, 位置清0; 放弃未处理的缓冲区并返回给程序. //声明: waveOutReset( hWaveOut: HWAVEOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSERR_HANDLEBUSY = 12; ...

weixin_33728268的博客 131

零基础学习simulink-- 四旋翼和六旋翼无人机的建模与动力学分析

通过上述代码实现,您可以逐步创建和搭建一个多旋翼无人机(如四旋翼、六旋翼)的动力学模型,并结合自适应控制器进行仿真。该模型不仅考虑了无人机的基本动力学行为,还引入了空气阻力、螺旋桨之间的相互作用以及气流干扰等复杂效应,使得仿真结果更加接近实际情况。Simulink 提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。多旋翼无人机动力学建模:建立四旋翼和六旋翼无人机的动力学模型,包括平移运动和旋转运动方程。升力和扭矩模型。

amy_mhd的博客 386

ESD防护设计宝典(十):RE(辐射发射)超标问题排查与解决

RE测试是EMC认证的“头号杀手”。当屏幕上出现一根根超标频谱线时,如何快速定位元凶并有效整改?本讲将带你化身电磁侦探,完成一次完美的RE问题“缉凶”。

m0_56451176的博客 394

waveOutReset

The waveOutReset function stops playback on the given waveform-audio output device and resets the current position to zero. All pending playback buffers are marked as done (WHDR_DONE) and returned to ...

wmnmtm的专栏 205

C#图像处理:OpenCVSharp实现简单人脸识别

人脸识别是计算机视觉领域中的一个重要研究方向,它可以通过分析和比对人脸图像,实现识别和验证的功能。希望通过这篇文章的学习,你对OpenCVSharp和人脸识别有了初步的了解,并能够运用这些知识进行自己的项目开发。当我们运行程序时,它会加载人脸识别模型并读取待识别的图像,然后进行人脸检测并在图像上标记出检测到的人脸位置。当然,这只是一个入门级的示例,实际的人脸识别系统还需要更加复杂的算法和大量的训练数据来提高准确性和鲁棒性。最后,我们遍历检测到的人脸,并在原始图像上绘制矩形框,标记出检测到的人脸位置。

WELL_CODER的博客 1129

WaveInOpen线程版,解决waveInStop死锁

Window api,waveIn录音

WuSk__的博客 935

Anomalib库安装以及使用

Anomalib是一个专注于异常检测的深度学习库。它的目标是收集最新的异常检测算法,并提供用于在公共和私有数据集上进行基准测试的工具。该库提供了一系列已实现的异常检测算法,这些算法在最近的文献中有所描述。此外,Anomalib还提供了一套工具,方便开发人员开发和实现自定义模型。该库特别注重基于图像的异常检测,旨在识别数据集中的异常图像或图像中的异常像素区域。通过使用Anomalib,用户可以快速构建和评估各种异常检测算法,以满足其特定需求。

mingo_敏 5198

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C语言里的out函数,c语言 vc 用waveout函数写wave文件播放器

用WaveOut函数写wave文件播放器要炒菜的话,就得先准备工具,如锅、铲子、炉灶等。对程序来说,就是各种函数的应用。WaveOut函数在windowsAPI中属于低阶接口,用来播放的话需要用到下面几个:waveOutOpen – 打开波形输出设备waveOutPrepareHeader – 准备播放缓冲区waveOutUnprepareHeader – 取消播放缓冲区waveOutWrite ...

weixin_28699741的博客 1044

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

waveOutReset的N种死法, 及其解决方案

我遭遇到了调用waveOutReset死锁的问题,在GOOGLE上一搜,遇到同样问题的人还真不少,但没有人很明确地找到造成DEADLOCK的原因,都是糊里糊涂就把问题解决了,然后把运行OK的代码一贴完事。我花了四五个小时才彻底摸清楚规律,把这经验拿出来共享原则:(1) waveOutReset不是立即返回的函数, 而需要等待驻留在WAVEDEV里的音频BUFFER全部标记为

bloghome的专栏 1026

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

解决Win7下使用waveIn系列函数录音时插拔麦克风时的死锁问题

最近由于项目需要,使用waveIn系列函数进行录音,程序一直工作得很好。直到有一次启动程序后发现没有插入麦克风,在没有关闭程序的情况下插入麦克风,之后程序就无法退出了。后来测试了在程序运行时拔掉麦克风的情况,也无法退出。     先说一下程序,waveInOpen函数支持多种方式获取数据,例如回调函数、线程、窗口等。回调函数的方式无疑是最简单的,本程序就是采用的这种方式。通过调试程序发现在程序运

猪猪胖嘟嘟的专栏 2065

waveOutReset 停止播放并重置管理器

原则:(1) waveOutReset不是立即返回的函数, 而需要等待驻留在WAVEDEV里的音频BUFFER全部标记为WOM_DONE,经过callback proc处理完毕后, waveOutReset才会返回. (2) 在waveOutReset调用到返回之间的这段时间内, 禁止任何线程对处于reset中的HWAVEOUT调用任何WAVE API, 否则立刻造成死锁.把握住这两个

Lisa的专栏 2020

WinAPI: waveInStop - 停止输入

提示: 如果未启动则调用无效, 但也返回 0; 缓冲区会被返回, TWaveHdr 结构中的 dwBytesRecorded 将包含返回的实际数据的长度. //声明: waveInStop( hWaveIn: HWAVEIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; ...

weixin_34239169的博客 205
上一篇: Windows音频编程:Win32 Wave API 的使用
下一篇: 多线程同步
duloveding
博客等级 码龄17年 38粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值