equal
deleted
inserted
replaced
48 |
48 |
49 int enqueueMessage(jack_nframes_t frames, void* arg); |
49 int enqueueMessage(jack_nframes_t frames, void* arg); |
50 |
50 |
51 class JackCommand { |
51 class JackCommand { |
52 private: |
52 private: |
|
53 Configuration& configuration; |
|
54 std::wstring_convert<std::codecvt_utf8<wchar_t>> convertor; // TODO: local system encoding |
|
55 |
53 jack_port_t* jackPort = nullptr; |
56 jack_port_t* jackPort = nullptr; |
54 jack_ringbuffer_t* ringBuffer = nullptr; |
57 jack_ringbuffer_t* ringBuffer = nullptr; |
55 pthread_mutex_t messageThreadLock = PTHREAD_MUTEX_INITIALIZER; |
58 pthread_mutex_t messageThreadLock = PTHREAD_MUTEX_INITIALIZER; |
56 pthread_cond_t dataReady = PTHREAD_COND_INITIALIZER; |
59 pthread_cond_t dataReady = PTHREAD_COND_INITIALIZER; |
57 |
60 |
153 return result.str(); |
156 return result.str(); |
154 } |
157 } |
155 |
158 |
156 public: |
159 public: |
157 |
160 |
|
161 JackCommand(Configuration& configuration) : configuration(configuration) { |
|
162 } |
|
163 |
158 void finish(int sig) { |
164 void finish(int sig) { |
159 continueProcessing = false; |
165 continueProcessing = false; |
160 } |
166 } |
161 |
167 |
162 void processJackStream(std::shared_ptr<writer::RelationalWriter> writer, std::function<void() > relationalWriterFlush) { |
168 void processJackStream(std::shared_ptr<writer::RelationalWriter> writer, std::function<void() > relationalWriterFlush) { |
172 metadata.push_back({L"raw", TypeId::STRING}); |
178 metadata.push_back({L"raw", TypeId::STRING}); |
173 writer->startRelation(L"midi", metadata, true); |
179 writer->startRelation(L"midi", metadata, true); |
174 relationalWriterFlush(); |
180 relationalWriterFlush(); |
175 |
181 |
176 // Initialize JACK connection: |
182 // Initialize JACK connection: |
177 std::string clientName = "relpipe-in-jack"; |
183 std::string clientName = convertor.to_bytes(configuration.jackClientName); |
178 jack_client_t* client = jack_client_open(clientName.c_str(), JackNullOption, nullptr); |
184 jack_client_t* client = jack_client_open(clientName.c_str(), JackNullOption, nullptr); |
179 if (client == nullptr) throw JackException(L"Could not create JACK client."); |
185 if (client == nullptr) throw JackException(L"Could not create JACK client."); |
180 |
186 |
181 ringBuffer = jack_ringbuffer_create(RING_BUFFER_SIZE * sizeof (MidiMessage)); |
187 ringBuffer = jack_ringbuffer_create(RING_BUFFER_SIZE * sizeof (MidiMessage)); |
182 |
188 |