#pragma once #include #include #pragma GCC diagnostic push #ifndef __clang__ #pragma GCC diagnostic ignored "-Wsuggest-override" #endif #include #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 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 getSampleRates(); void setSampleRate(int sampleRate); std::vector 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