161 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			161 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | #include "portaudiocpp/StreamParameters.hxx"
 | ||
|  | 
 | ||
|  | #include <cstddef>
 | ||
|  | 
 | ||
|  | #include "portaudiocpp/Device.hxx"
 | ||
|  | 
 | ||
|  | namespace portaudio | ||
|  | { | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Default constructor; does nothing.
 | ||
|  |     //////
 | ||
|  |     StreamParameters::StreamParameters() | ||
|  |     { | ||
|  |     } | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Sets up the all parameters needed to open either a half-duplex or full-duplex Stream.
 | ||
|  |     ///
 | ||
|  |     /// @param inputParameters The parameters for the input direction of the to-be opened
 | ||
|  |     /// Stream or DirectionSpecificStreamParameters::null() for an output-only Stream.
 | ||
|  |     /// @param outputParameters The parameters for the output direction of the to-be opened
 | ||
|  |     /// Stream or DirectionSpecificStreamParameters::null() for an input-only Stream.
 | ||
|  |     /// @param sampleRate The to-be opened Stream's sample rate in Hz.
 | ||
|  |     /// @param framesPerBuffer The number of frames per buffer for a CallbackStream, or
 | ||
|  |     /// the preferred buffer granularity for a BlockingStream.
 | ||
|  |     /// @param flags The flags for the to-be opened Stream; default paNoFlag.
 | ||
|  |     //////
 | ||
|  |     StreamParameters::StreamParameters(const DirectionSpecificStreamParameters &inputParameters, | ||
|  |         const DirectionSpecificStreamParameters &outputParameters, double sampleRate, unsigned long framesPerBuffer, | ||
|  |         PaStreamFlags flags) : inputParameters_(inputParameters), outputParameters_(outputParameters), | ||
|  |         sampleRate_(sampleRate), framesPerBuffer_(framesPerBuffer), flags_(flags) | ||
|  |     { | ||
|  |     } | ||
|  | 
 | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Sets the requested sample rate. If this sample rate isn't supported by the hardware, the
 | ||
|  |     /// Stream will fail to open. The real-life sample rate used might differ slightly due to
 | ||
|  |     /// imperfections in the sound card hardware; use Stream::sampleRate() to retrieve the
 | ||
|  |     /// best known estimate for this value.
 | ||
|  |     //////
 | ||
|  |     void StreamParameters::setSampleRate(double sampleRate) | ||
|  |     { | ||
|  |         sampleRate_ = sampleRate; | ||
|  |     } | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Either the number of frames per buffer for a CallbackStream, or
 | ||
|  |     /// the preferred buffer granularity for a BlockingStream. See PortAudio
 | ||
|  |     /// documentation.
 | ||
|  |     //////
 | ||
|  |     void StreamParameters::setFramesPerBuffer(unsigned long framesPerBuffer) | ||
|  |     { | ||
|  |         framesPerBuffer_ = framesPerBuffer; | ||
|  |     } | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Sets the specified flag or does nothing when the flag is already set. Doesn't
 | ||
|  |     /// `unset' any previously existing flags (use clearFlags() for that).
 | ||
|  |     //////
 | ||
|  |     void StreamParameters::setFlag(PaStreamFlags flag) | ||
|  |     { | ||
|  |         flags_ |= flag; | ||
|  |     } | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Unsets the specified flag or does nothing if the flag isn't set. Doesn't affect
 | ||
|  |     /// any other flags.
 | ||
|  |     //////
 | ||
|  |     void StreamParameters::unsetFlag(PaStreamFlags flag) | ||
|  |     { | ||
|  |         flags_ &= ~flag; | ||
|  |     } | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Clears or `unsets' all set flags.
 | ||
|  |     //////
 | ||
|  |     void StreamParameters::clearFlags() | ||
|  |     { | ||
|  |         flags_ = paNoFlag; | ||
|  |     } | ||
|  | 
 | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |     void StreamParameters::setInputParameters(const DirectionSpecificStreamParameters ¶meters) | ||
|  |     { | ||
|  |         inputParameters_ = parameters; | ||
|  |     } | ||
|  | 
 | ||
|  |     void StreamParameters::setOutputParameters(const DirectionSpecificStreamParameters ¶meters) | ||
|  |     { | ||
|  |         outputParameters_ = parameters; | ||
|  |     } | ||
|  | 
 | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |     bool StreamParameters::isSupported() const | ||
|  |     { | ||
|  |         return (Pa_IsFormatSupported(inputParameters_.paStreamParameters(), | ||
|  |             outputParameters_.paStreamParameters(), sampleRate_) == paFormatIsSupported); | ||
|  |     } | ||
|  | 
 | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |     double StreamParameters::sampleRate() const | ||
|  |     { | ||
|  |         return sampleRate_; | ||
|  |     } | ||
|  | 
 | ||
|  |     unsigned long StreamParameters::framesPerBuffer() const | ||
|  |     { | ||
|  |         return framesPerBuffer_; | ||
|  |     } | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Returns all currently set flags as a binary combined
 | ||
|  |     /// integer value (PaStreamFlags). Use isFlagSet() to
 | ||
|  |     /// avoid dealing with the bitmasks.
 | ||
|  |     //////
 | ||
|  |     PaStreamFlags StreamParameters::flags() const | ||
|  |     { | ||
|  |         return flags_; | ||
|  |     } | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// Returns true if the specified flag is currently set
 | ||
|  |     /// or false if it isn't.
 | ||
|  |     //////
 | ||
|  |     bool StreamParameters::isFlagSet(PaStreamFlags flag) const | ||
|  |     { | ||
|  |         return ((flags_ & flag) != 0); | ||
|  |     } | ||
|  | 
 | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |     DirectionSpecificStreamParameters &StreamParameters::inputParameters() | ||
|  |     { | ||
|  |         return inputParameters_; | ||
|  |     } | ||
|  | 
 | ||
|  |     const DirectionSpecificStreamParameters &StreamParameters::inputParameters() const | ||
|  |     { | ||
|  |         return inputParameters_; | ||
|  |     } | ||
|  | 
 | ||
|  |     DirectionSpecificStreamParameters &StreamParameters::outputParameters() | ||
|  |     { | ||
|  |         return outputParameters_; | ||
|  |     } | ||
|  | 
 | ||
|  |     const DirectionSpecificStreamParameters &StreamParameters::outputParameters() const | ||
|  |     { | ||
|  |         return outputParameters_; | ||
|  |     } | ||
|  | 
 | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | } // namespace portaudio
 |