播放声音资源时蓝屏

Posted

技术标签:

【中文标题】播放声音资源时蓝屏【英文标题】:BSOD while playing a sound resource 【发布时间】:2011-04-15 10:43:45 【问题描述】:

我有一个 VB.NET 应用程序在客户端计算机上崩溃并出现 BSOD 错误...KERNEL_DATA_INPAGE_ERROR。

这个错误发生在我的程序做两件事的时候:

锁定计算机 在 BackgroundLoop 模式下播放声音

为了锁定工作站,我只是使用这个:

<DllImport("user32")> _
Public Shared Sub LockWorkStation()
End Sub

为了播放声音,我这样做:

My.Computer.Audio.Play(My.Resources.ResourceManager.GetStream("somesound"), AudioPlayMode.BackgroundLoop)

现在,此声音会循环播放,直到用户重新登录。我的软件检测到会话状态切换并停止播放声音。有时当我重新登录时,声卡会在一瞬间播放垃圾数据,而不是音频缓冲区的其余部分。我的印象是这与会话切换有关。

我的客户是否会遇到在锁定计算机时发生内存损坏的问题?

对于这篇文章的含糊之处,我深表歉意......我不确定从哪里开始,因为我自己无法重现该问题。

编辑:如果让声音自行播放,即使没有锁定计算机,最终计算机也会锁定然后蓝屏。在锁定的同时播放声音会更快地发生。

编辑#2:所以我现在看到它失败了。声音循环开始正确播放,但很快切换到垃圾数据循环。就好像它只是读取内存中的一个随机位置并循环它。非常奇怪的行为!

已解决!毕竟一直都是硬件。显然,这种特殊型号的笔记本电脑存在扬声器安装在硬盘驱动器顶部的问题。大声播放声音会产生各种问题。

【问题讨论】:

它只在一台电脑上?还是所有客户的? 目前只有一个正在运行 XP 的测试。我自己在 6 台机器上测试过,无法重现错误。它们都运行相同版本的 XP SP3,我的客户端也在运行。 所以当您尝试取消声音时会发生崩溃?当工作站被锁定并且声音循环时,它永远不会发生?如果您在没有先锁定工作站的情况下执行此操作,它会崩溃吗? 扬声器放置的问题听起来像这样:blogs.sun.com/brendan/entry/unusual_disk_latency @Simon 这是笔记本电脑:engadget.com/2009/03/26/… 我播放的声音恰好是手臂共振的确切频率,导致头部崩溃和数据损坏。由于它是一个只有 1GB 内存的上网本,交换文件被大量使用,破坏了内存。我几乎因此失去了一位重要客户。每次我们测试代码时,都很好。客户会打开扬声器为他的销售对象做演示,结果蓝屏。 【参考方案1】:

蓝屏几乎肯定与有缺陷的硬件或驱动程序有关。在软件方面,除了制定解决方法之外,您真的无能为力。

您可以perform a memory dump 并尝试确定具体出了什么问题,或者通过一些巧妙的调试查看它在哪里爆炸以试图避免它。

否则,您可能正在谈论对相关机器进行一些维护工作。

【讨论】:

这就是我一直说的,但遗憾的是,我的软件是唯一让这台机器崩溃的东西。另一个问题是......我已经在另一个程序中分别尝试了所有这些功能,它没有崩溃。这让我相信内存不好,但这就像这个程序的发条一样。我非常感谢您的建议!你已经证实了我的想法。 哇。诡异的。现在我开始犹豫了。我无法想象糟糕的 RAM 会导致它每次都死机。对我来说,这似乎是一个驱动程序问题,但我不熟悉 BSOD 代码。尽管如此,Technet states:“此停止消息通常是由分页文件中的坏块(扇区)、病毒、磁盘控制器错误或 RAM 故障引起的。”

以上是关于播放声音资源时蓝屏的主要内容,如果未能解决你的问题,请参考以下文章

使用 c# wpf 从资源文件播放声音

Swift AVAudioPlayer 不播放声音

Android SoundPool 不播放 wav 格式的声音

资源被解释为文档,但在 Chrome 控制台中传输时出现 MIME 类型音频/mpeg 错误,导致无法播放声音

[UE4]声音系统概述

使用 AVAudioPlayer 播放带有起音/延音(循环)/衰减的声音的最佳方式