Здравствуйте, asdfgh, Вы писали:
A>Здравствуйте, cpp, Вы писали:
cpp>>[skip]
cpp>>Сколько можно! Собери все цепочку аудио стрима и рули ей как хочешь.
A>Да, конечно, я так бы и сделал, Просто неприходилось раньше работать со звуком. А нужно от звука немного. А есть где-нибуть образцы "всей цепочки аудио стрима" с простой функциональностью? Я бы глянул. (это не важно, просто любопытство
)
Примерно так

(дальше писать лень):
//some.h
///////////////////////////// DirectShow interfaces //////////////////////////
//GraphBuilder interface
IGraphBuilder *pGraphBuilder;
//MediaControl interface
IMediaControl *pMediaControl;
//MediaEventEx interface
IMediaEventEx *pMediaEventEx;
//BasicAudio interface
IBasicAudio *pBasicAudio;
//MediaSeeking interface
IMediaSeeking *pMediaSeeking;
//MediaPosition interface
IMediaPosition *pMediaPosition;
//some.cpp
//-------------------------------------------------------------------------------------
// Init necessary interfaces
//-------------------------------------------------------------------------------------
HRESULT CDemoAppDlg::InitDirectShow()
{
HRESULT hr = S_OK;
JIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pGraphBuilder));
JIF(pGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&pMediaControl));
JIF(pGraphBuilder->QueryInterface(IID_IMediaSeeking, (void **)&pMediaSeeking));
JIF(pGraphBuilder->QueryInterface(IID_IBasicAudio, (void **)&pBasicAudio));
JIF(pGraphBuilder->QueryInterface(IID_IMediaEventEx, (void **)&pMediaEventEx));
return S_OK;
CLEANUP:
FreeDirectShow();
return hr;
}
//-------------------------------------------------------------------------------------
// Free all interfaces
//-------------------------------------------------------------------------------------
HRESULT CDemoAppDlg::FreeDirectShow()
{
HRESULT hr = S_OK;
StopSeekTimer();
StopMedia();
// Disable event callbacks
if (pMediaEventEx)
{
hr = pMediaEventEx->SetNotifyWindow((OAHWND)NULL, 0, 0);
}
// Release all other dshow interfaces
SAFE_RELEASE(pMediaControl);
SAFE_RELEASE(pMediaSeeking);
SAFE_RELEASE(pBasicAudio);
SAFE_RELEASE(pMediaEventEx);
SAFE_RELEASE(pGraphBuilder);
return hr;
}
//-------------------------------------------------------------------------------------
// Prepares media for rendering
//-------------------------------------------------------------------------------------
HRESULT CDemoAppDlg::PrepareMedia(LPTSTR lpszMovie)
{
USES_CONVERSION;
HRESULT hr = S_OK;
// Allow DirectShow to create the FilterGraph for this media file
LIF(pGraphBuilder->RenderFile(T2W(lpszMovie), NULL));
// Remember play state
m_StateFlag = Stopped;
return hr;
}
//-------------------------------------------------------------------------------------
// Play | Pause media
//-------------------------------------------------------------------------------------
void CDemoAppDlg::OnPlay()
{
HRESULT hr = S_OK;
// if current state isn't Running then play the movie
if (m_StateFlag != Running)
{
hr = PlayMedia();
}
else // else pause it
hr = PauseMedia();
}
}
//-------------------------------------------------------------------------------------
// Inaternal
//-------------------------------------------------------------------------------------
HRESULT CDemoAppDlg::PlayMedia()
{
HRESULT hr = S_OK;
if (!g_wTimerID)
{
StartSeekTimer();
}
// some checks
if (!pMediaControl || m_StateFlag == Running)
{
return hr;
}
// Start playback
LIF(pMediaControl->Run());
// Remember play state
m_StateFlag = Running;
SetEnableStates();
// next click for play
m_PlayBtn.SetWindowText("Pause");
return hr;
}
//-------------------------------------------------------------------------------------
// Internal
//-------------------------------------------------------------------------------------
HRESULT CDemoAppDlg::PauseMedia()
{
HRESULT hr = S_OK;
if (!g_wTimerID)
{
StartSeekTimer();
}
// some checks
if (!pMediaControl || m_StateFlag == Paused)
{
return hr;
}
LIF(pMediaControl->Pause());
// Remember play state
m_StateFlag = Paused;
SetEnableStates();
// next click for play
m_PlayBtn.SetWindowText("Play");
return hr;
}
and so on...