| 
							- #pragma once
 - #include <common.hpp>
 - #include <jansson.h>
 - 
 - #pragma GCC diagnostic push
 - #ifndef __clang__
 - 	#pragma GCC diagnostic ignored "-Wsuggest-override"
 - #endif
 - #include <RtAudio.h>
 - #pragma GCC diagnostic pop
 - 
 - 
 - namespace rack {
 - 
 - 
 - /** Audio driver
 - */
 - namespace audio {
 - 
 - 
 - struct Port {
 - 	// Stream properties
 - 	int driverId = 0;
 - 	int deviceId = -1;
 - 	int offset = 0;
 - 	int maxChannels = 8;
 - 	int sampleRate = 44100;
 - 	int blockSize = 256;
 - 	int numOutputs = 0;
 - 	int numInputs = 0;
 - 	RtAudio* rtAudio = NULL;
 - 	/** Cached */
 - 	RtAudio::DeviceInfo deviceInfo;
 - 
 - 	Port();
 - 	virtual ~Port();
 - 
 - 	std::vector<int> getDriverIds();
 - 	std::string getDriverName(int driverId);
 - 	void setDriverId(int driverId);
 - 
 - 	int getDeviceCount();
 - 	bool getDeviceInfo(int deviceId, RtAudio::DeviceInfo* deviceInfo);
 - 	/** Returns the number of inputs or outputs, whichever is greater */
 - 	int getDeviceChannels(int deviceId);
 - 	std::string getDeviceName(int deviceId);
 - 	std::string getDeviceDetail(int deviceId, int offset);
 - 	void setDeviceId(int deviceId, int offset);
 - 
 - 	std::vector<int> getSampleRates();
 - 	void setSampleRate(int sampleRate);
 - 	std::vector<int> getBlockSizes();
 - 	void setBlockSize(int blockSize);
 - 
 - 	void setChannels(int numOutputs, int numInputs);
 - 
 - 	/** Must close the stream before opening */
 - 	void openStream();
 - 	void closeStream();
 - 
 - 	virtual void processStream(const float* input, float* output, int frames) {}
 - 	virtual void onCloseStream() {}
 - 	virtual void onOpenStream() {}
 - 	virtual void onChannelsChange() {}
 - 	json_t* toJson();
 - 	void fromJson(json_t* rootJ);
 - };
 - 
 - 
 - } // namespace audio
 - } // namespace rack
 
 
  |