cannam@124
|
1 #ifndef INCLUDED_PORTAUDIO_DEVICE_HXX
|
cannam@124
|
2 #define INCLUDED_PORTAUDIO_DEVICE_HXX
|
cannam@124
|
3
|
cannam@124
|
4 // ---------------------------------------------------------------------------------------
|
cannam@124
|
5
|
cannam@124
|
6 #include <iterator>
|
cannam@124
|
7
|
cannam@124
|
8 #include "portaudio.h"
|
cannam@124
|
9
|
cannam@124
|
10 #include "portaudiocpp/SampleDataFormat.hxx"
|
cannam@124
|
11
|
cannam@124
|
12 // ---------------------------------------------------------------------------------------
|
cannam@124
|
13
|
cannam@124
|
14 // Forward declaration(s):
|
cannam@124
|
15 namespace portaudio
|
cannam@124
|
16 {
|
cannam@124
|
17 class System;
|
cannam@124
|
18 class HostApi;
|
cannam@124
|
19 }
|
cannam@124
|
20
|
cannam@124
|
21 // ---------------------------------------------------------------------------------------
|
cannam@124
|
22
|
cannam@124
|
23 // Declaration(s):
|
cannam@124
|
24 namespace portaudio
|
cannam@124
|
25 {
|
cannam@124
|
26
|
cannam@124
|
27 //////
|
cannam@124
|
28 /// @brief Class which represents a PortAudio device in the System.
|
cannam@124
|
29 ///
|
cannam@124
|
30 /// A single physical device in the system may have multiple PortAudio
|
cannam@124
|
31 /// Device representations using different HostApi 's though. A Device
|
cannam@124
|
32 /// can be half-duplex or full-duplex. A half-duplex Device can be used
|
cannam@124
|
33 /// to create a half-duplex Stream. A full-duplex Device can be used to
|
cannam@124
|
34 /// create a full-duplex Stream. If supported by the HostApi, two
|
cannam@124
|
35 /// half-duplex Devices can even be used to create a full-duplex Stream.
|
cannam@124
|
36 ///
|
cannam@124
|
37 /// Note that Device objects are very light-weight and can be passed around
|
cannam@124
|
38 /// by-value.
|
cannam@124
|
39 //////
|
cannam@124
|
40 class Device
|
cannam@124
|
41 {
|
cannam@124
|
42 public:
|
cannam@124
|
43 // query info: name, max in channels, max out channels,
|
cannam@124
|
44 // default low/hight input/output latency, default sample rate
|
cannam@124
|
45 PaDeviceIndex index() const;
|
cannam@124
|
46 const char *name() const;
|
cannam@124
|
47 int maxInputChannels() const;
|
cannam@124
|
48 int maxOutputChannels() const;
|
cannam@124
|
49 PaTime defaultLowInputLatency() const;
|
cannam@124
|
50 PaTime defaultHighInputLatency() const;
|
cannam@124
|
51 PaTime defaultLowOutputLatency() const;
|
cannam@124
|
52 PaTime defaultHighOutputLatency() const;
|
cannam@124
|
53 double defaultSampleRate() const;
|
cannam@124
|
54
|
cannam@124
|
55 bool isInputOnlyDevice() const; // extended
|
cannam@124
|
56 bool isOutputOnlyDevice() const; // extended
|
cannam@124
|
57 bool isFullDuplexDevice() const; // extended
|
cannam@124
|
58 bool isSystemDefaultInputDevice() const; // extended
|
cannam@124
|
59 bool isSystemDefaultOutputDevice() const; // extended
|
cannam@124
|
60 bool isHostApiDefaultInputDevice() const; // extended
|
cannam@124
|
61 bool isHostApiDefaultOutputDevice() const; // extended
|
cannam@124
|
62
|
cannam@124
|
63 bool operator==(const Device &rhs);
|
cannam@124
|
64 bool operator!=(const Device &rhs);
|
cannam@124
|
65
|
cannam@124
|
66 // host api reference
|
cannam@124
|
67 HostApi &hostApi();
|
cannam@124
|
68 const HostApi &hostApi() const;
|
cannam@124
|
69
|
cannam@124
|
70 private:
|
cannam@124
|
71 PaDeviceIndex index_;
|
cannam@124
|
72 const PaDeviceInfo *info_;
|
cannam@124
|
73
|
cannam@124
|
74 private:
|
cannam@124
|
75 friend class System;
|
cannam@124
|
76
|
cannam@124
|
77 explicit Device(PaDeviceIndex index);
|
cannam@124
|
78 ~Device();
|
cannam@124
|
79
|
cannam@124
|
80 Device(const Device &); // non-copyable
|
cannam@124
|
81 Device &operator=(const Device &); // non-copyable
|
cannam@124
|
82 };
|
cannam@124
|
83
|
cannam@124
|
84 // -----------------------------------------------------------------------------------
|
cannam@124
|
85
|
cannam@124
|
86 } // namespace portaudio
|
cannam@124
|
87
|
cannam@124
|
88 // ---------------------------------------------------------------------------------------
|
cannam@124
|
89
|
cannam@124
|
90 #endif // INCLUDED_PORTAUDIO_DEVICE_HXX
|
cannam@124
|
91
|