我试图使用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 Studio2008年抛出的以下错误:

呼叫的是模棱两可之间,以下的方法或性质:'Microsoft。您.DirectSound.CaptureBufferDescription.CaptureBufferDescription()' 和 'Microsoft。您.DirectSound.CaptureBufferDescription.CaptureBufferDescription()'

呼叫的是模棱两可之间 下面的方法或性质:'Microsoft。您.DirectSound.WaveFormat.WaveFormat()' 和 'Microsoft。您.DirectSound.WaveFormet.WaveFormat()'

我已经尝试了好几个不同的组合,指出空间,并使用的语句,但未成功。

我还检查了所引用的方案资源管理器,并尽我所能告诉没有重复。

一个全新的试验项目仅仅只有微软。您.DirectSound参考,没有别的还是抛出了同样的错误。

我还在卸载和重新安装的安装SDK(March2009),以及安装SDK(November2008).仍然没有运气。

最后,我已经试过了一个新项目的另一台计算机上的这里,在实验室和它仍然没有工作。

这里引用我有:

  • 曲线图
  • Microsoft。您.DirectSound
  • Microsoft。您.手柄
  • PresentationCore
  • PresentationFramework
  • 服务
  • 系统
  • 系统。核心
  • 系统。数据
  • 系统。数据。过程
  • 系统。部署
  • 系统。绘画
  • 系统。运行时间。化
  • 系统。ServiceModel
  • 系统。窗户。形式
  • System.Xml
  • 系统。Xml。皇宫
  • UIAutomationProvider
  • WindowsBase
  • WindowsFormsIntegration
有帮助吗?

解决方案

我有同样的误差,它不是一个双人参考。"运行"和编译器,奇迹般地忘记它,或者你可以停止烦恼完全与以下。

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

其他提示

这听起来像你也许是引用多种版本的安装大会。也许双检查你的引用。如果你 需要 多个版本,然后 extern alias 可以帮助-但这是不是很漂亮。


在Visual Studio,寻找"方案explorer"(通常在右边)-这是树的一切都在你的项目。其中一个项目,在这棵树是"提及"。这是一种视觉表现的外部dll你的代码被配置到使用。

(还有很多,很多。净dll-你需要告诉每一个项目是什么dll它可能需要的)

扩大这种节点,并寻找2条,看起来像您.如果有 二、摆脱他们中的一个(理想的是在一个较低的版本)。然后尝试和重建。

你已经包括两个参考文献的不同版本的组件,包含这一职能。删除其中的一个参考文献。

你可能有多个提到的安装大会。检查你的项目,在该参考文件夹。寻找重复的项目,具体提及多个版本microsoft.directx.directsound.dll.如果有,是重复消除一再试一次。

这是常见的问题DirectSound.你会发现还有很多很多其他问题;)请记住,DS没有什么是什么它看起来。当缓冲区返回null它可能会导致只是因为"阅读的位置"只是缓冲区内编写指针。所以当你问读或写指针的计算总是至少有一块安全的区域)和时你会得到缓冲区的位置,从ds方法的使用尽量投因为它可以把随机误差。

强迫你的软汇编在x86或64而不是'任何CPU'将解决问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top