Closed bmcfee closed 6 years ago
It looks like Phase 2 might come for very cheap if we use the 3d Panner: https://tonejs.github.io/examples/#spatialPanner
@davidwhogg -- are "rvtemplate{teff,logg,fe_h}" the right quantities to use?
@bmcfee if so -- here are plots of the joint distributions of the parameters -- they're discrete values on a grid, and very non-uniformly populated!
And here's a JSON string of (Teff, log(g), Fe/H) for the first 50.
[[6000.0, 4.5, 0.0], [4000.0, 3.0, 0.0], [5750.0, 4.0, -0.25], [4000.0, 3.0, 0.0], [6250.0, 4.5, 0.0], [4000.0, 3.0, 0.0], [4750.0, 4.5, 0.0], [4000.0, 3.0, 0.0], [5750.0, 4.0, 0.0], [6500.0, 4.0, 0.0], [6250.0, 4.0, -0.25], [4000.0, 3.0, -1.5], [6000.0, 3.5, 0.0], [4000.0, 4.5, -0.25], [5500.0, 4.5, 0.0], [6000.0, 4.5, 0.0], [4500.0, 4.5, 0.0], [4000.0, 3.0, 0.0], [4000.0, 3.0, 0.0], [4000.0, 3.0, -1.5], [5750.0, 4.5, 0.0], [5500.0, 4.5, 0.0], [5750.0, 4.5, 0.25], [6000.0, 4.5, -0.25], [6250.0, 4.5, -0.25], [4750.0, 4.5, 0.25], [4000.0, 3.0, 0.0], [5000.0, 3.0, 0.0], [4000.0, 3.0, 0.0], [4000.0, 3.0, 0.0], [6000.0, 4.0, 0.25], [5500.0, 4.0, 0.0], [4000.0, 3.0, 0.0], [5500.0, 4.5, 0.0], [6500.0, 4.5, -0.25], [5000.0, 4.5, -0.25], [5000.0, 4.5, -0.25], [4000.0, 3.0, -1.5], [5500.0, 4.5, 0.0], [4000.0, 3.0, 0.0], [4500.0, 3.0, 0.0], [6000.0, 4.5, 0.0], [5500.0, 4.5, 0.0], [4000.0, 3.0, 0.0], [5500.0, 3.5, 0.0], [4000.0, 3.0, 0.0], [4000.0, 3.0, 0.0], [5500.0, 4.5, 0.0], [5250.0, 4.5, -0.25], [5750.0, 4.5, 0.0]]
Thanks @dstndstn!
@bmcfee if so -- here are plots of the joint distributions of the parameters -- they're discrete values on a grid, and very non-uniformly populated!
Are these numbers always quantized like that?
Other notes:
Fe/H
mapping onto the mod index of an fmSynth seems good for making metal/nonmetal sounds: https://tonejs.github.io/examples/#fmSynthlog(g)
to control the ADSR envelope. Small stars = plucky, big stars = wumphy.Alright, I've got a cacophanous mess running now at https://bmcfee.github.io/gaiatone/ (autoplays, be warned).
No localization yet, and it's just spinning up all the synths at once with a drone at the temperature-based frequency.
Metallicity to FM synth sounds pretty good.
log(g) to ADSR is less interesting right now. Since they're just drones, the attack only happens once, so you don't get much chance to observe the effect. This could change if we wire these up with a step sequencer (where the rhythm is based on the id hash), or we could also go back to the idea of using log(g) to flatten the spectrum (somehow).
Spectral flattening seems like a no-go in tone-land. It might be best to just map log(g) onto a low-pass filter.
logg hooked up to an oscillating low-pass filter sounds pretty good. Now we just need spatial data (and continuous T and logg values).
Phase 1
Some thoughts after whiteboarding with @davidwhogg and @dstndstn.
How to sonify a single star in gaia dr2?
T_eff in [1e5, 3e4]
(temperature) => map down to fundamental frequency of a tone generator. No need to quantize here, we can get microtonal with a continuous map. (Linear? Inverse CDF?) I'm thinking a range of[C1, C7]
(~32Hz to 2KHz) ought to give a good spread. Hot stars = high pitch, cool stars = low pitch.log10(g) in [4, 0]
=> Original thought was to use this to control the pitchiness (spectral flatness) of the tone; big stars = diffuse, noisy tone, small stars = pure, pitchy tone. But I'm not sure how easy this is to do in tone.js.Fe/H in [-2, 1]
(or maybe other chemical composition measurements?) => EQ curve. High ratios = high in treble, low ratios = high in bass. Other ideas: use this to control a dynamic range compressor, or the parameters of a MetalSynth.Phase 2
Sonifying a flyby.
The general idea here is that we have a pre-defined trajectory parameterized by some curve
s(t)
. A collection of stars (say, in the hundreds) in the proximity of the curve are pre-loaded, spun up as oscillator sources, and their contributions are mixed with amplitude that scales according to distance froms(t)
as time moves forward.We can then have a background control loop that updates
t
in small increments, and whenevert
changes, so too do the mixing coefficients. A user control can set the increment value (speed) of the ship as it travels along the curve.On top of that, we can have a play-head slider, and play/pause controls, so the user can move to an exact point along the curve and just listen to the active sources in that neighborhood.
Phase 3
Visuals! It'd be great to see what we're listening to. This should be relatively easy to do, especially for someone familiar with js canvas.
Phase 4
Doppler effect. Tone.js does have a pitch shifter, which we could apply as the ship moves past a star. This conflates ship velocity with star temperature though (if that's the source of
f0
), so that's maybe not so great. But it would be sweet.