mirror of
				https://github.com/RaySollium99/picodrive.git
				synced 2025-10-28 05:48:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*******************************************************************
 | |
|  *
 | |
|  *	File:		Audio_mediaserver.h
 | |
|  *
 | |
|  *	Author:		Peter van Sebille (peter@yipton.net)
 | |
|  *
 | |
|  *  Modified/adapted for picodriveN by notaz, 2006
 | |
|  *
 | |
|  *  (c) Copyright 2006, notaz
 | |
|  *	(c) Copyright 2001, Peter van Sebille
 | |
|  *	All Rights Reserved
 | |
|  *
 | |
|  *******************************************************************/
 | |
| 
 | |
| #ifndef __AUDIO_MEDIASERVER_H
 | |
| #define __AUDIO_MEDIASERVER_H
 | |
| 
 | |
| #include <Mda\Common\Audio.h>
 | |
| #include <MdaAudioOutputStream.h>
 | |
| 
 | |
| #include "audio.h"
 | |
| #include "polledas.h"
 | |
| 
 | |
| const TInt KSoundBuffers = 4;
 | |
| const TInt KBlockTime = 1000000 / 5; // hardcoded: 5 updates/sec
 | |
| const TInt KMaxLag = 260000; // max sound lag, lower values increase chanse of underflow
 | |
| const TInt KMaxUnderflows = 50; // max underflows/API errors we are going allow in a row (to prevent lockups)
 | |
| 
 | |
| 
 | |
| class TGameAudioEventListener : public MMdaAudioOutputStreamCallback
 | |
| {
 | |
| public: // implements MMdaAudioOutputStreamCallback
 | |
| 	void MaoscOpenComplete(TInt aError);
 | |
| 	void MaoscBufferCopied(TInt aError, const TDesC8& );
 | |
| 	void MaoscPlayComplete(TInt aError);
 | |
| 
 | |
| 	TBool					iIsOpen;
 | |
| //	TBool					iHasCopied;
 | |
| 	TInt					iUnderflowed;
 | |
| };
 | |
| 
 | |
| 
 | |
| class CGameAudioMS : public IGameAudio // IGameAudio MUST be specified first!
 | |
| {
 | |
| public:	// implements IGameAudio
 | |
| 	TInt16 *NextFrameL();
 | |
| 	TInt16 *DupeFrameL(TInt &aUnderflowed);
 | |
| 	TInt16 *ResumeL();
 | |
| 	void Pause();
 | |
| 	void ChangeVolume(TInt aUp);
 | |
| 
 | |
| public:
 | |
| 	~CGameAudioMS();
 | |
| 	CGameAudioMS(TInt aRate, TBool aStereo, TInt aPcmFrames, TInt aBufferedFrames);
 | |
| 	void ConstructL();
 | |
| 	EXPORT_C static CGameAudioMS* NewL(TInt aRate, TBool aStereo, TInt aPcmFrames, TInt aBufferedFrames);
 | |
| 
 | |
| protected:
 | |
| 	void WriteBlockL();
 | |
| 	void UnderflowedL();
 | |
| 
 | |
| protected:
 | |
| 	void WaitForOpenToCompleteL();
 | |
| //	void WaitForCopyToCompleteL();
 | |
| 
 | |
| 	TInt					iRate;
 | |
| 	TBool					iStereo;
 | |
| 
 | |
| 	CMdaAudioOutputStream	*iMdaAudioOutputStream;
 | |
| 	TMdaAudioDataSettings	iMdaAudioDataSettings;
 | |
| 
 | |
| 	TGameAudioEventListener	iListener;
 | |
| 
 | |
| 	CPolledActiveScheduler  *iScheduler;
 | |
| 
 | |
| 	HBufC8*					iSoundBuffers[KSoundBuffers+1];
 | |
| 	TInt					iBufferedFrames;
 | |
| 	TInt16*					iCurrentPosition;
 | |
| 	TInt					iCurrentBuffer;
 | |
| 	TInt					iFrameCount;
 | |
| 	TInt					iPcmFrames;
 | |
| 	CMdaServer*				iServer;
 | |
| 
 | |
| 	TInt64					iTime;
 | |
| };
 | |
| 
 | |
| #endif			/* __AUDIO_MEDIASERVER_H */
 | 
