core_audio_util_win.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Utility methods for the Core Audio API on Windows. 6// Always ensure that Core Audio is supported before using these methods. 7// Use media::CoreAudioIsSupported() for this purpose. 8 9#ifndef MEDIA_AUDIO_WIN_CORE_AUDIO_UTIL_WIN_H_ 10#define MEDIA_AUDIO_WIN_CORE_AUDIO_UTIL_WIN_H_ 11 12#include <audioclient.h> 13#include <mmdeviceapi.h> 14#include <string> 15 16#include "base/basictypes.h" 17#include "base/win/scoped_comptr.h" 18#include "media/audio/audio_device_name.h" 19#include "media/base/media_export.h" 20 21using base::win::ScopedComPtr; 22 23namespace media { 24 25class MEDIA_EXPORT CoreAudioUtil { 26 public: 27 // Returns true if Windows Core Audio is supported. 28 static bool IsSupported(); 29 30 // The Windows Multimedia Device (MMDevice) API enables audio clients to 31 // discover audio endpoint devices and determine their capabilities. 32 33 // Number of active audio devices in the specified flow data flow direction. 34 // Set |data_flow| to eAll to retrive the total number of active audio 35 // devices. 36 static int NumberOfActiveDevices(EDataFlow data_flow); 37 38 // Creates an IMMDeviceEnumerator interface which provides methods for 39 // enumerating audio endpoint devices. 40 static ScopedComPtr<IMMDeviceEnumerator> CreateDeviceEnumerator(); 41 42 // Create a default endpoint device that is specified by a data-flow 43 // direction and role, e.g. default render device. 44 static ScopedComPtr<IMMDevice> CreateDefaultDevice( 45 EDataFlow data_flow, ERole role); 46 47 // Create an endpoint device that is specified by a unique endpoint device- 48 // identification string. 49 static ScopedComPtr<IMMDevice> CreateDevice(const std::string& device_id); 50 51 // Returns the unique ID and user-friendly name of a given endpoint device. 52 // Example: "{0.0.1.00000000}.{8db6020f-18e3-4f25-b6f5-7726c9122574}", and 53 // "Microphone (Realtek High Definition Audio)". 54 static HRESULT GetDeviceName(IMMDevice* device, AudioDeviceName* name); 55 56 // Gets the user-friendly name of the endpoint devcice which is represented 57 // by a uniqe id in |device_id|. 58 static std::string GetFriendlyName(const std::string& device_id); 59 60 // Returns true if the provided uniqe |device_id| correspinds to the current 61 // default device for the specified by a data-flow direction and role. 62 static bool DeviceIsDefault( 63 EDataFlow flow, ERole role, std::string device_id); 64 65 // Query if the audio device is a rendering device or a capture device. 66 static EDataFlow GetDataFlow(IMMDevice* device); 67 68 // The Windows Audio Session API (WASAPI) enables client applications to 69 // manage the flow of audio data between the application and an audio endpoint 70 // device. 71 72 // Create an IAudioClient interface for an existing IMMDevice given by 73 // |audio_device|. Flow direction and role is define by the |audio_device|. 74 // The IAudioClient interface enables a client to create and initialize an 75 // audio stream between an audio application and the audio engine (for a 76 // shared-mode stream) or the hardware buffer of an audio endpoint device 77 // (for an exclusive-mode stream). 78 static ScopedComPtr<IAudioClient> CreateClient(IMMDevice* audio_device); 79 80 private: 81 CoreAudioUtil() {} 82 ~CoreAudioUtil() {} 83 DISALLOW_COPY_AND_ASSIGN(CoreAudioUtil); 84}; 85 86} // namespace media 87 88#endif // MEDIA_AUDIO_WIN_CORE_AUDIO_UTIL_WIN_H_ 89