LMMS
Loading...
Searching...
No Matches
RtAudio.h
Go to the documentation of this file.
1/************************************************************************/
39/************************************************************************/
40
44
45#ifndef __RTAUDIO_H
46#define __RTAUDIO_H
47
48#define RTAUDIO_VERSION "5.0.0"
49#define RTAUDIO_DLL_PUBLIC
50
51#include <string>
52#include <vector>
53#include <stdexcept>
54#include <iostream>
55
57
72typedef unsigned long RtAudioFormat;
73static const RtAudioFormat RTAUDIO_SINT8 = 0x1; // 8-bit signed integer.
74static const RtAudioFormat RTAUDIO_SINT16 = 0x2; // 16-bit signed integer.
75static const RtAudioFormat RTAUDIO_SINT24 = 0x4; // 24-bit signed integer.
76static const RtAudioFormat RTAUDIO_SINT32 = 0x8; // 32-bit signed integer.
77static const RtAudioFormat RTAUDIO_FLOAT32 = 0x10; // Normalized between plus/minus 1.0.
78static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/minus 1.0.
79
126typedef unsigned int RtAudioStreamFlags;
127static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED = 0x1; // Use non-interleaved buffers (default = interleaved).
128static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY = 0x2; // Attempt to set stream parameters for lowest possible latency.
129static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE = 0x4; // Attempt grab device and prevent use by others.
130static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME = 0x8; // Try to select realtime scheduling for callback thread.
131static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT = 0x10; // Use the "default" PCM device (ALSA only).
132static const RtAudioStreamFlags RTAUDIO_JACK_DONT_CONNECT = 0x20; // Do not automatically connect ports (JACK only).
133
145typedef unsigned int RtAudioStreamStatus;
146static const RtAudioStreamStatus RTAUDIO_INPUT_OVERFLOW = 0x1; // Input data was discarded because of an overflow condition at the driver.
147static const RtAudioStreamStatus RTAUDIO_OUTPUT_UNDERFLOW = 0x2; // The output buffer ran low, likely causing a gap in the output sound.
148
150
188typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer,
189 unsigned int nFrames,
190 double streamTime,
191 RtAudioStreamStatus status,
192 void *userData );
193
194/************************************************************************/
202/************************************************************************/
203
204class RTAUDIO_DLL_PUBLIC RtAudioError : public std::runtime_error
205{
206 public:
221
223 RtAudioError( const std::string& message,
225 : std::runtime_error(message), type_(type) {}
226
228 virtual void printMessage( void ) const
229 { std::cerr << '\n' << what() << "\n\n"; }
230
232 virtual const Type& getType(void) const { return type_; }
233
235 virtual const std::string getMessage(void) const
236 { return std::string(what()); }
237
238 protected:
240};
241
243
247typedef void (*RtAudioErrorCallback)( RtAudioError::Type type, const std::string &errorText );
248
250typedef bool (*RtAudioBufferSizeCallback)( unsigned int bufferSize, void* userData );
251
252// **************************************************************** //
253//
254// RtAudio class declaration.
255//
256// RtAudio is a "controller" used to select an available audio i/o
257// interface. It presents a common API for the user to call but all
258// functionality is implemented by the class RtApi and its
259// subclasses. RtAudio creates an instance of an RtApi subclass
260// based on the user's API choice. If no choice is made, RtAudio
261// attempts to make a "logical" API selection.
262//
263// **************************************************************** //
264
265class RtApi;
266
268{
269 public:
270
284
286 struct DeviceInfo {
287 bool probed;
288 std::string name;
289 unsigned int outputChannels;
290 unsigned int inputChannels;
291 unsigned int duplexChannels;
294 std::vector<unsigned int> sampleRates;
295 unsigned int preferredSampleRate;
297
298 // Default constructor.
302 };
303
306 unsigned int deviceId;
307 unsigned int nChannels;
308 unsigned int firstChannel;
309
310 // Default constructor.
313 };
314
316
374 unsigned int numberOfBuffers;
375 std::string streamName;
377
378 // Default constructor.
381 };
382
384 static std::string getVersion( void );
385
387
392 static void getCompiledApi( std::vector<RtAudio::Api> &apis );
393
395
403 RtAudio( RtAudio::Api api=UNSPECIFIED );
404
406
410 ~RtAudio();
411
413 RtAudio::Api getCurrentApi( void ) const;
414
416
421 unsigned int getDeviceCount( void );
422
424
434 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
435
437
444 unsigned int getDefaultOutputDevice( void );
445
447
454 unsigned int getDefaultInputDevice( void );
455
457
496 void openStream( RtAudio::StreamParameters *outputParameters,
497 RtAudio::StreamParameters *inputParameters,
498 RtAudioFormat format, unsigned int sampleRate,
499 unsigned int *bufferFrames, RtAudioCallback callback,
500 void *userData = NULL, RtAudio::StreamOptions *options = NULL,
501 RtAudioBufferSizeCallback bufSizeCallback = NULL,
502 RtAudioErrorCallback errorCallback = NULL );
503
505
509 void closeStream( void );
510
512
518 void startStream( void );
519
521
527 void stopStream( void );
528
530
536 void abortStream( void );
537
539 bool isStreamOpen( void ) const;
540
542 bool isStreamRunning( void ) const;
543
545
548 double getStreamTime( void );
549
551
554 void setStreamTime( double time );
555
557
565 long getStreamLatency( void );
566
568
573 unsigned int getStreamSampleRate( void );
574
576 void showWarnings( bool value = true );
577
578 protected:
579
580 void openRtApi( RtAudio::Api api );
582};
583
584// Operating system dependent thread functionality.
585#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_WASAPI__)
586
587 #ifndef NOMINMAX
588 #define NOMINMAX
589 #endif
590 #include <windows.h>
591 #include <process.h>
592
593 typedef uintptr_t ThreadHandle;
594 typedef CRITICAL_SECTION StreamMutex;
595
596#elif defined(__LINUX_ALSA__) || defined(__UNIX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__) || defined(__HAIKU__)
597 // Using pthread library for various flavors of unix.
598 #include <pthread.h>
599
600 typedef pthread_t ThreadHandle;
601 typedef pthread_mutex_t StreamMutex;
602
603#else // Setup for "dummy" behavior
604
605 #define __RTAUDIO_DUMMY__
606 typedef int ThreadHandle;
607 typedef int StreamMutex;
608
609#endif
610
611// This global structure type is used to pass callback information
612// between the private RtAudio stream structure and global callback
613// handling functions.
615 void *object; // Used as a "this" pointer.
617 void *callback;
618 void *userData;
621 void *apiInfo; // void pointer for API specific callback information
625
626 // Default constructor.
629};
630
631// **************************************************************** //
632//
633// RtApi class declaration.
634//
635// Subclasses of RtApi contain all API- and OS-specific code necessary
636// to fully implement the RtAudio API.
637//
638// Note that RtApi is an abstract base class and cannot be
639// explicitly instantiated. The class RtAudio will create an
640// instance of an RtApi subclass (RtApiOss, RtApiAlsa,
641// RtApiJack, RtApiCore, RtApiDs, or RtApiAsio).
642//
643// **************************************************************** //
644
645#pragma pack(push, 1)
646class S24 {
647
648 protected:
649 unsigned char c3[3];
650
651 public:
652 S24() {}
653
654 S24& operator = ( const int& i ) {
655 c3[0] = (i & 0x000000ff);
656 c3[1] = (i & 0x0000ff00) >> 8;
657 c3[2] = (i & 0x00ff0000) >> 16;
658 return *this;
659 }
660
661#if defined(__GNUC__) && __GNUC__ < 8
662 S24( const S24& v ) { *this = v; }
663#endif
664 S24( const double& d ) { *this = (int) d; }
665 S24( const float& f ) { *this = (int) f; }
666 S24( const signed short& s ) { *this = (int) s; }
667 S24( const char& c ) { *this = (int) c; }
668
669 int asInt() {
670 int i = c3[0] | (c3[1] << 8) | (c3[2] << 16);
671 if (i & 0x800000) i |= ~0xffffff;
672 return i;
673 }
674};
675#pragma pack(pop)
676
677#if defined( HAVE_GETTIMEOFDAY )
678 #include <sys/time.h>
679#endif
680
681#include <sstream>
682
684{
685public:
686
687 RtApi();
688 virtual ~RtApi();
689 virtual RtAudio::Api getCurrentApi( void ) const = 0;
690 virtual unsigned int getDeviceCount( void ) = 0;
691 virtual RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) = 0;
692 virtual unsigned int getDefaultInputDevice( void );
693 virtual unsigned int getDefaultOutputDevice( void );
694 void openStream( RtAudio::StreamParameters *outputParameters,
695 RtAudio::StreamParameters *inputParameters,
696 RtAudioFormat format, unsigned int sampleRate,
697 unsigned int *bufferFrames, RtAudioCallback callback,
698 void *userData, RtAudio::StreamOptions *options,
699 RtAudioBufferSizeCallback bufSizeCallback,
700 RtAudioErrorCallback errorCallback );
701 virtual void closeStream( void );
702 virtual void startStream( void ) = 0;
703 virtual void stopStream( void ) = 0;
704 virtual void abortStream( void ) = 0;
705 long getStreamLatency( void );
706 unsigned int getStreamSampleRate( void );
707 virtual double getStreamTime( void );
708 virtual void setStreamTime( double time );
709 bool isStreamOpen( void ) const { return stream_.state != STREAM_CLOSED; }
710 bool isStreamRunning( void ) const { return stream_.state == STREAM_RUNNING; }
712
713
714protected:
715
716 static const unsigned int MAX_SAMPLE_RATES;
717 static const unsigned int SAMPLE_RATES[];
718
719 enum { FAILURE, SUCCESS };
720
727
734
735 // A protected structure used for buffer conversion.
736 struct ConvertInfo {
740 std::vector<int> inOffset;
741 std::vector<int> outOffset;
742 };
743
744 // A protected structure for audio streams.
745 struct RtApiStream {
746 unsigned int device[2]; // Playback and record, respectively.
747 void *apiHandle; // void pointer for API specific stream handle information
748 StreamMode mode; // OUTPUT, INPUT, or DUPLEX.
749 StreamState state; // STOPPED, RUNNING, or CLOSED
750 char *userBuffer[2]; // Playback and record, respectively.
752 bool doConvertBuffer[2]; // Playback and record, respectively.
754 bool deviceInterleaved[2]; // Playback and record, respectively.
755 bool doByteSwap[2]; // Playback and record, respectively.
756 unsigned int sampleRate;
757 unsigned int bufferSize;
758 unsigned int nBuffers;
759 unsigned int nUserChannels[2]; // Playback and record, respectively.
760 unsigned int nDeviceChannels[2]; // Playback and record channels, respectively.
761 unsigned int channelOffset[2]; // Playback and record, respectively.
762 unsigned long latency[2]; // Playback and record, respectively.
764 RtAudioFormat deviceFormat[2]; // Playback and record, respectively.
768 double streamTime; // Number of elapsed seconds since the stream started.
769
770#if defined(HAVE_GETTIMEOFDAY)
771 struct timeval lastTickTimestamp;
772#endif
773
775 :apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; }
776 };
777
778 typedef S24 Int24;
779 typedef signed short Int16;
780 typedef signed int Int32;
781 typedef float Float32;
782 typedef double Float64;
783
784 std::ostringstream errorStream_;
785 std::string errorText_;
789
797 virtual bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
798 unsigned int firstChannel, unsigned int sampleRate,
799 RtAudioFormat format, unsigned int *bufferSize,
800 RtAudio::StreamOptions *options );
801
803 void tickStreamTime( void );
804
806 void clearStreamInfo();
807
812 void verifyStream( void );
813
816
821 void convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info );
822
824 void byteSwapBuffer( char *buffer, unsigned int samples, RtAudioFormat format );
825
827 unsigned int formatBytes( RtAudioFormat format );
828
830 void setConvertInfo( StreamMode mode, unsigned int firstChannel );
831};
832
833// **************************************************************** //
834//
835// Inline RtAudio definitions.
836//
837// **************************************************************** //
838
839inline RtAudio::Api RtAudio :: getCurrentApi( void ) const { return rtapi_->getCurrentApi(); }
840inline unsigned int RtAudio :: getDeviceCount( void ) { return rtapi_->getDeviceCount(); }
841inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int device ) { return rtapi_->getDeviceInfo( device ); }
842inline unsigned int RtAudio :: getDefaultInputDevice( void ) { return rtapi_->getDefaultInputDevice(); }
843inline unsigned int RtAudio :: getDefaultOutputDevice( void ) { return rtapi_->getDefaultOutputDevice(); }
844inline void RtAudio :: closeStream( void ) { return rtapi_->closeStream(); }
845inline void RtAudio :: startStream( void ) { return rtapi_->startStream(); }
846inline void RtAudio :: stopStream( void ) { return rtapi_->stopStream(); }
847inline void RtAudio :: abortStream( void ) { return rtapi_->abortStream(); }
848inline bool RtAudio :: isStreamOpen( void ) const { return rtapi_->isStreamOpen(); }
849inline bool RtAudio :: isStreamRunning( void ) const { return rtapi_->isStreamRunning(); }
850inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); }
851inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); }
852inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); }
853inline void RtAudio :: setStreamTime( double time ) { return rtapi_->setStreamTime( time ); }
854inline void RtAudio :: showWarnings( bool value ) { rtapi_->showWarnings( value ); }
855
856// RtApi Subclass prototypes.
857
858#if defined(__MACOSX_CORE__)
859
860#include <CoreAudio/AudioHardware.h>
861
862class RtApiCore: public RtApi
863{
864public:
865
866 RtApiCore();
867 ~RtApiCore();
868 RtAudio::Api getCurrentApi( void ) const { return RtAudio::MACOSX_CORE; }
869 unsigned int getDeviceCount( void );
870 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
871 unsigned int getDefaultOutputDevice( void );
872 unsigned int getDefaultInputDevice( void );
873 void closeStream( void );
874 void startStream( void );
875 void stopStream( void );
876 void abortStream( void );
877 long getStreamLatency( void );
878
879 // This function is intended for internal use only. It must be
880 // public because it is called by the internal callback handler,
881 // which is not a member of RtAudio. External use of this function
882 // will most likely produce highly undesireable results!
883 bool callbackEvent( AudioDeviceID deviceId,
884 const AudioBufferList *inBufferList,
885 const AudioBufferList *outBufferList );
886
887 private:
888
889 bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
890 unsigned int firstChannel, unsigned int sampleRate,
891 RtAudioFormat format, unsigned int *bufferSize,
892 RtAudio::StreamOptions *options );
893 static const char* getErrorCode( OSStatus code );
894};
895
896#endif
897
898#if defined(__UNIX_JACK__)
899
900class RtApiJack: public RtApi
901{
902public:
903
904 RtApiJack();
905 ~RtApiJack();
906 RtAudio::Api getCurrentApi( void ) const { return RtAudio::UNIX_JACK; }
907 unsigned int getDeviceCount( void );
908 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
909 void closeStream( void );
910 void startStream( void );
911 void stopStream( void );
912 void abortStream( void );
913 long getStreamLatency( void );
914
915 // This function is intended for internal use only. It must be
916 // public because it is called by the internal callback handler,
917 // which is not a member of RtAudio. External use of this function
918 // will most likely produce highly undesireable results!
919 bool callbackEvent( unsigned long nframes );
920
921 // Buffer size change callback
922 bool bufferSizeEvent( unsigned long nframes );
923
924 private:
925
926 bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
927 unsigned int firstChannel, unsigned int sampleRate,
928 RtAudioFormat format, unsigned int *bufferSize,
929 RtAudio::StreamOptions *options );
930
931 bool shouldAutoconnect_;
932};
933
934#endif
935
936#if defined(__WINDOWS_ASIO__)
937
938class RtApiAsio: public RtApi
939{
940public:
941
942 RtApiAsio();
943 ~RtApiAsio();
944 RtAudio::Api getCurrentApi( void ) const { return RtAudio::WINDOWS_ASIO; }
945 unsigned int getDeviceCount( void );
946 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
947 void closeStream( void );
948 void startStream( void );
949 void stopStream( void );
950 void abortStream( void );
951 long getStreamLatency( void );
952
953 // This function is intended for internal use only. It must be
954 // public because it is called by the internal callback handler,
955 // which is not a member of RtAudio. External use of this function
956 // will most likely produce highly undesireable results!
957 bool callbackEvent( long bufferIndex );
958
959 private:
960
961 std::vector<RtAudio::DeviceInfo> devices_;
962 void saveDeviceInfo( void );
963 bool coInitialized_;
964 bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
965 unsigned int firstChannel, unsigned int sampleRate,
966 RtAudioFormat format, unsigned int *bufferSize,
967 RtAudio::StreamOptions *options );
968};
969
970#endif
971
972#if defined(__WINDOWS_DS__)
973
974class RtApiDs: public RtApi
975{
976public:
977
978 RtApiDs();
979 ~RtApiDs();
980 RtAudio::Api getCurrentApi( void ) const { return RtAudio::WINDOWS_DS; }
981 unsigned int getDeviceCount( void );
982 unsigned int getDefaultOutputDevice( void );
983 unsigned int getDefaultInputDevice( void );
984 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
985 void closeStream( void );
986 void startStream( void );
987 void stopStream( void );
988 void abortStream( void );
989 long getStreamLatency( void );
990
991 // This function is intended for internal use only. It must be
992 // public because it is called by the internal callback handler,
993 // which is not a member of RtAudio. External use of this function
994 // will most likely produce highly undesireable results!
995 void callbackEvent( void );
996
997 private:
998
999 bool coInitialized_;
1000 bool buffersRolling;
1001 long duplexPrerollBytes;
1002 std::vector<struct DsDevice> dsDevices;
1003 bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
1004 unsigned int firstChannel, unsigned int sampleRate,
1005 RtAudioFormat format, unsigned int *bufferSize,
1006 RtAudio::StreamOptions *options );
1007};
1008
1009#endif
1010
1011#if defined(__WINDOWS_WASAPI__)
1012
1013struct IMMDeviceEnumerator;
1014
1015class RtApiWasapi : public RtApi
1016{
1017public:
1018 RtApiWasapi();
1019 ~RtApiWasapi();
1020
1021 RtAudio::Api getCurrentApi( void ) const { return RtAudio::WINDOWS_WASAPI; }
1022 unsigned int getDeviceCount( void );
1023 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
1024 unsigned int getDefaultOutputDevice( void );
1025 unsigned int getDefaultInputDevice( void );
1026 void closeStream( void );
1027 void startStream( void );
1028 void stopStream( void );
1029 void abortStream( void );
1030
1031private:
1032 bool coInitialized_;
1033 IMMDeviceEnumerator* deviceEnumerator_;
1034
1035 bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
1036 unsigned int firstChannel, unsigned int sampleRate,
1037 RtAudioFormat format, unsigned int* bufferSize,
1038 RtAudio::StreamOptions* options );
1039
1040 static DWORD WINAPI runWasapiThread( void* wasapiPtr );
1041 static DWORD WINAPI stopWasapiThread( void* wasapiPtr );
1042 static DWORD WINAPI abortWasapiThread( void* wasapiPtr );
1043 void wasapiThread();
1044};
1045
1046#endif
1047
1048#if defined(__LINUX_ALSA__)
1049
1050class RtApiAlsa: public RtApi
1051{
1052public:
1053
1054 RtApiAlsa();
1055 ~RtApiAlsa();
1057 unsigned int getDeviceCount( void );
1058 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
1059 void closeStream( void );
1060 void startStream( void );
1061 void stopStream( void );
1062 void abortStream( void );
1063
1064 // This function is intended for internal use only. It must be
1065 // public because it is called by the internal callback handler,
1066 // which is not a member of RtAudio. External use of this function
1067 // will most likely produce highly undesireable results!
1068 void callbackEvent( void );
1069
1070 private:
1071
1072 std::vector<RtAudio::DeviceInfo> devices_;
1073 void saveDeviceInfo( void );
1074 bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
1075 unsigned int firstChannel, unsigned int sampleRate,
1076 RtAudioFormat format, unsigned int *bufferSize,
1077 RtAudio::StreamOptions *options );
1078};
1079
1080#endif
1081
1082#if defined(__UNIX_PULSE__)
1083
1084class RtApiPulse: public RtApi
1085{
1086public:
1087 ~RtApiPulse();
1089 unsigned int getDeviceCount( void );
1090 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
1091 void closeStream( void );
1092 void startStream( void );
1093 void stopStream( void );
1094 void abortStream( void );
1095
1096 // This function is intended for internal use only. It must be
1097 // public because it is called by the internal callback handler,
1098 // which is not a member of RtAudio. External use of this function
1099 // will most likely produce highly undesireable results!
1100 void callbackEvent( void );
1101
1102 private:
1103
1104 std::vector<RtAudio::DeviceInfo> devices_;
1105 void saveDeviceInfo( void );
1106 bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
1107 unsigned int firstChannel, unsigned int sampleRate,
1108 RtAudioFormat format, unsigned int *bufferSize,
1109 RtAudio::StreamOptions *options );
1110};
1111
1112#endif
1113
1114#if defined(__LINUX_OSS__)
1115
1116class RtApiOss: public RtApi
1117{
1118public:
1119
1120 RtApiOss();
1121 ~RtApiOss();
1123 unsigned int getDeviceCount( void );
1124 RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
1125 void closeStream( void );
1126 void startStream( void );
1127 void stopStream( void );
1128 void abortStream( void );
1129
1130 // This function is intended for internal use only. It must be
1131 // public because it is called by the internal callback handler,
1132 // which is not a member of RtAudio. External use of this function
1133 // will most likely produce highly undesireable results!
1134 void callbackEvent( void );
1135
1136 private:
1137
1138 bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
1139 unsigned int firstChannel, unsigned int sampleRate,
1140 RtAudioFormat format, unsigned int *bufferSize,
1141 RtAudio::StreamOptions *options );
1142};
1143
1144#endif
1145
1146#if defined(__RTAUDIO_DUMMY__)
1147
1148class RtApiDummy: public RtApi
1149{
1150public:
1151
1152 RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtAudioError::WARNING ); }
1154 unsigned int getDeviceCount( void ) { return 0; }
1155 RtAudio::DeviceInfo getDeviceInfo( unsigned int /*device*/ ) { RtAudio::DeviceInfo info; return info; }
1156 void closeStream( void ) {}
1157 void startStream( void ) {}
1158 void stopStream( void ) {}
1159 void abortStream( void ) {}
1160
1161 private:
1162
1163 bool probeDeviceOpen( unsigned int /*device*/, StreamMode /*mode*/, unsigned int /*channels*/,
1164 unsigned int /*firstChannel*/, unsigned int /*sampleRate*/,
1165 RtAudioFormat /*format*/, unsigned int * /*bufferSize*/,
1166 RtAudio::StreamOptions * /*options*/ ) { return false; }
1167};
1168
1169#endif
1170
1171#endif
1172
1173// Indentation settings for Vim and Emacs
1174//
1175// Local Variables:
1176// c-basic-offset: 2
1177// indent-tabs-mode: nil
1178// End:
1179//
1180// vim: et sts=2 sw=2
#define NULL
Definition CarlaBridgeFormat.cpp:30
static const RtAudioFormat RTAUDIO_SINT8
Definition RtAudio.h:73
void(* RtAudioErrorCallback)(RtAudioError::Type type, const std::string &errorText)
RtAudio error callback function prototype.
Definition RtAudio.h:247
static const RtAudioFormat RTAUDIO_SINT32
Definition RtAudio.h:76
static const RtAudioFormat RTAUDIO_FLOAT64
Definition RtAudio.h:78
static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY
Definition RtAudio.h:128
static const RtAudioStreamFlags RTAUDIO_JACK_DONT_CONNECT
Definition RtAudio.h:132
static const RtAudioStreamStatus RTAUDIO_OUTPUT_UNDERFLOW
Definition RtAudio.h:147
int ThreadHandle
Definition RtAudio.h:606
static const RtAudioFormat RTAUDIO_FLOAT32
Definition RtAudio.h:77
static const RtAudioFormat RTAUDIO_SINT24
Definition RtAudio.h:75
bool(* RtAudioBufferSizeCallback)(unsigned int bufferSize, void *userData)
RtAudio buffer size change callback.
Definition RtAudio.h:250
int(* RtAudioCallback)(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *userData)
RtAudio callback function prototype.
Definition RtAudio.h:188
static const RtAudioFormat RTAUDIO_SINT16
Definition RtAudio.h:74
unsigned long RtAudioFormat
RtAudio data format type.
Definition RtAudio.h:72
static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT
Definition RtAudio.h:131
unsigned int RtAudioStreamFlags
RtAudio stream option flags.
Definition RtAudio.h:126
static const RtAudioStreamStatus RTAUDIO_INPUT_OVERFLOW
Definition RtAudio.h:146
static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED
Definition RtAudio.h:127
unsigned int RtAudioStreamStatus
RtAudio stream status (over- or underflow) flags.
Definition RtAudio.h:145
static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME
Definition RtAudio.h:130
int StreamMutex
Definition RtAudio.h:607
#define RTAUDIO_DLL_PUBLIC
Definition RtAudio.h:49
static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE
Definition RtAudio.h:129
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
RtApiDummy()
Definition RtAudio.h:1152
RtAudio::DeviceInfo getDeviceInfo(unsigned int)
Definition RtAudio.h:1155
void closeStream(void)
Definition RtAudio.h:1156
RtAudio::Api getCurrentApi(void) const
Definition RtAudio.h:1153
bool probeDeviceOpen(unsigned int, StreamMode, unsigned int, unsigned int, unsigned int, RtAudioFormat, unsigned int *, RtAudio::StreamOptions *)
Definition RtAudio.h:1163
unsigned int getDeviceCount(void)
Definition RtAudio.h:1154
void abortStream(void)
Definition RtAudio.h:1159
void stopStream(void)
Definition RtAudio.h:1158
void startStream(void)
Definition RtAudio.h:1157
Definition RtAudio.h:684
void byteSwapBuffer(char *buffer, unsigned int samples, RtAudioFormat format)
Protected common method used to perform byte-swapping on buffers.
Definition RtAudio.cpp:9968
virtual void startStream(void)=0
virtual void closeStream(void)
Definition RtAudio.cpp:364
virtual RtAudio::Api getCurrentApi(void) const =0
bool firstErrorOccurred_
Definition RtAudio.h:788
virtual void setStreamTime(double time)
Definition RtAudio.cpp:428
unsigned int getStreamSampleRate(void)
Definition RtAudio.cpp:439
std::ostringstream errorStream_
Definition RtAudio.h:784
void showWarnings(bool value)
Definition RtAudio.h:711
signed int Int32
Definition RtAudio.h:780
virtual unsigned int getDeviceCount(void)=0
void openStream(RtAudio::StreamParameters *outputParameters, RtAudio::StreamParameters *inputParameters, RtAudioFormat format, unsigned int sampleRate, unsigned int *bufferFrames, RtAudioCallback callback, void *userData, RtAudio::StreamOptions *options, RtAudioBufferSizeCallback bufSizeCallback, RtAudioErrorCallback errorCallback)
Definition RtAudio.cpp:257
static const unsigned int MAX_SAMPLE_RATES
Definition RtAudio.h:716
virtual double getStreamTime(void)
Definition RtAudio.cpp:405
virtual unsigned int getDefaultInputDevice(void)
Definition RtAudio.cpp:352
unsigned int formatBytes(RtAudioFormat format)
Protected common method that returns the number of bytes for a given format.
Definition RtAudio.cpp:9432
virtual RtAudio::DeviceInfo getDeviceInfo(unsigned int device)=0
@ SUCCESS
Definition RtAudio.h:719
@ FAILURE
Definition RtAudio.h:719
virtual bool probeDeviceOpen(unsigned int device, StreamMode mode, unsigned int channels, unsigned int firstChannel, unsigned int sampleRate, RtAudioFormat format, unsigned int *bufferSize, RtAudio::StreamOptions *options)
Definition RtAudio.cpp:370
StreamMode
Definition RtAudio.h:728
@ DUPLEX
Definition RtAudio.h:731
@ INPUT
Definition RtAudio.h:730
@ UNINITIALIZED
Definition RtAudio.h:732
@ OUTPUT
Definition RtAudio.h:729
RtApiStream stream_
Definition RtAudio.h:787
static const unsigned int SAMPLE_RATES[]
Definition RtAudio.h:53
void convertBuffer(char *outBuffer, char *inBuffer, ConvertInfo &info)
Definition RtAudio.cpp:9531
StreamState
Definition RtAudio.h:721
@ STREAM_CLOSED
Definition RtAudio.h:725
@ STREAM_STOPPED
Definition RtAudio.h:722
@ STREAM_RUNNING
Definition RtAudio.h:724
@ STREAM_STOPPING
Definition RtAudio.h:723
S24 Int24
Definition RtAudio.h:778
signed short Int16
Definition RtAudio.h:779
bool showWarnings_
Definition RtAudio.h:786
std::string errorText_
Definition RtAudio.h:785
RtApi()
Definition RtAudio.cpp:240
bool isStreamRunning(void) const
Definition RtAudio.h:710
void verifyStream(void)
Definition RtAudio.cpp:9387
void clearStreamInfo()
Protected common method to clear an RtApiStream structure.
Definition RtAudio.cpp:9395
double Float64
Definition RtAudio.h:782
void tickStreamTime(void)
A protected function used to increment the stream time.
Definition RtAudio.cpp:379
bool isStreamOpen(void) const
Definition RtAudio.h:709
float Float32
Definition RtAudio.h:781
void setConvertInfo(StreamMode mode, unsigned int firstChannel)
Protected common method that sets up the parameters for buffer conversion.
Definition RtAudio.cpp:9451
virtual void stopStream(void)=0
virtual void abortStream(void)=0
long getStreamLatency(void)
Definition RtAudio.cpp:392
virtual unsigned int getDefaultOutputDevice(void)
Definition RtAudio.cpp:358
RtAudioError(const std::string &message, Type type=RtAudioError::UNSPECIFIED)
The constructor.
Definition RtAudio.h:223
virtual const std::string getMessage(void) const
Returns the thrown error message string.
Definition RtAudio.h:235
Type
Defined RtAudioError types.
Definition RtAudio.h:208
@ INVALID_DEVICE
Definition RtAudio.h:213
@ MEMORY_ERROR
Definition RtAudio.h:214
@ WARNING
Definition RtAudio.h:209
@ UNSPECIFIED
Definition RtAudio.h:211
@ DRIVER_ERROR
Definition RtAudio.h:217
@ NO_DEVICES_FOUND
Definition RtAudio.h:212
@ INVALID_USE
Definition RtAudio.h:216
@ THREAD_ERROR
Definition RtAudio.h:219
@ INVALID_PARAMETER
Definition RtAudio.h:215
@ DEBUG_WARNING
Definition RtAudio.h:210
@ SYSTEM_ERROR
Definition RtAudio.h:218
virtual const Type & getType(void) const
Returns the thrown error message type.
Definition RtAudio.h:232
Type type_
Definition RtAudio.h:239
virtual void printMessage(void) const
Prints thrown error message to stderr.
Definition RtAudio.h:228
Realtime audio i/o C++ classes.
Definition RtAudio.h:268
RtApi * rtapi_
Definition RtAudio.h:581
Api
Audio API specifier arguments.
Definition RtAudio.h:272
@ WINDOWS_ASIO
Definition RtAudio.h:280
@ WINDOWS_DS
Definition RtAudio.h:281
@ LINUX_OSS
Definition RtAudio.h:275
@ UNIX_PULSE
Definition RtAudio.h:276
@ UNIX_JACK
Definition RtAudio.h:277
@ MACOSX_CORE
Definition RtAudio.h:278
@ UNSPECIFIED
Definition RtAudio.h:273
@ LINUX_ALSA
Definition RtAudio.h:274
@ RTAUDIO_DUMMY
Definition RtAudio.h:282
@ WINDOWS_WASAPI
Definition RtAudio.h:279
RtAudio(RtAudio::Api api=UNSPECIFIED)
The class constructor.
Definition RtAudio.cpp:180
Definition RtAudio.h:646
int asInt()
Definition RtAudio.h:669
S24(const signed short &s)
Definition RtAudio.h:666
unsigned char c3[3]
Definition RtAudio.h:649
S24()
Definition RtAudio.h:652
S24(const char &c)
Definition RtAudio.h:667
S24(const double &d)
Definition RtAudio.h:664
S24(const float &f)
Definition RtAudio.h:665
S24 & operator=(const int &i)
Definition RtAudio.h:654
unsigned v[N_MAX]
Definition inflate.c:1584
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned f
Definition inflate.c:1572
static PuglViewHint int value
Definition pugl.h:1708
struct backing_store_struct * info
Definition jmemsys.h:183
Definition juce_Uuid.h:141
#define false
Definition ordinals.h:83
png_structrp int mode
Definition png.h:1139
Definition RtAudio.h:614
void * bufSizeCallback
Definition RtAudio.h:619
bool isRunning
Definition RtAudio.h:622
void * userData
Definition RtAudio.h:618
void * apiInfo
Definition RtAudio.h:621
ThreadHandle thread
Definition RtAudio.h:616
CallbackInfo()
Definition RtAudio.h:627
void * callback
Definition RtAudio.h:617
void * errorCallback
Definition RtAudio.h:620
void * object
Definition RtAudio.h:615
int priority
Definition RtAudio.h:624
bool doRealtime
Definition RtAudio.h:623
Definition RtAudio.h:736
RtAudioFormat inFormat
Definition RtAudio.h:739
int inJump
Definition RtAudio.h:738
std::vector< int > inOffset
Definition RtAudio.h:740
RtAudioFormat outFormat
Definition RtAudio.h:739
int outJump
Definition RtAudio.h:738
int channels
Definition RtAudio.h:737
std::vector< int > outOffset
Definition RtAudio.h:741
Definition RtAudio.h:745
unsigned int sampleRate
Definition RtAudio.h:756
unsigned long latency[2]
Definition RtAudio.h:762
char * deviceBuffer
Definition RtAudio.h:751
ConvertInfo convertInfo[2]
Definition RtAudio.h:767
unsigned int device[2]
Definition RtAudio.h:746
double streamTime
Definition RtAudio.h:768
StreamMode mode
Definition RtAudio.h:748
bool doByteSwap[2]
Definition RtAudio.h:755
bool doConvertBuffer[2]
Definition RtAudio.h:752
char * userBuffer[2]
Definition RtAudio.h:750
unsigned int nBuffers
Definition RtAudio.h:758
void * apiHandle
Definition RtAudio.h:747
StreamMutex mutex
Definition RtAudio.h:765
unsigned int nUserChannels[2]
Definition RtAudio.h:759
bool userInterleaved
Definition RtAudio.h:753
RtAudioFormat deviceFormat[2]
Definition RtAudio.h:764
unsigned int bufferSize
Definition RtAudio.h:757
bool deviceInterleaved[2]
Definition RtAudio.h:754
CallbackInfo callbackInfo
Definition RtAudio.h:766
unsigned int nDeviceChannels[2]
Definition RtAudio.h:760
StreamState state
Definition RtAudio.h:749
RtAudioFormat userFormat
Definition RtAudio.h:763
unsigned int channelOffset[2]
Definition RtAudio.h:761
RtApiStream()
Definition RtAudio.h:774
The public device information structure for returning queried values.
Definition RtAudio.h:286
RtAudioFormat nativeFormats
Definition RtAudio.h:296
std::string name
Definition RtAudio.h:288
unsigned int duplexChannels
Definition RtAudio.h:291
bool isDefaultOutput
Definition RtAudio.h:292
unsigned int inputChannels
Definition RtAudio.h:290
DeviceInfo()
Definition RtAudio.h:299
bool isDefaultInput
Definition RtAudio.h:293
unsigned int outputChannels
Definition RtAudio.h:289
bool probed
Definition RtAudio.h:287
unsigned int preferredSampleRate
Definition RtAudio.h:295
std::vector< unsigned int > sampleRates
Definition RtAudio.h:294
The structure for specifying stream options.
Definition RtAudio.h:372
RtAudioStreamFlags flags
Definition RtAudio.h:373
std::string streamName
Definition RtAudio.h:375
StreamOptions()
Definition RtAudio.h:379
unsigned int numberOfBuffers
Definition RtAudio.h:374
int priority
Definition RtAudio.h:376
The structure for specifying input or ouput stream parameters.
Definition RtAudio.h:305
StreamParameters()
Definition RtAudio.h:311
unsigned int nChannels
Definition RtAudio.h:307
unsigned int deviceId
Definition RtAudio.h:306
unsigned int firstChannel
Definition RtAudio.h:308
RECT const char void(* callback)(const char *droppath))) SWELL_API_DEFINE(BOOL
Definition swell-functions.h:1004
unsigned int DWORD
Definition swell-types.h:164
#define WINAPI
Definition swell-types.h:631
return c
Definition crypt.c:175
int error
Definition extract.c:1038
typedef int(UZ_EXP MsgFn)()
#define void
Definition unzip.h:396
_WDL_CSTRING_PREFIX void INT_PTR const char * format
Definition wdlcstring.h:263