문제

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 Studio 2008은 다음과 같은 오류를 발생시킵니다.

호출은 다음 방법이나 속성 사이에 모호합니다.

그리고

호출은 다음 방법이나 속성 사이에 모호합니다.

나는 네임 스페이스를 진술하고 진술을 사용하는 몇 가지 다른 조합을 시도했지만 운이 없습니다.

또한 솔루션 탐색기의 참조를 확인했으며 중복이 없다고 말할 수있는 한.

Microsoft.DirectX.DirectSound 참조 만있는 새로운 테스트 프로젝트는 여전히 동일한 오류를 던지지 않습니다.

또한 DirectX SDK (2009 년 3 월)와 DirectX SDK (2008 년 11 월)를 제거하고 다시 설치했습니다. 여전히 운이 없습니다.

마지막으로, 실험실에서 다른 컴퓨터에서 새로운 프로젝트를 시도했지만 여전히 작동하지 않습니다.

내가 가진 참고 문헌은 다음과 같습니다.

  • 그래프
  • Microsoft.directx.DirectSound
  • Microsoft.directx.DirectInput
  • 프레젠테이션 코어
  • 프레젠테이션 프레임 워크
  • 서비스
  • 체계
  • System.core
  • System.Data
  • System.data.datasetextensions
  • System.Deployment
  • System.Drawing
  • System.runtime. 서식
  • System.ServiceModel
  • System.windows.forms
  • System.xml
  • System.xml.linq
  • 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

다른 팁

DirectX 어셈블리의 여러 버전을 참조하는 것처럼 들릴 것입니다. 아마도 참조를 두 번 확인하십시오. 만약 너라면 필요 그렇다면 여러 버전 extern alias 도움이 될 수 있지만 예쁘지 않습니다.


Visual Studio에서 "솔루션 탐색기"(일반적으로 오른쪽)를 찾으십시오. 이것은 프로젝트의 모든 것의 트리입니다. 이 나무의 항목 중 하나는 "참조"입니다. 이것은 코드가 사용하도록 구성된 외부 DLL의 시각적 표현입니다.

(많은 .NET dlls가 있습니다. 각 프로젝트를 각 프로젝트에 필요한 DLL을 알려야합니다)

이 노드를 확장하고 DirectX처럼 보이는 2 개의 항목을 찾으십시오. 만약 거기에 ~이다 둘째, 그들 중 하나를 제거하십시오 (이상적으로는 더 낮은 버전이있는 것). 그런 다음 시도하고 재건하십시오.

해당 기능이 포함 된 다른 버전의 어셈블리에 대한 두 가지 참조가 포함되어 있습니다. 참조 중 하나를 제거하십시오.

DirectX 어셈블리에 대한 여러 참조가있을 수 있습니다. 참조 폴더에서 프로젝트를 확인하십시오. 중복 항목, 특히 Microsoft.directx.directsound.dll의 여러 버전에 대한 참조를 찾으십시오. 중복이 있으면 하나를 제거하고 다시 시도하십시오.

이것은 DirectSound의 일반적인 문제입니다. 당신은 또한 많은 다른 많은 문제들을 찾을 것입니다.) ds에서는 아무것도 보이지 않는다는 것을 기억하십시오. 버퍼 리턴 NULL이면 "읽기 위치"가 내부 버퍼 쓰기 포인터이기 때문에 유용 할 수 있습니다. 따라서 읽기 또는 쓰기 포인터를 요청할 때 Allways Allways 이상을 계산하면 최소한 하나의 블록 안전 구역;) DS 메소드에서 버퍼 위치를 얻을 때 임의의 오류를 던질 수 있으므로 캐스트를 시도하십시오.

'모든 CPU'대신 x86 또는 x64로 소프트를 컴파일하도록 강제로 문제가 해결됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top