| 143 | } |
| 144 | |
| 145 | void sendMessage(const midi::Message& message) override { |
| 146 | // If frame is undefined, send message immediately |
| 147 | if (message.getFrame() < 0) { |
| 148 | sendMessageNow(message); |
| 149 | return; |
| 150 | } |
| 151 | // Schedule message to be sent by worker thread |
| 152 | MessageSchedule ms; |
| 153 | ms.message = message; |
| 154 | int64_t deltaFrames = message.getFrame() - APP->engine->getBlockFrame(); |
| 155 | // Delay message by current Engine block size |
| 156 | deltaFrames += APP->engine->getBlockFrames(); |
| 157 | // Compute time in next Engine block to send message |
| 158 | double deltaTime = deltaFrames * APP->engine->getSampleTime(); |
| 159 | ms.timestamp = APP->engine->getBlockTime() + deltaTime; |
| 160 | |
| 161 | std::lock_guard<decltype(mutex)> lock(mutex); |
| 162 | messageQueue.push(ms); |
| 163 | cv.notify_one(); |
| 164 | } |
| 165 | |
| 166 | // Consumer thread methods |
| 167 |
no test coverage detected