| 105 | |
| 106 | template <typename Field> |
| 107 | std::string_view port_type(Field f) |
| 108 | { |
| 109 | using type = typename Field::type; |
| 110 | if constexpr(avnd::audio_sample_port<float, type>) |
| 111 | return "Audio port (sample, float)"; |
| 112 | else if constexpr(avnd::audio_sample_port<double, type>) |
| 113 | return "Audio port (sample, double)"; |
| 114 | else if constexpr(avnd::mono_array_sample_port<float, type>) |
| 115 | return "Audio port (mono channel, float)"; |
| 116 | else if constexpr(avnd::mono_array_sample_port<double, type>) |
| 117 | return "Audio port (mono channel, double)"; |
| 118 | else if constexpr(avnd::poly_array_sample_port<float, type>) |
| 119 | return "Audio port (bus, float)"; |
| 120 | else if constexpr(avnd::poly_array_sample_port<double, type>) |
| 121 | return "Audio port (bus, double)"; |
| 122 | else if constexpr(avnd::midi_port<type>) |
| 123 | return "MIDI port"; |
| 124 | else if constexpr(avnd::parameter<type>) |
| 125 | return "Parameter"; |
| 126 | else if constexpr(avnd::message<type>) |
| 127 | return "Message"; |
| 128 | else if constexpr(avnd::callback<type>) |
| 129 | return "Callback"; |
| 130 | else |
| 131 | return "<unknown>"; |
| 132 | } |
| 133 | |
| 134 | template <typename T> |
| 135 | auto type_name() |