 165b814f5d
			
		
	
	
		165b814f5d
		
	
	
	
	
		
			
			this is necessary in order to get Furnace to build using CMake 4.0. you should do: git submodule deinit extern/portaudio
		
			
				
	
	
		
			164 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "portaudiocpp/DirectionSpecificStreamParameters.hxx"
 | |
| 
 | |
| #include "portaudiocpp/Device.hxx"
 | |
| 
 | |
| namespace portaudio
 | |
| {
 | |
| 
 | |
|     // -----------------------------------------------------------------------------------
 | |
| 
 | |
|     //////
 | |
|     /// Returns a `nil' DirectionSpecificStreamParameters object. This can be used to
 | |
|     /// specify that one direction of a Stream is not required (i.e. when creating
 | |
|     /// a half-duplex Stream). All fields of the null DirectionSpecificStreamParameters
 | |
|     /// object are invalid except for the device and the number of channel, which are set
 | |
|     /// to paNoDevice and 0 respectively.
 | |
|     //////
 | |
|     DirectionSpecificStreamParameters DirectionSpecificStreamParameters::null()
 | |
|     {
 | |
|         DirectionSpecificStreamParameters tmp;
 | |
|         tmp.paStreamParameters_.device = paNoDevice;
 | |
|         tmp.paStreamParameters_.channelCount = 0;
 | |
|         return tmp;
 | |
|     }
 | |
| 
 | |
|     // -----------------------------------------------------------------------------------
 | |
| 
 | |
|     //////
 | |
|     /// Default constructor -- all parameters will be uninitialized.
 | |
|     //////
 | |
|     DirectionSpecificStreamParameters::DirectionSpecificStreamParameters()
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     //////
 | |
|     /// Constructor which sets all required fields.
 | |
|     //////
 | |
|     DirectionSpecificStreamParameters::DirectionSpecificStreamParameters(const Device &device, int numChannels,
 | |
|         SampleDataFormat format, bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo)
 | |
|     {
 | |
|         setDevice(device);
 | |
|         setNumChannels(numChannels);
 | |
|         setSampleFormat(format, interleaved);
 | |
|         setSuggestedLatency(suggestedLatency);
 | |
|         setHostApiSpecificStreamInfo(hostApiSpecificStreamInfo);
 | |
|     }
 | |
| 
 | |
|     // -----------------------------------------------------------------------------------
 | |
| 
 | |
|     void DirectionSpecificStreamParameters::setDevice(const Device &device)
 | |
|     {
 | |
|         paStreamParameters_.device = device.index();
 | |
|     }
 | |
| 
 | |
|     void DirectionSpecificStreamParameters::setNumChannels(int numChannels)
 | |
|     {
 | |
|         paStreamParameters_.channelCount = numChannels;
 | |
|     }
 | |
| 
 | |
|     void DirectionSpecificStreamParameters::setSampleFormat(SampleDataFormat format, bool interleaved)
 | |
|     {
 | |
|         paStreamParameters_.sampleFormat = static_cast<PaSampleFormat>(format);
 | |
| 
 | |
|         if (!interleaved)
 | |
|             paStreamParameters_.sampleFormat |= paNonInterleaved;
 | |
|     }
 | |
| 
 | |
|     void DirectionSpecificStreamParameters::setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved)
 | |
|     {
 | |
|         paStreamParameters_.sampleFormat = format;
 | |
| 
 | |
|         paStreamParameters_.sampleFormat |= paCustomFormat;
 | |
| 
 | |
|         if (!interleaved)
 | |
|             paStreamParameters_.sampleFormat |= paNonInterleaved;
 | |
|     }
 | |
| 
 | |
|     void DirectionSpecificStreamParameters::setSuggestedLatency(PaTime latency)
 | |
|     {
 | |
|         paStreamParameters_.suggestedLatency = latency;
 | |
|     }
 | |
| 
 | |
|     void DirectionSpecificStreamParameters::setHostApiSpecificStreamInfo(void *streamInfo)
 | |
|     {
 | |
|         paStreamParameters_.hostApiSpecificStreamInfo = streamInfo;
 | |
|     }
 | |
| 
 | |
|     // -----------------------------------------------------------------------------------
 | |
| 
 | |
|     PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters()
 | |
|     {
 | |
|         if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice)
 | |
|             return &paStreamParameters_;
 | |
|         else
 | |
|             return NULL;
 | |
|     }
 | |
| 
 | |
|     const PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters() const
 | |
|     {
 | |
|         if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice)
 | |
|             return &paStreamParameters_;
 | |
|         else
 | |
|             return NULL;
 | |
|     }
 | |
| 
 | |
|     Device &DirectionSpecificStreamParameters::device() const
 | |
|     {
 | |
|         return System::instance().deviceByIndex(paStreamParameters_.device);
 | |
|     }
 | |
| 
 | |
|     int DirectionSpecificStreamParameters::numChannels() const
 | |
|     {
 | |
|         return paStreamParameters_.channelCount;
 | |
|     }
 | |
| 
 | |
|     //////
 | |
|     /// Returns the (non host api-specific) sample format, without including
 | |
|     /// the paNonInterleaved flag. If the sample format is host api-spefific,
 | |
|     /// INVALID_FORMAT (0) will be returned.
 | |
|     //////
 | |
|     SampleDataFormat DirectionSpecificStreamParameters::sampleFormat() const
 | |
|     {
 | |
|         if (isSampleFormatHostApiSpecific())
 | |
|             return INVALID_FORMAT;
 | |
|         else
 | |
|             return static_cast<SampleDataFormat>(paStreamParameters_.sampleFormat & ~paNonInterleaved);
 | |
|     }
 | |
| 
 | |
|     bool DirectionSpecificStreamParameters::isSampleFormatInterleaved() const
 | |
|     {
 | |
|         return ((paStreamParameters_.sampleFormat & paNonInterleaved) == 0);
 | |
|     }
 | |
| 
 | |
|     bool DirectionSpecificStreamParameters::isSampleFormatHostApiSpecific() const
 | |
|     {
 | |
|         return ((paStreamParameters_.sampleFormat & paCustomFormat) == 0);
 | |
|     }
 | |
| 
 | |
|     //////
 | |
|     /// Returns the host api-specific sample format, without including any
 | |
|     /// paCustomFormat or paNonInterleaved flags. Will return 0 if the sample format is
 | |
|     /// not host api-specific.
 | |
|     //////
 | |
|     PaSampleFormat DirectionSpecificStreamParameters::hostApiSpecificSampleFormat() const
 | |
|     {
 | |
|         if (isSampleFormatHostApiSpecific())
 | |
|             return paStreamParameters_.sampleFormat & ~paCustomFormat & ~paNonInterleaved;
 | |
|         else
 | |
|             return 0;
 | |
|     }
 | |
| 
 | |
|     PaTime DirectionSpecificStreamParameters::suggestedLatency() const
 | |
|     {
 | |
|         return paStreamParameters_.suggestedLatency;
 | |
|     }
 | |
| 
 | |
|     void *DirectionSpecificStreamParameters::hostApiSpecificStreamInfo() const
 | |
|     {
 | |
|         return paStreamParameters_.hostApiSpecificStreamInfo;
 | |
|     }
 | |
| 
 | |
|     // -----------------------------------------------------------------------------------
 | |
| 
 | |
| } // namespace portaudio
 |