#include #include "All.h" #include "WAVInfoDialog.h" #include "WAVInputSource.h" #include "CharacterHelper.h" /*************************************************************************************** The dialog component ID's ***************************************************************************************/ #define FILE_NAME_STATIC 1000 #define FILE_SIZE_STATIC 2000 #define TRACK_LENGTH_STATIC 2001 #define AUDIO_BYTES_STATIC 2002 #define HEADER_BYTES_STATIC 2003 #define TERMINATING_BYTES_STATIC 2004 #define SAMPLE_RATE_STATIC 3000 #define CHANNELS_STATIC 3001 #define BITS_PER_SAMPLE_STATIC 3002 #define OK_BUTTON 4000 /*************************************************************************************** Global pointer to this instance ***************************************************************************************/ CWAVInfoDialog * g_pWAVInfoDialog; /*************************************************************************************** Construction / destruction ***************************************************************************************/ CWAVInfoDialog::CWAVInfoDialog() { g_pWAVInfoDialog = NULL; } CWAVInfoDialog::~CWAVInfoDialog() { } /*************************************************************************************** Display the file info dialog ***************************************************************************************/ long CWAVInfoDialog::ShowWAVInfoDialog(const str_utf16 * pFilename, HINSTANCE hInstance, const str_utf16 * lpTemplateName, HWND hWndParent) { //only allow one instance at a time if (g_pWAVInfoDialog != NULL) { return -1; } _tcscpy(m_cFileName, pFilename); g_pWAVInfoDialog = this; DialogBoxParam(hInstance, lpTemplateName, hWndParent, (DLGPROC) DialogProc, 0); g_pWAVInfoDialog = NULL; return 0; } /*************************************************************************************** Initialize the dialog ***************************************************************************************/ long CWAVInfoDialog::InitDialog(HWND hDlg) { // analyze the WAV WAVEFORMATEX wfeWAV; int nTotalBlocks = 0; int nHeaderBytes = 0; int nTerminatingBytes = 0; int nErrorCode = 0; CWAVInputSource WAVInfo(m_cFileName, &wfeWAV, &nTotalBlocks, &nHeaderBytes, &nTerminatingBytes, &nErrorCode); if (nErrorCode != 0) return nErrorCode; int nAudioBytes = nTotalBlocks * wfeWAV.nBlockAlign; // set info TCHAR cTemp[1024] = { 0 }; SetDlgItemText(hDlg, FILE_NAME_STATIC, m_cFileName); _stprintf(cTemp, _T("Sample Rate: %d"), wfeWAV.nSamplesPerSec); SetDlgItemText(hDlg, SAMPLE_RATE_STATIC, cTemp); _stprintf(cTemp, _T("Channels: %d"), wfeWAV.nChannels); SetDlgItemText(hDlg, CHANNELS_STATIC, cTemp); _stprintf(cTemp, _T("Bits Per Sample: %d"), int(wfeWAV.wBitsPerSample)); SetDlgItemText(hDlg, BITS_PER_SAMPLE_STATIC, cTemp); int nSeconds = nAudioBytes / wfeWAV.nAvgBytesPerSec; int nMinutes = nSeconds / 60; nSeconds = nSeconds % 60; int nHours = nMinutes / 60; nMinutes = nMinutes % 60; if (nHours > 0) _stprintf(cTemp, _T("Length: %d:%02d:%02d"), nHours, nMinutes, nSeconds); else if (nMinutes > 0) _stprintf(cTemp, _T("Length: %d:%02d"), nMinutes, nSeconds); else _stprintf(cTemp, _T("Length: 0:%02d"), nSeconds); SetDlgItemText(hDlg, TRACK_LENGTH_STATIC, cTemp); _stprintf(cTemp, _T("Audio Bytes: %d"), nAudioBytes); SetDlgItemText(hDlg, AUDIO_BYTES_STATIC, cTemp); _stprintf(cTemp, _T("Header Bytes: %d"), nHeaderBytes); SetDlgItemText(hDlg, HEADER_BYTES_STATIC, cTemp); _stprintf(cTemp, _T("Terminating Bytes: %d"), nTerminatingBytes); SetDlgItemText(hDlg, TERMINATING_BYTES_STATIC, cTemp); _stprintf(cTemp, _T("File Size: %.2f MB"), float(nAudioBytes + nHeaderBytes + nTerminatingBytes) / float(1024 * 1024)); SetDlgItemText(hDlg, FILE_SIZE_STATIC, cTemp); return 0; } /*************************************************************************************** The dialog procedure ***************************************************************************************/ LRESULT CALLBACK CWAVInfoDialog::DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { int wmID, wmEvent; long RetVal; switch (message) { case WM_INITDIALOG: //fill in the info on initialization RetVal = g_pWAVInfoDialog->InitDialog(hDlg); return TRUE; break; case WM_COMMAND: wmID = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmID) { case IDCANCEL: //traps the [esc] key EndDialog(hDlg, 0); return TRUE; break; case OK_BUTTON: EndDialog(hDlg, 0); return TRUE; break; } break; case WM_CLOSE: EndDialog(hDlg, 0); return TRUE; break; } return FALSE; }