⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soundplayer.cxx

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 CXX
字号:
//// (c) Yuri Kiryanov, openh323@kiryanov.com// for www.Openh323.org by Equivalence//#include "SoundPlayer.h"#include <stdio.h>#include <string.h>//#define EXT_DEBUG// PRawBufferconst uint32 PSoundPlayer::g_byteOrder = (B_HOST_IS_BENDIAN) ? B_MEDIA_BIG_ENDIAN : B_MEDIA_LITTLE_ENDIAN;const gs_audio_format PSoundPlayer::g_defaultFmt =  { 44100, 2, gs_audio_format::B_GS_S16, g_byteOrder, 1024 };// PSoundPlayerPSoundPlayer::PSoundPlayer(const char* name, const gs_audio_format* format, int32 bufSize) :	BStreamingGameSound( 		format->frame_rate * 0.2, // 20 ms		format ),	mFmt(*format),	mFIFO( mFmt.buffer_size, 1, 3, B_ANY_ADDRESS, 0, name ) // 3 buffers{ 	SetParameters(mFmt.frame_rate * 0.2, &mFmt, 2);}PSoundPlayer::~PSoundPlayer() { 	status_t status;	mFIFO.CopyNextBufferIn(&status, 0, B_INFINITE_TIMEOUT, true);}bool PSoundPlayer::StartPlayer(){	mFIFO.Reset();	return (BStreamingGameSound::StartPlaying() == B_OK);}bool PSoundPlayer::StopPlayer(){	status_t status = BStreamingGameSound::StopPlaying();	mFIFO.Reset();	return (status == B_OK);}bool PSoundPlayer::Play(const void * buf, size_t size){	status_t err = mFIFO.CopyNextBufferIn(buf, size, B_INFINITE_TIMEOUT, false);	if (err < (int32)size) {		fprintf(stderr, "Error while PSoundPlayer::Play: %s; bailing\n", strerror(err));		fprintf(stderr, "\tCopyNextBufferIn(%p, %ld, B_INFINITE_TIMEOUT, false) failed with %ld.\n",			buf, size, err);		return false;	}	return true;}void PSoundPlayer::FillBuffer(void * inBuffer, size_t inByteCount){	status_t err = mFIFO.CopyNextBlockOut(inBuffer, inByteCount, B_INFINITE_TIMEOUT);	if (err < (int32) inByteCount ) {		fprintf(stderr, "Error while PSoundPlayer::FillBuffer: %s; bailing\n", strerror(err));		fprintf(stderr, "\tCopyNextBlockOut(%p, %ld, B_INFINITE_TIMEOUT) failed with %ld.\n",			inBuffer, inByteCount, err);	}}void PSoundPlayer::SetFormat(unsigned numChannels,                  unsigned sampleRate,                  unsigned bitsPerSample,				  unsigned bufSize ){	bool fWasPlaying = IsPlaying();	StopPlaying();	mFmt.frame_rate = 1.0 * sampleRate; 	mFmt.channel_count = numChannels; 	mFmt.format = FORMATFROMBITSPERSAMPLE(bitsPerSample), 	mFmt.byte_order = g_byteOrder;		mFmt.buffer_size = bufSize;	status_t err = SetParameters(mFmt.frame_rate * 0.2, &mFmt, 2);	if (err != B_OK ) {		fprintf(stderr, "Error while PSoundPlayer::SetFormat: %s. Channels: %d, rate: %d, bits: %d, bufsize: %d.\n", 			strerror(err), numChannels, sampleRate, bitsPerSample, bufSize );	}	if( fWasPlaying )		StartPlaying();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -