我试着用DirectSound来捕捉麦克风的声音。这是我的密码:
using Microsoft.DirectX.DirectSound;
public MicrophoneSensor()
{
CaptureBufferDescription micBufferDesc = new CaptureBufferDescription();
WaveFormat format = new WaveFormat();
format.SamplesPerSecond = 22000;
format.Channels = 1;
format.BitsPerSample = 8;
format.AverageBytesPerSecond = 22000;
format.BlockAlign = 1;
micBufferDesc.Format = format;
micBufferDesc.BufferBytes = 100000;
micBufferDesc.ControlEffects = false;
micBufferDesc.WaveMapped = true;
micBuffer = new CaptureBuffer(micBufferDesc, microphone);
}micBufferDesc和格式变量的实例化导致Visual 2008引发以下错误:
调用在以下方法或属性之间是不明确的:'Microsoft.DirectX.DirectSound.CaptureBufferDescription.CaptureBufferDescription()‘和'Microsoft.DirectX.DirectSound.CaptureBufferDescription.CaptureBufferDescription()’
和
调用在以下方法或属性之间是不明确的:'Microsoft.DirectX.DirectSound.WaveFormat.WaveFormat()‘和'Microsoft.DirectX.DirectSound.WaveFormet.WaveFormat()’
我尝试了几个不同的组合来声明名称空间和使用语句,但是没有成功。
我还检查了解决方案资源管理器中的引用,据我所知,没有重复引用。
一个全新的测试项目,只有Microsoft.DirectX.DirectSound引用,没有其他任何东西,仍然抛出相同的错误。
我还卸载和重新安装了DirectX SDK (2009年3月)以及DirectX SDK (2008年11月)。还是没有运气。
最后,我在实验室的另一台计算机上尝试了一个新的项目,但它仍然不起作用。
以下是我的参考资料:
发布于 2009-09-02 13:55:47
我也犯了同样的错误,这不是双重引用。单击run,编译器会神奇地忘记它,或者您可以通过以下操作完全停止烦扰。
using System.Reflection;
// then instead of WaveFormat fmt = new WaveFormat()
ConstructorInfo constructor = typeof(WaveFormat).GetConstructor(Type.EmptyTypes);
WaveFormat fmt = (WaveFormat)constructor.Invoke(null);
// do the same for CaptureBufferDescription发布于 2009-06-23 19:19:32
听起来可能是在引用directx程序集的多个版本。也许再查一遍你的推荐信。如果您的需要多个版本的,那么extern alias可能会有所帮助--但它并不漂亮。
在Visual中,查找“解决方案资源管理器”(通常位于右侧)--这是项目中所有内容的树。这个树中的项目之一是“引用”。这是您的代码配置使用的外部dll的可视化表示形式。
(有很多很多.NET dlls您需要告诉每个项目它可能需要什么dll)
展开此节点,并查找两个类似directx的条目。如果有两个,就去掉其中一个(最好是低版本的那个)。那就试着重建。
发布于 2009-06-23 19:20:32
您已经包含了对包含该函数的程序集的不同版本的两个引用。删除其中一个引用。
https://stackoverflow.com/questions/1034557
复制相似问题