Browse Source

fix typo

main
James Fenn 1 week ago
parent
commit
1fa9b08f15
1 changed files with 1 additions and 1 deletions
  1. +1
    -1
      blog/2021-01-31-Audio-Automation.md

+ 1
- 1
blog/2021-01-31-Audio-Automation.md View File

@@ -46,7 +46,7 @@ With this established, implementing the MIDI API was as simple as connecting the

## Solving Latency Issues

When I ran my first program with this library, it seemed a bit unstable - the timing was inconsistent, and some notes played faster than others - which wasn't a great experience after spending an entire day building it. While my metronome was working correctly, it seems that Flows (or Java in general) are not as precise with their timing. Some flows were taking 100ms or more to process an event, which had drastic consequences the music my program was playing.
When I ran my first program with this library, it seemed a bit unstable - the timing was inconsistent, and some notes played faster than others - which wasn't a great experience after spending an entire day building it. While my metronome was working correctly, it seems that Flows (or Java in general) are not as precise with their timing. Some flows were taking 100ms or more to process an event, which had drastic consequences for the music my program was playing.

I decided that the easiest way to solve this would be to attach a specific timestamp to each event - a `metronome(500)` would send `startTime + [0, 500, 1000, 1500, ...]` and so on. However, this presented the challenge of how to send multiple values through the path of a single Flow. Since flows only support one data type, I needed to either create a wrapper object for every value they use, or write my own implementation; I ended up doing a bit of both.



Loading…
Cancel
Save