//----------------------------------------------------------------------------- // Name: CMusicManager::GetMotifFromStyle() // Desc: //----------------------------------------------------------------------------- HRESULT CMusicManager::GetMotifFromStyle( IDirectMusicSegment8** ppMotif8, TCHAR* strStyle, TCHAR* strMotif ) { HRESULT hr; IDirectMusicStyle8* pStyle = NULL; IDirectMusicSegment* pMotif = NULL; if( FAILED( hr = CreateStyleFromFile( &pStyle, strStyle ) ) ) return DXTRACE_ERR( TEXT("CreateStyleFromFile"), hr ); if( pStyle ) { // DMusic only takes wide strings WCHAR wstrMotif[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrMotif, strMotif ); hr = pStyle->GetMotif( wstrMotif, &pMotif ); SAFE_RELEASE( pStyle ); if( FAILED( hr ) ) return DXTRACE_ERR( TEXT("GetMotif"), hr ); pMotif->QueryInterface( IID_IDirectMusicSegment8, (LPVOID*) ppMotif8 ); } return S_OK; }
//----------------------------------------------------------------------------- // Name: CMusicManager::CreateScriptFromFile() // Desc: //----------------------------------------------------------------------------- HRESULT CMusicManager::CreateScriptFromFile( CMusicScript** ppScript, TCHAR* strFileName ) { HRESULT hr; IDirectMusicScript* pScript = NULL; // DMusic only takes wide strings WCHAR wstrFileName[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrFileName, strFileName ); if ( FAILED( hr = m_pLoader->LoadObjectFromFile( CLSID_DirectMusicScript, IID_IDirectMusicScript8, wstrFileName, (LPVOID*) &pScript ) ) ) return DXTRACE_ERR_NOMSGBOX( TEXT("LoadObjectFromFile"), hr ); if ( FAILED( hr = pScript->Init( m_pPerformance, NULL ) ) ) return DXTRACE_ERR( TEXT("Init"), hr ); *ppScript = new CMusicScript( m_pPerformance, m_pLoader, pScript ); if (!*ppScript) return E_OUTOFMEMORY; return hr; }
//----------------------------------------------------------------------------- // Name: CMusicScript::GetVariableNumber() // Desc: Gets the value of a variable in the script //----------------------------------------------------------------------------- HRESULT CMusicScript::GetVariableNumber( TCHAR* strVariable, LONG* plValue ) { // DMusic only takes wide strings WCHAR wstrVariable[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrVariable, strVariable ); return m_pScript->GetVariableNumber( wstrVariable, plValue, NULL ); }
//----------------------------------------------------------------------------- // Name: CMusicScript::Play() // Desc: Calls a routine in the script //----------------------------------------------------------------------------- HRESULT CMusicScript::CallRoutine( TCHAR* strRoutine ) { // DMusic only takes wide strings WCHAR wstrRoutine[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrRoutine, strRoutine ); return m_pScript->CallRoutine( wstrRoutine, NULL ); }
HRESULT CMusicScript::SetVariableNumber( TCHAR* strVariable, LONG lValue ) { WCHAR wstrVariable[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrVariable, strVariable ); return m_pScript->SetVariableNumber( wstrVariable, lValue, NULL ); }
//----------------------------------------------------------------------------- // Name: CMusicManager::CreateChordMapFromFile() // Desc: //----------------------------------------------------------------------------- HRESULT CMusicManager::CreateStyleFromFile( IDirectMusicStyle8** ppStyle, TCHAR* strFileName ) { // DMusic only takes wide strings WCHAR wstrFileName[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrFileName, strFileName ); return m_pLoader->LoadObjectFromFile( CLSID_DirectMusicStyle, IID_IDirectMusicStyle8, wstrFileName, (LPVOID*) ppStyle ); }
HRESULT CMusicManager::CreateChordMapFromFile( IDirectMusicChordMap8** ppChordMap, TCHAR* strFileName ) { WCHAR wstrFileName[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrFileName, strFileName ); return m_pLoader->LoadObjectFromFile( CLSID_DirectMusicChordMap, IID_IDirectMusicChordMap8, wstrFileName, (LPVOID*) ppChordMap ); }
//----------------------------------------------------------------------------- // Name: CMusicManager::SetSearchDirectory() // Desc: Sets the search directory. If not called, the current working // directory is used to load content. //----------------------------------------------------------------------------- HRESULT CMusicManager::SetSearchDirectory( const TCHAR* strMediaPath ) { if( NULL == m_pLoader ) return E_UNEXPECTED; // DMusic only takes wide strings WCHAR wstrMediaPath[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrMediaPath, strMediaPath ); return m_pLoader->SetSearchDirectory( GUID_DirectMusicAllTypes, wstrMediaPath, FALSE ); }
//----------------------------------------------------------------------------- // Name: CMusicManager::CreateSegmentFromFile() // Desc: //----------------------------------------------------------------------------- HRESULT CMusicManager::CreateSegmentFromFile( CMusicSegment** ppSegment, TCHAR* strFileName, BOOL bDownloadNow, BOOL bIsMidiFile ) { HRESULT hr; IDirectMusicSegment8* pSegment = NULL; // DMusic only takes wide strings WCHAR wstrFileName[MAX_PATH]; DXUtil_ConvertGenericStringToWide( wstrFileName, strFileName ); if ( FAILED( hr = m_pLoader->LoadObjectFromFile( CLSID_DirectMusicSegment, IID_IDirectMusicSegment8, wstrFileName, (LPVOID*) &pSegment ) ) ) {MessageBox(NULL,"error",NULL,MB_OK); if( hr == DMUS_E_LOADER_FAILEDOPEN ) return hr; return DXTRACE_ERR( TEXT("LoadObjectFromFile"), hr ); } *ppSegment = new CMusicSegment( m_pPerformance, m_pLoader, pSegment ); if (!*ppSegment) return E_OUTOFMEMORY; if( bIsMidiFile ) { if( FAILED( hr = pSegment->SetParam( GUID_StandardMIDIFile, 0xFFFFFFFF, 0, 0, NULL ) ) ) return DXTRACE_ERR( TEXT("SetParam"), hr ); } if( bDownloadNow ) { if( FAILED( hr = (*ppSegment)->Download() ) ) return DXTRACE_ERR( TEXT("Download"), hr ); } return S_OK; }
//----------------------------------------------------------------------------- // Name: // Desc: //----------------------------------------------------------------------------- HRESULT CDPlay8Client::StartSessionEnum( const TCHAR* ipaddress ) { if( NULL == m_pDPlay ) return E_FAIL; DPN_APPLICATION_DESC dpnAppDesc; IDirectPlay8Address* pDP8AddressHost = NULL; IDirectPlay8Address* pDP8AddressLocal = NULL; WCHAR* wszHostName = NULL; HRESULT hr; DWORD dwPort; m_dwNumSessions = 0; if( m_dpnhEnum != NULL ) { // If an enumeration is already running, cancel // it and start a new one. Ignore any errors from CancelAsyncOperation m_pDPlay->CancelAsyncOperation( m_dpnhEnum, 0 ); m_dpnhEnum = NULL; } // Create the local device address object if( FAILED( hr = CoCreateInstance( CLSID_DirectPlay8Address, NULL, CLSCTX_ALL, IID_IDirectPlay8Address, (LPVOID*) &pDP8AddressLocal ) ) ) { DXTRACE_ERR( TEXT("CoCreateInstance"), hr ); goto LCleanup; } // Set IP service provider if( FAILED( hr = pDP8AddressLocal->SetSP( &CLSID_DP8SP_TCPIP ) ) ) { DXTRACE_ERR( TEXT("SetSP"), hr ); goto LCleanup; } // Create the remote host address object if( FAILED( hr = CoCreateInstance( CLSID_DirectPlay8Address, NULL, CLSCTX_ALL, IID_IDirectPlay8Address, (LPVOID*) &pDP8AddressHost ) ) ) { DXTRACE_ERR( TEXT("CoCreateInstance"), hr ); goto LCleanup; } // Set IP service provider if( FAILED( hr = pDP8AddressHost->SetSP( &CLSID_DP8SP_TCPIP ) ) ) { DXTRACE_ERR( TEXT("SetSP"), hr ); goto LCleanup; } // Maze uses a fixed port, so add it to the host address dwPort = DPMAZESERVER_PORT; hr = pDP8AddressHost->AddComponent( DPNA_KEY_PORT, &dwPort, sizeof(dwPort), DPNA_DATATYPE_DWORD ); if( FAILED(hr) ) { DXTRACE_ERR( TEXT("AddComponent"), hr ); goto LCleanup; } // Set the remote host name (if provided) if( ipaddress != NULL && ipaddress[0] != 0 ) { wszHostName = new WCHAR[_tcslen(ipaddress)+1]; DXUtil_ConvertGenericStringToWide( wszHostName, ipaddress ); hr = pDP8AddressHost->AddComponent( DPNA_KEY_HOSTNAME, wszHostName, (wcslen(wszHostName)+1)*sizeof(WCHAR), DPNA_DATATYPE_STRING ); if( FAILED(hr) ) { DXTRACE_ERR( TEXT("AddComponent"), hr ); goto LCleanup; } } ZeroMemory( &dpnAppDesc, sizeof( DPN_APPLICATION_DESC ) ); dpnAppDesc.dwSize = sizeof( DPN_APPLICATION_DESC ); dpnAppDesc.guidApplication = StressMazeAppGUID; // Enumerate all StressMazeApp hosts running on IP service providers hr = m_pDPlay->EnumHosts( &dpnAppDesc, pDP8AddressHost, pDP8AddressLocal, NULL, 0, INFINITE, 0, INFINITE, NULL, &m_dpnhEnum, 0 ); if( hr != DPNERR_PENDING && FAILED(hr) ) { DXTRACE_ERR_NOMSGBOX( TEXT("EnumHosts"), hr ); goto LCleanup; } LCleanup: SAFE_RELEASE( pDP8AddressHost); SAFE_RELEASE( pDP8AddressLocal ); SAFE_DELETE( wszHostName ); return hr; }