Flicks – A unit of time defined in C++
github.com
github.com
Apple's (formerly emagic's) Logic software actually made this visible to the user, using 3840 delta-time units per quarter note and presenting an Event List interface [1] where you could edit integers for offset and length directly. As opposed to other WYSIWIG notation software like Finale and Sibelius, it felt like Logic was hiding nothing from you; you could be sure that everything you saw and heard was rendered declaratively from the same underlying data. Moreover, if you were ever having trouble zooming/subdividing the drag-and-drop user interface for whatever crazy triplet sequence you wanted, you could just break out a calculator and specify exactly what you want, knowing that you wouldn't be "fuzzing" anything by typing in a rounded decimal number.
(It's a good lesson for us as developers - while it can be extra work to build an interface that doesn't hide complexity, professional users will often figure out how to use this to work around other shortcomings in your interface, buying you time to fix them the right way. It's just a matter of finding the right abstractions - representing time as integers is just one example.)
[0] https://www.csie.ntu.edu.tw/~r92092/ref/midi/
[1] https://support.apple.com/kb/PH13096?locale=en_US&viewlocale...
Actually pretty much every midi tracker program (which Logic is even though it also does notation) use delta-time units, of which 3840 per quarter note is pretty standard practice.
Sibelius & Finale are only notation editors. But notation editors might even internally represent the midi event times using 3840 delta-time units even though they deliberately hide that from the end user, for good reason because their user base is musicans who play written sheet music instead of dealing with midi. I don't know that for sure about Sibelius & Finale since their code is closed, but the open source MuseScore editor does use 3840. [1]
Hold on while I break out a calculator to operate my computer. As a former sound engineer I have to tell you nobody liked Logic, they tolerated it as the affordable alternative to Pro Tools until other tools came along. People appreciated its reliability and depth but not the UX.
Though maybe I was just too stubborn to re-input things in different software for each purpose. Needless to say, on the coding side, I was very excited when Node.js was first released!
"The NTSC variations (~29.97, etc) are actually defined as 24 * 1000/1001 and 30 * 1000/1001, which are impossible to represent exactly in a way where 1 second is exact, so we don't bother - they'll be inexact in any circumstance."
The NTSC color subcarrier is exactly 315/88 MHz, so one could make the flick something like 1/528th of this period. The frame is related to the subcarrier by 525 lines by 455/2 color clocks.
See: https://en.wikipedia.org/wiki/Colorburst
So one NTSC frame is exactly 63063 flicks, one 30 Hz frame is exactly 63000 of them, one 24 Hz frame is 78750 of them and one second is exactly 1890000000 of them.
I was all set to file a doc PR but noticed you have to file a CLA. newp.
Thanks.
48 kHz? Someone probably got confused between Nyquist–Shannon sampling theorem and the human ear...
And someone beat me to it hehe
Well, it's a true statement! (But yes, I agree)
sources:
* https://www.ncbi.nlm.nih.gov/pubmed/10848570
For instance for a file with 48Khz sound and 30000/1001 (29.97...) frame rate you would convert to a time scale of 48048000. Worst case would be mixing 48Khz, 44.1Khz and NTSC video: 1009008000.
Sure, flicks seems like a useful tool for people working in those fields, but what about the rest of us?
Seems a bit short sighted, or at least extremely unusual for the average person who doesn't care how audio or video is encoded but still deals with high precision time.
If I'm interested in CPU performance, should I suggest that time be denominated in units that are compatible with common CPU frequencies?
I disagree. We already have enough confusion with time and another unit at the level of timespec is not helpful IMHO. The SI unit of time is the second and 1/sec is Hz, which are used everywhere in science and engineering. I don't want another non-SI time unit getting thrown around and messed up in calculations. 800 years doesn't even come close to covering a single precession rotation of the Earth (26,000 years).
The timespec structure already covers either 2^61 seconds (7.3 * 10^11 years) at an accuracy of a nanosecond. So that's enough to cover 72x the current age of the universe.
I have some experience in astronomical calculations. Things are already quite confusing there, since you often need a monotonically increasing time scale (without seconds leap seconds). There is already enough confusion if someone is in TAI, GPS, or UTC time. Julian day, commonly used in ephemeris calculations, works back to 4713 BC. Believe it or not, we sometimes want to get positions going back that for things like computing proper motions from ancient star catalogs, correlating supernova explosions, and various other recorded historical astronomical events.
> There is already enough confusion if someone is in TAI,
> GPS, or UTC time
Don't forget BCT: https://en.wikipedia.org/wiki/Barycentric_Coordinate_TimeNext they'll invent the 'Ocu-ternion', which is the same as a normal Quaternion but each scalar value is divided by a constant because...VR? Facebook? Who cares, the point is they own it.
if they try to claim patent or trademark that's obviously a problem, but otherwise is this so terrible?
The header file they provided is BSD licensed. You can use it freely, forever, for anything you want.
(EDIT: Obviously, this doesn't invalidate your conclusion, but your conclusion doesn't follow from the premise, at least.)
I don't love Facebook's products, but I struggle to see the downside in them publishing this idea.
https://en.wikipedia.org/wiki/Physical_constant#Table_of_phy...
Archimedes, Pythagoras and Euler might agree.
At least Newton's lab of universal gravitation and Coulomb's law defined their eponymous constants directly.
In other cases the people doing the defining named them retrospectively after the originator of, or most significant contributor to, the concept that motivated the definition.
The point is that we ascribe enough invention to these definitions to commonly name them after the people who invented them.
It is fascinating to dig into definitions and conventions that we know, and to realize that much of what we think of as universal fact is actually an arbitrary choice of history, canonized by time.
It happens often in math that people decide on arbitrary definitions. One fun example is Donald Knuth was fond of defining 0^0 = 1, while some other mathematicians prefer to define 0^0 = 0.