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;