- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(抱歉,如果这是重复的......我发布了但没有看到它确实进入论坛的证据)
我一直在努力让 SlimDX DirectSound 正常工作。这是我的代码。它从 wav 文件填充辅助缓冲区,然后在线程循环中交替填充缓冲区的下半部分或上半部分。
它很好地播放了缓冲区的第一次加载。 AutoResetEvents 在它们应该触发的时候触发,然后填充缓冲区的下半部分和上半部分(使用调试语句验证)。但是在第一次加载缓冲区后播放不会继续。因此,缓冲区的重新填充以某种方式无法正常工作。
想法?
(我正在使用 DirectSound,因为这是我发现的设置我想使用的音频设备 GUID 的唯一方法。我对其他 .NET 友好的方法持开放态度。)
private void PlaySound(Guid soundCardGuid, string audioFile) {
DirectSound ds = new DirectSound(soundCardGuid);
ds.SetCooperativeLevel(this.Handle, CooperativeLevel.Priority);
WaveFormat format = new WaveFormat();
format.BitsPerSample = 16;
format.BlockAlignment = 4;
format.Channels = 2;
format.FormatTag = WaveFormatTag.Pcm;
format.SamplesPerSecond = 44100;
format.AverageBytesPerSecond = format.SamplesPerSecond * format.BlockAlignment;
SoundBufferDescription desc = new SoundBufferDescription();
desc.Format = format;
desc.Flags = BufferFlags.GlobalFocus;
desc.SizeInBytes = 8 * format.AverageBytesPerSecond;
PrimarySoundBuffer pBuffer = new PrimarySoundBuffer(ds, desc);
SoundBufferDescription desc2 = new SoundBufferDescription();
desc2.Format = format;
desc2.Flags = BufferFlags.GlobalFocus | BufferFlags.ControlPositionNotify | BufferFlags.GetCurrentPosition2;
desc2.SizeInBytes = 8 * format.AverageBytesPerSecond;
SecondarySoundBuffer sBuffer1 = new SecondarySoundBuffer(ds, desc2);
NotificationPosition[] notifications = new NotificationPosition[2];
notifications[0].Offset = desc2.SizeInBytes / 2 + 1;
notifications[1].Offset = desc2.SizeInBytes - 1; ;
notifications[0].Event = new AutoResetEvent(false);
notifications[1].Event = new AutoResetEvent(false);
sBuffer1.SetNotificationPositions(notifications);
byte[] bytes1 = new byte[desc2.SizeInBytes / 2];
byte[] bytes2 = new byte[desc2.SizeInBytes];
Stream stream = File.Open(audioFile, FileMode.Open);
Thread fillBuffer = new Thread(() => {
int readNumber = 1;
int bytesRead;
bytesRead = stream.Read(bytes2, 0, desc2.SizeInBytes);
sBuffer1.Write<byte>(bytes2, 0, LockFlags.None);
sBuffer1.Play(0, PlayFlags.None);
while (true) {
if (bytesRead == 0) { break; }
notifications[0].Event.WaitOne();
bytesRead = stream.Read(bytes1, 0, bytes1.Length);
sBuffer1.Write<byte>(bytes1, 0, LockFlags.None);
if (bytesRead == 0) { break; }
notifications[1].Event.WaitOne();
bytesRead = stream.Read(bytes1, 0, bytes1.Length);
sBuffer1.Write<byte>(bytes1, desc2.SizeInBytes / 2, LockFlags.None);
}
stream.Close();
stream.Dispose();
});
fillBuffer.Start();
}
}
最佳答案
您还没有将其设置为在播放缓冲区上循环播放。将您的代码更改为:
sBuffer1.Play(0, PlayFlags.Looping);
关于c# - 使用 SlimDX 和 DirectSound (C#) 播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877362/
我的应用程序不时初始化一堆 DirectX 内容并加载场景,有时包含一些大纹理(每个纹理最多 200-300 MB)。起初,一切正常,但过了一会儿 FromMemory()只是停止工作,但仅适用于大纹
我想在 SlimDX(Direct3D11) 中加载一个预编译的着色器,但我不知道该怎么做。 我搜索了这个主题,只找到了 C++ native 版本的 DirectX 的解决方案。似乎是/Gch 编译
我创建了新窗口,并在新线程上使用了 SlimDX.Windows.MessagePump.Run。我怎样才能停止这个循环? 最佳答案 如果您将表单作为参数传递给 MessagePump.Run,您
我有以下代码来实例化一个常量缓冲区并将其绑定(bind)到像素着色器。 ConstantBuffers.EveryFrame 是 ConstantBuffers 类中的一个结构,它包含我需要在每帧基础
如何使用 SlimDX 的 Direct2D 接口(interface)绘制三角形,三角形顶点以像素坐标给出? 最佳答案 我们最近刚刚在我们的存储库中添加了一个涵盖该主题的示例。相关的源文件是here
我最近做了一个游戏截图应用。 首先,我使用 GDI 来捕获游戏,但为此我不得不在 win7/vis 上禁用 aero,而且我在 windows XP 上遇到了一些问题。 当我决定使用 DirectX
我正在尝试使用 SlimDX 渲染线框 3D 模型。 谷歌搜索后我只找到了高级主题,没有找到如何在 SlimDX 中绘制线框。他们说我必须使用着色器才能做到这一点。 由于我是 DirectX 的新手,
我一直在关注 Microsoft Direct3D11 教程,但使用的是 C# 和 SlimDX。我正在尝试设置常量缓冲区,但不确定如何创建或设置它。 我只是尝试使用常量缓冲区设置三个矩阵(世界、 V
我遇到了 SlimDX March SDK 的问题(我相信是 DXSDK11 June 2010)。问题是,每当我将附加深度 View 转为输出合并状态时,我都不会在屏幕上看到任何输出。我将我的代码与
这是我在 StackOverflow 上遇到的第一个问题,万岁!我可以诚实地说,我每天都使用 StackOverflow 来处理我的工作和个人编程谜题。 99.9% 的情况下,我实际上也在这里找到了我
好的 - 我是 SlimDX、DirectX 和一般图形编程的新手,我需要加快速度。 我正在尝试开发一个原型(prototype)应用程序来可视化和调试我最终将在非图形应用程序中使用的数据。 我已经学
您好,我在使用 SlimDX 正确渲染 Sprite 时遇到了问题。它的绘制有点像 .NET Drawing DrawImageUnscaled 所做的那样。我没有使用任何转换。 初始化: Vecto
我知道这里有很多关于在 XNA 和 SlimDX 之间进行选择的问题,但这些都与游戏编程有关。 一点背景知识:我有一个根据 XML 描述渲染场景的应用程序。目前我正在使用 WPF 3D,这主要是有效的
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
有没有基于 SlimDX 框架的主要游戏或开源游戏?我知道它几乎只是 DirectX 之上的包装器,但看到它在成熟的环境中使用仍然很有趣。 我也在寻找游戏背后的某种故事:关于如何选择框架、存在哪些陷阱
我没能找到这方面的文档,但它可能非常简单。我有一个需要更新变量的像素着色器。我唯一接近的是 ConstantTable,但它在 Direct3D9 下,而不是我正在使用的 Direct3D11。 将
我使用 ffmpeg 解码视频文件,解码后得到 YUV 图像。 如何使用 SlimDX/DirectX 将此 YUV 图像显示为表面(或纹理?)的覆盖? 谢谢。 最佳答案 您可以使用颜色格式 YUV
我们如何使用 slimdx n c# 编码来编写媒体播放器 最佳答案 尝试借用this guy's code ...您必须从 VB 翻译它,但似乎您要查找的大部分内容都在那里。 关于c#-3.0 -
我想使用 SlimDX (DirectX 11) 在 WPF 中呈现图像的内容。 问题是我找不到将 SwapChain 链接到 D3DImage 的方法。 (DirectX 11 示例使用 SlimD
我们有一个目前使用 DirectX11 SlimDX 的项目,希望将其移至 SharpDX。然而,这个项目使用了 SlimDX 的效果框架,据我所知,DirectX11 不再正确支持它。但是,我找不到
我是一名优秀的程序员,十分优秀!