首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#在DirectSound中的模糊调用

C#在DirectSound中的模糊调用
EN

Stack Overflow用户
提问于 2009-06-23 19:13:46
回答 6查看 2.7K关注 0票数 1

我试着用DirectSound来捕捉麦克风的声音。这是我的密码:

代码语言:javascript
复制
    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月)。还是没有运气。

最后,我在实验室的另一台计算机上尝试了一个新的项目,但它仍然不起作用。

以下是我的参考资料:

  • Graph
  • Microsoft.DirectX.DirectSound
  • Microsoft.DirectX.DirectInput
  • PresentationCore
  • PresentationFramework
  • Service
  • System
  • System.Core
  • System.Data
  • System.Data.DataSetExtensions
  • System.Deployment
  • System.Drawing
  • System.Runtime.Serialization
  • System.ServiceModel
  • System.Windows.Forms
  • System.Xml
  • System.Xml.Linq
  • UIAutomationProvider
  • WindowsBase
  • WindowsFormsIntegration
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-09-02 13:55:47

我也犯了同样的错误,这不是双重引用。单击run,编译器会神奇地忘记它,或者您可以通过以下操作完全停止烦扰。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2009-06-23 19:19:32

听起来可能是在引用directx程序集的多个版本。也许再查一遍你的推荐信。如果您的需要多个版本的,那么extern alias可能会有所帮助--但它并不漂亮。

在Visual中,查找“解决方案资源管理器”(通常位于右侧)--这是项目中所有内容的树。这个树中的项目之一是“引用”。这是您的代码配置使用的外部dll的可视化表示形式。

(有很多很多.NET dlls您需要告诉每个项目它可能需要什么dll)

展开此节点,并查找两个类似directx的条目。如果有两个,就去掉其中一个(最好是低版本的那个)。那就试着重建。

票数 1
EN

Stack Overflow用户

发布于 2009-06-23 19:20:32

您已经包含了对包含该函数的程序集的不同版本的两个引用。删除其中一个引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1034557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档