?? audiosamplemanager.cxx
字號:
// AudioSampleManager.cpp: implementation of the AudioSampleManager class.
//
//////////////////////////////////////////////////////////////////////
#include "AudioSampleManager.h"
#include "AudioSample.h"
#ifndef WIN32
#include "linTypes.h"
#endif
using namespace std;
AudioSampleManager * AudioSampleManager::instance = NULL;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
AudioSampleManager *
AudioSampleManager::GetInstance()
{
if (!instance)
{
instance = new AudioSampleManager();
}
return instance;
}
AudioSampleManager::AudioSampleManager()
{
#ifdef WIN32
InitializeCriticalSection(&audioSamplesMutex);
#endif
}
AudioSampleManager::~AudioSampleManager()
{
EnterCriticalSection(&audioSamplesMutex);
while (audioSamples.size() > 0)
{
AudioSample *audioSample = audioSamples.front();
audioSamples.pop_front();
delete audioSample;
}
LeaveCriticalSection(&audioSamplesMutex);
DeleteCriticalSection(&audioSamplesMutex);
delete instance;
}
int
AudioSampleManager::GetAudioSample(AudioSample **ppAudioSample)
{
EnterCriticalSection(&audioSamplesMutex);
if (audioSamples.size() > 0)
{
*ppAudioSample = audioSamples.front();
audioSamples.pop_front();
LeaveCriticalSection(&audioSamplesMutex);
}
else
{
LeaveCriticalSection(&audioSamplesMutex);
*ppAudioSample = new AudioSample(this);
}
(*ppAudioSample)->refCount = 1;
(*ppAudioSample)->SetDataSize(0);
(*ppAudioSample)->SetSilenceDuration(0);
return 0;
}
int
AudioSampleManager::AudioSampleReleased(AudioSample *audioSample)
{
audioSample->refCount = 0;
EnterCriticalSection(&audioSamplesMutex);
audioSamples.push_back(audioSample);
LeaveCriticalSection(&audioSamplesMutex);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -