Я пытаюсь использовать интерфейс AudioClient в первый раз, не повезло. До сих пор мне удалось получить интерфейс по умолчанию AudioClient используя успешно интерфейсы MMDeviceEnumerator и MMDevice:WASAPI AudioClient.GetMixFormat() возвращает AUDCLNT_E_NOT_INITIALIZED
CoCreateInstance(
CLSID_MMDeviceEnumerator, nil,
CLSCTX_ALL, IID_IMMDeviceEnumerator,
MMEnumerator);
MMEnumerator.GetDefaultAudioEndpoint(eRender,eConsole,MMDevice);
MMDevice.Activate(IID_IAudioClient, CLSCTX_ALL, nil, AudioClient);
(Результат проверки кода не включены). Этот 3-х вызов не возвратил никаких ошибок, и у меня есть нетривиальный интерфейс ptr в переменной AudioClient. Моя проблема в том, когда я пытаюсь получить смесительный waveformat:
AudioClient.GetMixFormat(pwfx)
Это возвращает код 0x88890001, который AUDCLNT_E_NOT_INITIALIZED. -> Конечно, не инициализирован, так как я только хотел получить тот волновой сигнал, который ему нравится в первую очередь.
В поисках msdn говорится, что AudioClient.GetMixFormat можно вызвать до AudioClient. Инициализация. Кроме того, AUDCLNT_E_NOT_INITIALIZED не входит в список возможных возвращаемых значений. Поэтому я смущен тем, что я сделал неправильно. GetMixFormat() doc ->http://msdn.microsoft.com/en-us/library/windows/desktop/dd370872(v=vs.85).aspx
Еще одна странность в том, что когда я вызываю AudioClient.GetStreamLatency(), он возвращается с S_OK и с квази-случайным значением около 1000 мс. Но в документации указывается, что «этот метод требует предварительной инициализации интерфейса IAudioClient. Все вызовы этого метода будут сбой с ошибкой AUDCLNT_E_NOT_INITIALIZED, пока клиент не инициализирует аудиопоток, успешно вызвав«. Поэтому я думаю, что у меня есть рабочий интерфейс AudioClient, я просто не понимаю, почему он не работает, как говорит документация.
(Я использую win7 64bit, Sound Blaster Live 5.1 с драйвером kx-проекта (звук DSound и классический звук в Windows работает нормально, но с 100-миллиметровой ужасной длительной задержкой это единственная причина, по которой я собираюсь использовать WASAPI на win7)
Спасибо заранее.
Я забыл сказать одну важную вещь: я использовал MFPACK https://code.google.com/ p/mfpack-media-foundation/source/browse/trunk/MFPACK/CoreAudio/WASAPI? r = 131. И в нем есть некоторые ошибки: в интерфейсе IAudioClient он содержит методы в алфавитном порядке, а не в том порядке, который был разработан Microsoft. После того, как я исправил это, все работает нормально. – user2440253
'GetMixFormat' предназначен для работы перед вызовом' Initialize'. Проблема может быть связана с аппаратным драйвером или определенным крюком, который вы установили в системе. –
И получить эту ошибку. Кажется, это связано с Delphi (или, возможно, с MFPack), поскольку он отлично работает (MS) C++. –