1 use bitflags::bitflags; 2 use std::mem::transmute; 3 4 #[derive(Debug, PartialEq)] 5 /// An audio channel identifier 6 pub enum AudioChannel {} 7 8 #[derive(Debug, PartialEq)] 9 /// A control channel identifier 10 pub enum ControlChannel {} 11 12 #[derive(Debug, PartialEq)] 13 /// A string channel identifier 14 pub enum StrChannel {} 15 16 /// Define the type of csound messages 17 #[derive(Debug, PartialEq)] 18 pub enum MessageType { 19 /// standard message. 20 CSOUNDMSG_DEFAULT, 21 22 /// error message (initerror, perferror, etc.). 23 CSOUNDMSG_ERROR, 24 25 /// orchestra opcodes (e.g. printks). 26 CSOUNDMSG_ORCH, 27 28 /// for progress display and heartbeat characters. 29 CSOUNDMSG_REALTIME, 30 31 /// warning messages. 32 CSOUNDMSG_WARNING, 33 34 /// stdout messages. 35 CSOUNDMSG_STDOUT, 36 } 37 38 impl From<u32> for MessageType { from(value: u32) -> Self39 fn from(value: u32) -> Self { 40 match value { 41 0x0000 => MessageType::CSOUNDMSG_DEFAULT, 42 0x1000 => MessageType::CSOUNDMSG_ERROR, 43 0x2000 => MessageType::CSOUNDMSG_ORCH, 44 0x3000 => MessageType::CSOUNDMSG_REALTIME, 45 0x4000 => MessageType::CSOUNDMSG_WARNING, 46 0x5000 => MessageType::CSOUNDMSG_STDOUT, 47 _ => MessageType::CSOUNDMSG_ERROR, 48 } 49 } 50 } 51 52 /// Csound error codes 53 #[derive(Debug, PartialEq, PartialOrd)] 54 pub enum Status { 55 /// Termination requested by SIGINT or SIGTERM. 56 CS_SIGNAL, 57 58 /// Failed to allocate requested memory. 59 CS_MEMORY, 60 61 /// Failed during performance. 62 CS_PERFORMANCE, 63 64 /// Failed during initialization. 65 CS_INITIALIZATION, 66 67 /// Unspecified failure. 68 CS_ERROR, 69 70 /// Completed successfully. 71 CS_SUCCESS, 72 73 /// Completed but with additional info. 74 CS_OK(i32), 75 } 76 77 impl From<i32> for Status { from(value: i32) -> Self78 fn from(value: i32) -> Self { 79 match value { 80 -5 => Status::CS_SIGNAL, 81 -4 => Status::CS_MEMORY, 82 -3 => Status::CS_PERFORMANCE, 83 -2 => Status::CS_INITIALIZATION, 84 -1 => Status::CS_ERROR, 85 0 => Status::CS_SUCCESS, 86 value => Status::CS_OK(value), 87 } 88 } 89 } 90 91 impl Status { to_i32(&self) -> i3292 pub fn to_i32(&self) -> i32 { 93 match self { 94 Status::CS_SIGNAL => -5, 95 Status::CS_MEMORY => -4, 96 Status::CS_PERFORMANCE => -3, 97 Status::CS_INITIALIZATION => -2, 98 Status::CS_ERROR => -1, 99 Status::CS_SUCCESS => 0, 100 Status::CS_OK(value) => *value, 101 } 102 } 103 } 104 105 /// Enum variant which represent channel's types in callbacks. 106 /// 107 /// Channels which could trigger a callback, that is, channels created using the [*invalue*](http://www.csounds.com/manual/html/invalue.html), 108 /// [*outvalue*](http://www.csounds.com/manual/html/outvalue.html) opcodes. Only control and string channels are supported. 109 #[derive(Debug, Clone, PartialEq)] 110 pub enum ChannelData { 111 CS_CONTROL_CHANNEL(f64), 112 CS_STRING_CHANNEL(String), 113 CS_UNKNOWN_CHANNEL, 114 } 115 116 bitflags! { 117 /// Defines the types of csound bus cahnnels 118 /// 119 /// and if the channel is an input or an output 120 pub struct ControlChannelType: u32 { 121 /// Unknown channel - use it to request the channel type 122 const CSOUND_UNKNOWN_CHANNEL = 0; 123 124 /// Define a csound control channel 125 const CSOUND_CONTROL_CHANNEL = 1; 126 /// Define a audio channel (chanel content is and array with ksmps elements) 127 const CSOUND_AUDIO_CHANNEL = 2; 128 /// String channel 129 const CSOUND_STRING_CHANNEL = 3; 130 /// Pvs channel 131 const CSOUND_PVS_CHANNEL = 4; 132 /// Generic channel 133 const CSOUND_VAR_CHANNEL = 5; 134 135 const CSOUND_CHANNEL_TYPE_MASK = 15; 136 137 const CSOUND_INPUT_CHANNEL = 16; 138 139 const CSOUND_OUTPUT_CHANNEL = 32; 140 } 141 } 142 143 bitflags! { 144 /// Defines the types of csound bus cahnnels 145 /// 146 /// and if the channel is an input or an output 147 pub struct KeyCallbackType: u8 { 148 /// Unknown channel - use it to request the channel type 149 const CSOUND_CALLBACK_KBD_EVENT = 1; 150 const CSOUND_CALLBACK_KBD_TEXT = 2; 151 } 152 } 153 154 /// The languages supported by csound 155 #[derive(Debug, Clone, PartialEq)] 156 pub enum Language { 157 CSLANGUAGE_DEFAULT = 0, 158 CSLANGUAGE_AFRIKAANS, 159 CSLANGUAGE_ALBANIAN, 160 CSLANGUAGE_ARABIC, 161 CSLANGUAGE_ARMENIAN, 162 CSLANGUAGE_ASSAMESE, 163 CSLANGUAGE_AZERI, 164 CSLANGUAGE_BASQUE, 165 CSLANGUAGE_BELARUSIAN, 166 CSLANGUAGE_BENGALI, 167 CSLANGUAGE_BULGARIAN, 168 CSLANGUAGE_CATALAN, 169 CSLANGUAGE_CHINESE, 170 CSLANGUAGE_CROATIAN, 171 CSLANGUAGE_CZECH, 172 CSLANGUAGE_DANISH, 173 CSLANGUAGE_DUTCH, 174 CSLANGUAGE_ENGLISH_UK, 175 CSLANGUAGE_ENGLISH_US, 176 CSLANGUAGE_ESTONIAN, 177 CSLANGUAGE_FAEROESE, 178 CSLANGUAGE_FARSI, 179 CSLANGUAGE_FINNISH, 180 CSLANGUAGE_FRENCH, 181 CSLANGUAGE_GEORGIAN, 182 CSLANGUAGE_GERMAN, 183 CSLANGUAGE_GREEK, 184 CSLANGUAGE_GUJARATI, 185 CSLANGUAGE_HEBREW, 186 CSLANGUAGE_HINDI, 187 CSLANGUAGE_HUNGARIAN, 188 CSLANGUAGE_ICELANDIC, 189 CSLANGUAGE_INDONESIAN, 190 CSLANGUAGE_ITALIAN, 191 CSLANGUAGE_JAPANESE, 192 CSLANGUAGE_KANNADA, 193 CSLANGUAGE_KASHMIRI, 194 CSLANGUAGE_KONKANI, 195 CSLANGUAGE_KOREAN, 196 CSLANGUAGE_LATVIAN, 197 CSLANGUAGE_LITHUANIAN, 198 CSLANGUAGE_MACEDONIAN, 199 CSLANGUAGE_MALAY, 200 CSLANGUAGE_MALAYALAM, 201 CSLANGUAGE_MANIPURI, 202 CSLANGUAGE_MARATHI, 203 CSLANGUAGE_NEPALI, 204 CSLANGUAGE_NORWEGIAN, 205 CSLANGUAGE_ORIYA, 206 CSLANGUAGE_POLISH, 207 CSLANGUAGE_PORTUGUESE, 208 CSLANGUAGE_PUNJABI, 209 CSLANGUAGE_ROMANIAN, 210 CSLANGUAGE_RUSSIAN, 211 CSLANGUAGE_SANSKRIT, 212 CSLANGUAGE_SERBIAN, 213 CSLANGUAGE_SINDHI, 214 CSLANGUAGE_SLOVAK, 215 CSLANGUAGE_SLOVENIAN, 216 CSLANGUAGE_SPANISH, 217 CSLANGUAGE_SWAHILI, 218 CSLANGUAGE_SWEDISH, 219 CSLANGUAGE_TAMIL, 220 CSLANGUAGE_TATAR, 221 CSLANGUAGE_TELUGU, 222 CSLANGUAGE_THAI, 223 CSLANGUAGE_TURKISH, 224 CSLANGUAGE_UKRAINIAN, 225 CSLANGUAGE_URDU, 226 CSLANGUAGE_UZBEK, 227 CSLANGUAGE_VIETNAMESE, 228 CSLANGUAGE_COLUMBIAN, 229 } 230 231 /// Describes the differents file types which are supported are by csound 232 #[derive(Debug, Copy, Clone, Eq, PartialEq)] 233 pub enum FileTypes { 234 /* This should only be used internally by the original FileOpen() 235 API call or for temp files written with <CsFileB> */ 236 CSFTYPE_UNKNOWN = 0, 237 CSFTYPE_UNIFIED_CSD = 1, /* Unified Csound document */ 238 CSFTYPE_ORCHESTRA, /* the primary orc file (may be temporary) */ 239 CSFTYPE_SCORE, /* the primary sco file (may be temporary) 240 or any additional score opened by Cscore */ 241 CSFTYPE_ORC_INCLUDE, /* a file #included by the orchestra */ 242 CSFTYPE_SCO_INCLUDE, /* a file #included by the score */ 243 CSFTYPE_SCORE_OUT, /* used for score.srt, score.xtr, cscore.out */ 244 CSFTYPE_SCOT, /* Scot score input format */ 245 CSFTYPE_OPTIONS, /* for .csoundrc and -@ flag */ 246 CSFTYPE_EXTRACT_PARMS, /* extraction file specified by -x */ 247 248 /* audio file types that Csound can write (10-19) or read */ 249 CSFTYPE_RAW_AUDIO, 250 CSFTYPE_IRCAM, 251 CSFTYPE_AIFF, 252 CSFTYPE_AIFC, 253 CSFTYPE_WAVE, 254 CSFTYPE_AU, 255 CSFTYPE_SD2, 256 CSFTYPE_W64, 257 CSFTYPE_WAVEX, 258 CSFTYPE_FLAC, 259 CSFTYPE_CAF, 260 CSFTYPE_WVE, 261 CSFTYPE_OGG, 262 CSFTYPE_MPC2K, 263 CSFTYPE_RF64, 264 CSFTYPE_AVR, 265 CSFTYPE_HTK, 266 CSFTYPE_MAT4, 267 CSFTYPE_MAT5, 268 CSFTYPE_NIST, 269 CSFTYPE_PAF, 270 CSFTYPE_PVF, 271 CSFTYPE_SDS, 272 CSFTYPE_SVX, 273 CSFTYPE_VOC, 274 CSFTYPE_XI, 275 CSFTYPE_UNKNOWN_AUDIO, /* used when opening audio file for reading 276 or temp file written with <CsSampleB> */ 277 278 /* miscellaneous music formats */ 279 CSFTYPE_SOUNDFONT, 280 CSFTYPE_STD_MIDI, /* Standard MIDI file */ 281 CSFTYPE_MIDI_SYSEX, /* Raw MIDI codes, eg. SysEx dump */ 282 283 /* analysis formats */ 284 CSFTYPE_HETRO, 285 CSFTYPE_HETROT, 286 CSFTYPE_PVC, /* original PVOC format */ 287 CSFTYPE_PVCEX, /* PVOC-EX format */ 288 CSFTYPE_CVANAL, 289 CSFTYPE_LPC, 290 CSFTYPE_ATS, 291 CSFTYPE_LORIS, 292 CSFTYPE_SDIF, 293 CSFTYPE_HRTF, 294 295 /* Types for plugins and the files they read/write */ 296 CSFTYPE_UNUSED, 297 CSFTYPE_LADSPA_PLUGIN, 298 CSFTYPE_SNAPSHOT, 299 300 /* Special formats for Csound ftables or scanned synthesis 301 matrices with header info */ 302 CSFTYPE_FTABLES_TEXT, /* for ftsave and ftload */ 303 CSFTYPE_FTABLES_BINARY, /* for ftsave and ftload */ 304 CSFTYPE_XSCANU_MATRIX, /* for xscanu opcode */ 305 306 /* These are for raw lists of numbers without header info */ 307 CSFTYPE_FLOATS_TEXT, /* used by GEN23, GEN28, dumpk, readk */ 308 CSFTYPE_FLOATS_BINARY, /* used by dumpk, readk, etc. */ 309 CSFTYPE_INTEGER_TEXT, /* used by dumpk, readk, etc. */ 310 CSFTYPE_INTEGER_BINARY, /* used by dumpk, readk, etc. */ 311 312 /* image file formats */ 313 CSFTYPE_IMAGE_PNG, 314 315 /* For files that don't match any of the above */ 316 CSFTYPE_POSTSCRIPT, /* EPS format used by graphs */ 317 CSFTYPE_SCRIPT_TEXT, /* executable script files (eg. Python) */ 318 CSFTYPE_OTHER_TEXT, 319 CSFTYPE_OTHER_BINARY, 320 } 321 322 impl From<u8> for FileTypes { from(item: u8) -> Self323 fn from(item: u8) -> Self { 324 if item > 63 { 325 FileTypes::CSFTYPE_UNKNOWN 326 } else { 327 unsafe { transmute(item) } 328 } 329 } 330 } 331