저는 다양한 장치에서 녹음 및 재생이 가능한 프로그램 용 오디오 코드를 개발 중입니다. 이들 중 일부는 다양한 wav 및 AIFF 형식으로 제공됩니다. WASAPI 라이브러리를 사용할 수 있기를 기대했지만, 몇 가지 중대한 문제가 발생했습니다. 지금 당장 가능한 가장 큰 점은 내가 알 수있는 한 장치는 정확히 일치하는 형식의 스트림 만 재생할 수 있다는 것입니다. 그런 다음WASAPI 문제
hr = pPlaybackDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&pTakeAudioClient);
: 내가 가진 장치를 활성화
hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pPlaybackDevice);
: 여기
내가 가진 장치 (여기 난 그냥 기본 콘솔 장치를 얻고있다)를 설정하는 것은 - 난 무엇 다음과 같이 믹스 형식을 확인합니다 :그러나 초기화 할 때 다른 형식을 사용하는 경우 :
hr = pTakeAudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_EVENTCALLBACK | AUDCLNT_STREAMFLAGS_NOPERSIST,hnsRequestedDuration, 0, pAnotherWaveFormatEx,NULL);
오류가 발생했습니다. 파일이 절대적으로 GetMixFormat에 의해 반환 된 형식이어야한다는 것 같습니다. 내가 제출할 수 있습니다 어떤 형식 알아 IsFormatSupported를 호출하는 경우 :
hr = pTakeAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, &waveFormatEx, &pAnotherWaveFormatEx);
을 둘 다 구조가 동일하더라도, E_INVALIDARG
를 얻을. WASAPI 문서에 따르면, "매개 변수 ShareMode가 AUDCLNT_SHAREMODE_SHARED
또는 AUDCLNT_SHAREMODE_EXCLUSIVE
이 아닌 다른 값일 때 리턴됩니다." 나는 AUDCLNT_SHAREMODE_SHARED
을 전달하고있다. 이것은 설명서의 오류 인 것 같습니다.
신비는 실험을 위해, 내가하려고 할 때, 깊어 :
이hr = pTakeAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE, &waveFormatEx, NULL);
오류 반환 0x8889000e
입니다 - 내가 그 오류에 대한 참조를 찾을 수 없어. 제공 할 수있는 도움이 "MMSystem 사용"인 경우에도 가장 감사하게 접수됩니다. 여러 장치가있을 때 재생 장치를 제어 할 수 있어야한다는 것을 제외하고는 MMSystem으로 시작했을 것입니다.