1 /// Translated from C to D
2 module soundio.soundio_private;
3 
4 @nogc nothrow:
5 extern(C): __gshared:
6 
7 
8 public import soundio.api;
9 public import soundio.config;
10 public import soundio.list;
11 
12 version(SOUNDIO_HAVE_JACK) {
13     public import soundio.jack;
14 }
15 version(SOUNDIO_HAVE_PULSEAUDIO) {
16     public import soundio.pulseaudio;
17 }
18 version(SOUNDIO_HAVE_ALSA) {
19     public import soundio.alsa;
20 }
21 version(SOUNDIO_HAVE_COREAUDIO) {
22     public import soundio.coreaudio;
23 }
24 version(SOUNDIO_HAVE_WASAPI) {
25     public import soundio.wasapi;
26 }
27 
28 public import soundio.dummy;
29 
30 package:
31 
32 struct SoundIoBackendData {
33     union {
34         version(SOUNDIO_HAVE_JACK) {
35             SoundIoJack jack;
36         }
37         version(SOUNDIO_HAVE_PULSEAUDIO) {
38             SoundIoPulseAudio pulseaudio;
39         }
40         version(SOUNDIO_HAVE_ALSA) {
41             SoundIoAlsa alsa;
42         }
43         version(SOUNDIO_HAVE_COREAUDIO) {
44             SoundIoCoreAudio coreaudio;
45         }
46         version(SOUNDIO_HAVE_WASAPI) {
47             SoundIoWasapi wasapi;
48         }
49         SoundIoDummy dummy;
50     }
51 }
52 
53 struct SoundIoDeviceBackendData {
54     union {
55         version(SOUNDIO_HAVE_JACK) {
56             SoundIoDeviceJack jack;
57         }
58         version(SOUNDIO_HAVE_PULSEAUDIO) {
59             SoundIoDevicePulseAudio pulseaudio;
60         }
61         version(SOUNDIO_HAVE_ALSA) {
62             SoundIoDeviceAlsa alsa;
63         }
64         version(SOUNDIO_HAVE_COREAUDIO) {
65             SoundIoDeviceCoreAudio coreaudio;
66         }
67         version(SOUNDIO_HAVE_WASAPI) {
68             SoundIoDeviceWasapi wasapi;
69         }
70         SoundIoDeviceDummy dummy;
71     }
72 }
73 
74 struct SoundIoOutStreamBackendData {
75     union {
76         version(SOUNDIO_HAVE_JACK) {
77             SoundIoOutStreamJack jack;
78         }
79         version(SOUNDIO_HAVE_PULSEAUDIO) {
80             SoundIoOutStreamPulseAudio pulseaudio;
81         }
82         version(SOUNDIO_HAVE_ALSA) {
83             SoundIoOutStreamAlsa alsa;
84         }
85         version(SOUNDIO_HAVE_COREAUDIO) {
86             SoundIoOutStreamCoreAudio coreaudio;
87         }
88         version(SOUNDIO_HAVE_WASAPI) {
89             SoundIoOutStreamWasapi wasapi;
90         }
91         SoundIoOutStreamDummy dummy;
92     }
93 }
94 
95 struct SoundIoInStreamBackendData {
96     union {
97         version(SOUNDIO_HAVE_JACK) {
98             SoundIoInStreamJack jack;
99         }
100         version(SOUNDIO_HAVE_PULSEAUDIO) {
101             SoundIoInStreamPulseAudio pulseaudio;
102         }
103         version(SOUNDIO_HAVE_ALSA) {
104             SoundIoInStreamAlsa alsa;
105         }
106         version(SOUNDIO_HAVE_COREAUDIO) {
107             SoundIoInStreamCoreAudio coreaudio;
108         }
109         version(SOUNDIO_HAVE_WASAPI) {
110             SoundIoInStreamWasapi wasapi;
111         }
112         SoundIoInStreamDummy dummy;
113     }
114 }
115 
116 alias SoundIoListDevicePtr = SOUNDIO_LIST!(SoundIoDevice*);
117 
118 struct SoundIoDevicesInfo {
119     SoundIoListDevicePtr input_devices;
120     SoundIoListDevicePtr output_devices;
121     // can be -1 when default device is unknown
122     int default_output_index;
123     int default_input_index;
124 }
125 
126 struct SoundIoOutStreamPrivate {
127     SoundIoOutStream pub;
128     SoundIoOutStreamBackendData backend_data;
129 }
130 
131 struct SoundIoInStreamPrivate {
132     SoundIoInStream pub;
133     SoundIoInStreamBackendData backend_data;
134 }
135 
136 struct SoundIoPrivate {
137     extern(C): @nogc: nothrow:
138     SoundIo pub;
139 
140     // Safe to read from a single thread without a mutex.
141     SoundIoDevicesInfo* safe_devices_info;
142 
143     void function(SoundIoPrivate*) destroy;
144     void function(SoundIoPrivate*) flush_events;
145     void function(SoundIoPrivate*) wait_events;
146     void function(SoundIoPrivate*) wakeup;
147     void function(SoundIoPrivate*) force_device_scan;
148 
149     int function(SoundIoPrivate*, SoundIoOutStreamPrivate*) outstream_open;
150     void function(SoundIoPrivate*, SoundIoOutStreamPrivate*) outstream_destroy;
151     int function(SoundIoPrivate*, SoundIoOutStreamPrivate*) outstream_start;
152     int function(SoundIoPrivate*, SoundIoOutStreamPrivate*, SoundIoChannelArea** out_areas, int* out_frame_count) outstream_begin_write;
153     int function(SoundIoPrivate*, SoundIoOutStreamPrivate*) outstream_end_write;
154     int function(SoundIoPrivate*, SoundIoOutStreamPrivate*) outstream_clear_buffer;
155     int function(SoundIoPrivate*, SoundIoOutStreamPrivate*, bool pause) outstream_pause;
156     int function(SoundIoPrivate*, SoundIoOutStreamPrivate*, double* out_latency) outstream_get_latency;
157     int function(SoundIoPrivate*, SoundIoOutStreamPrivate*, float volume) outstream_set_volume;
158 
159     int function(SoundIoPrivate*, SoundIoInStreamPrivate*) instream_open;
160     void function(SoundIoPrivate*, SoundIoInStreamPrivate*) instream_destroy;
161     int function(SoundIoPrivate*, SoundIoInStreamPrivate*) instream_start;
162     int function(SoundIoPrivate*, SoundIoInStreamPrivate*, SoundIoChannelArea** out_areas, int* out_frame_count) instream_begin_read;
163     int function(SoundIoPrivate*, SoundIoInStreamPrivate*) instream_end_read;
164     int function(SoundIoPrivate*, SoundIoInStreamPrivate*, bool pause) instream_pause;
165     int function(SoundIoPrivate*, SoundIoInStreamPrivate*, double* out_latency) instream_get_latency;
166 
167     SoundIoBackendData backend_data;
168 }
169 
170 alias SoundIoListSampleRateRange = SOUNDIO_LIST!(SoundIoSampleRateRange);
171 
172 struct SoundIoDevicePrivate {
173     extern(C): @nogc: nothrow:
174     SoundIoDevice pub;
175     SoundIoDeviceBackendData backend_data;
176     void function(SoundIoDevicePrivate*) destruct;
177     SoundIoSampleRateRange prealloc_sample_rate_range;
178     SoundIoListSampleRateRange sample_rates;
179     SoundIoFormat prealloc_format;
180 }
181 
182 void soundio_destroy_devices_info(SoundIoDevicesInfo* devices_info);
183 
184 immutable int SOUNDIO_MIN_SAMPLE_RATE = 8000;
185 immutable int SOUNDIO_MAX_SAMPLE_RATE = 5644_800;