📄 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 + -