00001
00002 #include "Core/precomp.h"
00003
00004 #include <iostream>
00005
00006 #include "sound_dx.h"
00007 #include "soundcard_dx.h"
00008
00009 CL_SoundCard *CL_Sound_DX::cur_card = NULL;
00010
00011 BOOL WINAPI EnumerateSoundDevices(LPGUID lpGuid, LPCSTR lpstrDescription, LPCSTR lpstrModule, LPVOID lpContext);
00012
00013 CL_Sound_DX::CL_Sound_DX()
00014 {
00015 std::vector<SSoundCardInfo *> soundinfo;
00016 BOOL result = DirectSoundEnumerate(EnumerateSoundDevices, &soundinfo);
00017
00018 int card_no=0;
00019
00020 CL_Sound::cards.push_back(new CL_SoundCard_DX(card_no++, "Default device", NULL));
00021
00022 std::vector<SSoundCardInfo *>::iterator it;
00023 int i=1;
00024 for (it=soundinfo.begin();it!=soundinfo.end();it++)
00025 {
00026 CL_Sound::cards.push_back(new CL_SoundCard_DX(card_no++, soundinfo[i-1]->name, &soundinfo[i-1]->guid));
00027 i++;
00028 }
00029
00030 for (it=soundinfo.begin();it!=soundinfo.end();it++)
00031 {
00032 delete *it;
00033 }
00034
00035 CL_Sound_DX::cur_card = CL_Sound::cards[0];
00036 CL_Sound::preload_cards.push_back(CL_Sound_DX::cur_card);
00037
00038 std::cout << "ClanLib: Number of sound cards: " << CL_Sound::cards.size() << std::endl;
00039 }
00040
00041 CL_Sound_DX::~CL_Sound_DX()
00042 {
00043 for (std::vector<CL_SoundCard *>::iterator it=CL_Sound::cards.begin();it!=CL_Sound::cards.end();it++)
00044 {
00045 delete *it;
00046 }
00047 }
00048
00049 BOOL WINAPI EnumerateSoundDevices(
00050 LPGUID lpGuid,
00051 LPCSTR lpstrDescription,
00052 LPCSTR lpstrModule,
00053 LPVOID lpContext)
00054 {
00055 if (lpGuid!=NULL)
00056 {
00057 std::cout << lpstrDescription << ", " << lpstrModule << std::endl;
00058 SSoundCardInfo *info = new SSoundCardInfo;
00059 memcpy(&info->guid, lpGuid, sizeof(GUID));
00060 info->name = lpstrDescription;
00061 ((std::vector<SSoundCardInfo *> *) lpContext)->push_back(info);
00062 }
00063 return TRUE;
00064 }
00065
00066 CL_StreamSoundProvider *CL_Sound::get_microphone()
00067 {
00068 if (CL_Sound_DX::cur_card != NULL) return CL_Sound_DX::cur_card->get_microphone();
00069 return NULL;
00070 }
00071
00072 CL_StreamSoundProvider *CL_Sound::get_line_in()
00073 {
00074 if (CL_Sound_DX::cur_card != NULL) return CL_Sound_DX::cur_card->get_line_in();
00075 return NULL;
00076 }
00077
00078 void CL_Sound::select_card(CL_SoundCard *card)
00079 {
00080 CL_Sound_DX::cur_card = card;
00081 }
00082
00083 void CL_Sound::select_card(int card_no)
00084 {
00085 CL_Sound_DX::cur_card = CL_Sound::cards[card_no];
00086 }
00087
00088 CL_SoundCard *CL_Sound::get_current_card()
00089 {
00090 return CL_Sound_DX::cur_card;
00091 }