-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
231 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
#include "stdafx.h" | ||
#include "bassinfomanager.h" | ||
// actual class definition here | ||
|
||
CBASSInfoManager::CBASSInfoManager(void) | ||
{ | ||
} | ||
|
||
CBASSInfoManager::~CBASSInfoManager(void) | ||
{ | ||
} | ||
|
||
void CBASSInfoManager::Destroy(void) | ||
{ | ||
delete this; | ||
} | ||
|
||
unsigned long CBASSInfoManager::GetNumExtensions(void) | ||
{ | ||
|
||
return 0; | ||
} | ||
|
||
LPTSTR CBASSInfoManager::SupportedExtension(unsigned long ulExtentionNum) | ||
{ | ||
/* | ||
static LPTSTR exts[] = | ||
{ | ||
TEXT(".mp3") | ||
}; | ||
return exts[ulExtentionNum]; | ||
*/ | ||
|
||
return NULL; | ||
} | ||
|
||
bool CBASSInfoManager::CanHandle(LPTSTR szSource) | ||
{ | ||
for (unsigned int x = 0; x < GetNumExtensions(); x++) | ||
{ | ||
if (!StrCmpI(SupportedExtension(x), PathFindExtension(szSource))) | ||
{ | ||
return(true); | ||
} | ||
} | ||
if (StrCmpN(szSource, TEXT("MICINPUT"), 7) == 0) | ||
{ | ||
if (StrCmpN(szSource, TEXT("MICINPUT:GetDevices"), 18) == 0) | ||
{ | ||
m_DeviceArray.RemoveAll(); | ||
|
||
BASS_DEVICEINFO info; | ||
for (int device = 0; BASS_RecordGetDeviceInfo(device, &info); device++) | ||
{ | ||
if (info.flags & BASS_DEVICE_ENABLED) // device is enabled | ||
{ | ||
InfoDevice CurrentDevice = { 0 }; | ||
TCHAR devicename[128] = {0}; | ||
MultiByteToWideChar(CP_UTF8, 0, info.name, (int)strlen(info.name), CurrentDevice.devicename, 128); | ||
|
||
CurrentDevice.channels = 2; | ||
//CurrentDevice.samplerate = 48000; | ||
|
||
switch (info.flags & BASS_DEVICE_TYPE_MASK) | ||
{ | ||
case BASS_DEVICE_TYPE_DIGITAL: //An audio endpoint device that connects to an audio adapter through a connector for a digital interface of unknown type. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_DIGITAL"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_DISPLAYPORT: //An audio endpoint device that connects to an audio adapter through a DisplayPort connector. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_DISPLAYPORT"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_HANDSET: //The part of a telephone that is held in the hand and that contains a speaker and a microphone for two - way communication. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_HANDSET"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_HDMI: //An audio endpoint device that connects to an audio adapter through a High - Definition Multimedia Interface(HDMI) connector. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_HDMI"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_HEADPHONES: //A set of headphones. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_HEADPHONES"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_HEADSET: //An earphone or a pair of earphones with an attached mouthpiece for two - way communication. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_HEADSET"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_LINE: //An audio endpoint device that sends a line - level analog signal to a line - input jack on an audio adapter or that receives a line - level analog signal from a line - output jack on the adapter. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_LINE"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_MICROPHONE: //A microphone. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_MICROPHONE"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_NETWORK: //An audio endpoint device that the user accesses remotely through a network. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_NETWORK"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_SPDIF: //An audio endpoint device that connects to an audio adapter through a Sony / Philips Digital Interface(S / PDIF) connector. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_SPDIF"); | ||
} | ||
break; | ||
case BASS_DEVICE_TYPE_SPEAKERS: //A set of speakers. | ||
{ | ||
StringCchCopy(CurrentDevice.type, 256, L"BASS_DEVICE_TYPE_SPEAKERS"); | ||
} | ||
break; | ||
} | ||
|
||
BASS_RecordInit(device); | ||
BASS_RECORDINFO RecordInfo = { 0 }; | ||
BASS_RecordGetInfo(&RecordInfo); | ||
CurrentDevice.samplerate = RecordInfo.freq; | ||
int inputs = RecordInfo.inputs; | ||
DWORD format = RecordInfo.formats; | ||
BASS_RecordFree(); | ||
|
||
m_DeviceArray.AddTail(CurrentDevice); | ||
} | ||
|
||
BASS_RecordFree(); | ||
} | ||
if (m_DeviceArray.GetCount()) | ||
return true; | ||
} | ||
else | ||
{ | ||
m_ActiveDevice = UNKNOWN_DEVICE; | ||
swscanf_s(szSource, TEXT("MICINPUT:%d"), &m_ActiveDevice); | ||
if (m_ActiveDevice != UNKNOWN_DEVICE && m_ActiveDevice >= 0 && m_ActiveDevice < m_DeviceArray.GetCount()) | ||
{ | ||
return true; | ||
} | ||
} | ||
} | ||
|
||
|
||
return false; | ||
} | ||
|
||
bool CBASSInfoManager::GetInfo(LibraryEntry * libEnt) | ||
{ | ||
if (m_ActiveDevice != UNKNOWN_DEVICE && m_ActiveDevice >= 0 && m_ActiveDevice < m_DeviceArray.GetCount()) | ||
{ | ||
libEnt->ulBitRate = BITRATE_UNKNOWN; | ||
libEnt->ulChannels = m_DeviceArray[m_ActiveDevice].channels; //2 | ||
libEnt->ulSampleRate = m_DeviceArray[m_ActiveDevice].samplerate; //48000 | ||
libEnt->ulBitsPerSample = BITDEPTH_UNDEFINABLE; | ||
libEnt->ulPlaybackTime = LENGTH_STREAM; | ||
|
||
StringCchCopy(libEnt->szTitle, 128, m_DeviceArray[m_ActiveDevice].devicename); | ||
StringCchCopy(libEnt->szComment, 128, m_DeviceArray[m_ActiveDevice].type); | ||
|
||
return true; | ||
} | ||
return false; | ||
} | ||
|
||
bool CBASSInfoManager::SetInfo(LibraryEntry * libEnt) | ||
{ | ||
return true; | ||
} | ||
|
||
unsigned long CBASSInfoManager::GetNumberOfAlbumArts(void) | ||
{ | ||
return 0; | ||
} | ||
|
||
bool CBASSInfoManager::GetAlbumArt(unsigned long ulImageIndex, | ||
LPVOID* pImageData, | ||
unsigned long* ulImageDataSize, | ||
LPTSTR szMimeType, | ||
unsigned long* ulArtType) | ||
{ | ||
return false; | ||
} | ||
|
||
bool CBASSInfoManager::FreeAlbumArt(LPVOID pImageData) | ||
{ | ||
return false; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#pragma once | ||
#include "iinfomanager.h" | ||
#include "bass.h" | ||
#include "array.h" | ||
|
||
class CBASSInfoManager : | ||
public IInfoManager | ||
{ | ||
protected: | ||
|
||
Array<InfoDevice, 3> m_DeviceArray; | ||
unsigned long m_ActiveDevice; | ||
|
||
public: | ||
CBASSInfoManager(void); | ||
~CBASSInfoManager(void); | ||
|
||
public: | ||
void Destroy(void); | ||
|
||
unsigned long GetNumExtensions(void); | ||
LPTSTR SupportedExtension(unsigned long ulExtentionNum); | ||
|
||
bool CanHandle(LPTSTR szSource); | ||
bool GetInfo(LibraryEntry * libEnt); | ||
bool SetInfo(LibraryEntry * libEnt); | ||
|
||
unsigned long GetNumberOfAlbumArts(void); | ||
bool GetAlbumArt(unsigned long ulImageIndex, | ||
LPVOID * pImageData, | ||
unsigned long * ulImageDataSize, | ||
LPTSTR szMimeType, | ||
unsigned long * ulArtType); | ||
|
||
bool FreeAlbumArt(LPVOID pImageData); | ||
}; |