47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
						|
// This file is part of the "irrKlang" library.
 | 
						|
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
						|
 | 
						|
#ifndef __I_IRRKLANG_SOUND_MIXED_OUTPUT_RECEIVER_H_INCLUDED__
 | 
						|
#define __I_IRRKLANG_SOUND_MIXED_OUTPUT_RECEIVER_H_INCLUDED__
 | 
						|
 | 
						|
#include "ik_IRefCounted.h"
 | 
						|
#include "ik_SAudioStreamFormat.h"
 | 
						|
 | 
						|
 | 
						|
namespace irrklang
 | 
						|
{
 | 
						|
 | 
						|
 | 
						|
//! Interface to be implemented by the user, which recieves the mixed output when it it played by the sound engine.
 | 
						|
/** This can be used to store the sound output as .wav file or for creating a Oscillograph or similar. 
 | 
						|
 Simply implement your own class derived from ISoundMixedOutputReceiver and use ISoundEngine::setMixedDataOutputReceiver
 | 
						|
 to let the audio driver know about it. */
 | 
						|
class ISoundMixedOutputReceiver
 | 
						|
{
 | 
						|
public:
 | 
						|
    
 | 
						|
	//! destructor
 | 
						|
	virtual ~ISoundMixedOutputReceiver() {};
 | 
						|
 | 
						|
	//! Called when a chunk of sound has been mixed and is about to be played. 
 | 
						|
	/** Note: This is called from the playing thread of the sound library, so you need to 
 | 
						|
	make everything you are doing in this method thread safe. Additionally, it would
 | 
						|
	be a good idea to do nothing complicated in your implementation and return as fast as possible,
 | 
						|
	otherwise sound output may be stuttering.
 | 
						|
	\param data representing the sound frames which just have been mixed. Sound data always
 | 
						|
	consists of two interleaved sound channels at 16bit per frame. 
 | 
						|
	 \param byteCount Amount of bytes of the data 
 | 
						|
	 \param playbackrate The playback rate at samples per second (usually something like 44000). 
 | 
						|
	 This value will not change and always be the same for an instance of an ISoundEngine. */
 | 
						|
	virtual void OnAudioDataReady(const void* data, int byteCount, int playbackrate) = 0;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
} // end namespace irrklang
 | 
						|
 | 
						|
 | 
						|
#endif
 | 
						|
 |