mirror of
https://github.com/ksherlock/ensoniq-buddy.git
synced 2024-06-09 23:29:28 +00:00
Timer - display actual time
Note - display actual hz simplify 1 * n sample display. don't display invalid samples.
This commit is contained in:
parent
2e68a2c0e0
commit
7a91750238
|
@ -272,6 +272,19 @@ function DurationToSeconds(x) {
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
function DurationSplit(x) {
|
||||
let [time, unit] = split_value2(x);
|
||||
switch (+unit) {
|
||||
case 0:
|
||||
return [+time, "s"];
|
||||
case 1:
|
||||
return [+time / 1e3, "ms"];
|
||||
case 2:
|
||||
return [+time / 60, "ticks"];
|
||||
default:
|
||||
return [0, ""];
|
||||
}
|
||||
}
|
||||
var DurationInput = class extends preact.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
@ -358,16 +371,19 @@ function simplify(res, freq) {
|
|||
}
|
||||
function SampleDisplay(props) {
|
||||
var { shift, freq } = props;
|
||||
if (freq == 0)
|
||||
return [];
|
||||
var freq2 = log2(freq);
|
||||
var fspan = /* @__PURE__ */ preact.h("span", {
|
||||
title: "Frequency"
|
||||
}, freq);
|
||||
var fspann = freq == 1 ? /* @__PURE__ */ preact.h("i", null, "n") : /* @__PURE__ */ preact.h(preact.Fragment, null, "(", fspan, " * ", /* @__PURE__ */ preact.h("i", null, "n"), ")");
|
||||
var rv = [];
|
||||
rv.push(
|
||||
/* @__PURE__ */ preact.h("div", null, "Sample", /* @__PURE__ */ preact.h("sub", null, "n"), " = RAM[ (", fspan, " * ", /* @__PURE__ */ preact.h("i", null, "n"), ") >> ", shift, " ]")
|
||||
/* @__PURE__ */ preact.h("div", null, "Sample", /* @__PURE__ */ preact.h("sub", null, "n"), " = RAM[ ", fspann, " >> ", shift, " ]")
|
||||
);
|
||||
rv.push(
|
||||
/* @__PURE__ */ preact.h("div", null, "Sample", /* @__PURE__ */ preact.h("sub", null, "n"), " = RAM[ (", fspan, " * ", /* @__PURE__ */ preact.h("i", null, "n"), ") / ", 1 << shift, " ]")
|
||||
/* @__PURE__ */ preact.h("div", null, "Sample", /* @__PURE__ */ preact.h("sub", null, "n"), " = RAM[ ", fspann, " / ", 1 << shift, " ]")
|
||||
);
|
||||
if (freq2) {
|
||||
if (freq2 >= shift) {
|
||||
|
@ -393,15 +409,18 @@ function NoteDisplay(props) {
|
|||
const f = note_frq / (sr / (1 << 8 + wave));
|
||||
var best_res = 0;
|
||||
var best_freq = 0;
|
||||
var actual = 0;
|
||||
for (var res = 0; res < 8; ++res) {
|
||||
var tmp = Math.round(f * (1 << calc_shift(res, wave)));
|
||||
const shift = 1 << calc_shift(res, wave);
|
||||
const tmp = Math.round(f * shift);
|
||||
if (tmp >= 65536)
|
||||
break;
|
||||
best_res = res;
|
||||
best_freq = tmp;
|
||||
actual = sr / (256 * shift / tmp);
|
||||
}
|
||||
[best_res, best_freq] = simplify(best_res, best_freq);
|
||||
return /* @__PURE__ */ preact.h(preact.Fragment, null, /* @__PURE__ */ preact.h("div", null, "Wave Size: 256"), /* @__PURE__ */ preact.h("div", null, "Resolution: ", best_res), /* @__PURE__ */ preact.h("div", null, "Frequency: ", best_freq));
|
||||
return /* @__PURE__ */ preact.h(preact.Fragment, null, /* @__PURE__ */ preact.h("div", null, "Note: ", actual.toFixed(2), " Hz"), /* @__PURE__ */ preact.h("div", null, "Wave Size: 256"), /* @__PURE__ */ preact.h("div", null, "Resolution: ", best_res), /* @__PURE__ */ preact.h("div", null, "Frequency: ", best_freq));
|
||||
}
|
||||
function ResampleDisplay(props) {
|
||||
var { osc, size, freq } = props;
|
||||
|
@ -431,25 +450,37 @@ function HyperDisplay(props) {
|
|||
return /* @__PURE__ */ preact.h("div", null, "Relative: ", relative);
|
||||
}
|
||||
function TimerDisplay(props) {
|
||||
var { osc, time } = props;
|
||||
var { osc, duration } = props;
|
||||
const [time, units] = DurationSplit(duration);
|
||||
const sr = calc_sr(osc);
|
||||
const cycles = time * sr;
|
||||
const size = 0;
|
||||
var best_res = 0;
|
||||
var best_freq = 0;
|
||||
var actual = 0;
|
||||
best = [];
|
||||
for (var res = 0; res < 8; ++res) {
|
||||
var shift = 1 << calc_shift(res, size);
|
||||
var f = Math.round(shift * 256 / cycles);
|
||||
if (f >= 65536)
|
||||
continue;
|
||||
var actual = Math.ceil(256 * shift / f);
|
||||
actual = Math.ceil(256 * shift / f);
|
||||
best_res = res;
|
||||
best_freq = f;
|
||||
}
|
||||
[best_res, best_freq] = simplify(best_res, best_freq);
|
||||
var best_shift = calc_shift(best_res, size);
|
||||
return /* @__PURE__ */ preact.h(preact.Fragment, null, /* @__PURE__ */ preact.h("div", null, "Resolution: ", best_res ? best_res : "N/A"), /* @__PURE__ */ preact.h("div", null, "Frequency: ", best_freq ? best_freq : "N/A"), /* @__PURE__ */ preact.h(SampleDisplay, {
|
||||
switch (units) {
|
||||
case "s":
|
||||
break;
|
||||
case "ms":
|
||||
actual *= 1e3;
|
||||
break;
|
||||
case "ticks":
|
||||
actual *= 60;
|
||||
break;
|
||||
}
|
||||
return /* @__PURE__ */ preact.h(preact.Fragment, null, /* @__PURE__ */ preact.h("div", null, "Time: ", actual ? (actual / sr).toFixed(2) + " " + units : "N/A"), /* @__PURE__ */ preact.h("div", null, "Resolution: ", best_res ? best_res : "N/A"), /* @__PURE__ */ preact.h("div", null, "Frequency: ", best_freq ? best_freq : "N/A"), /* @__PURE__ */ preact.h(SampleDisplay, {
|
||||
freq: best_freq,
|
||||
shift: best_shift
|
||||
}));
|
||||
|
@ -621,7 +652,7 @@ var Application = class extends preact.Component {
|
|||
onChange: this._durationChange
|
||||
})), /* @__PURE__ */ preact.h(TimerDisplay, {
|
||||
osc,
|
||||
time: DurationToSeconds(duration)
|
||||
duration
|
||||
}));
|
||||
}
|
||||
hyperChildren() {
|
||||
|
|
|
@ -8,7 +8,7 @@ import { WaveData } from './wave_data';
|
|||
|
||||
import { Oscillators, WaveSize, Resolution, Frequency, Assembler, WaveShape, CheckBox } from './input';
|
||||
|
||||
import { DurationInput, DurationToSeconds } from './duration_input';
|
||||
import { DurationInput, DurationSplit } from './duration_input';
|
||||
|
||||
const C4 = 4*12;
|
||||
|
||||
|
@ -32,21 +32,24 @@ function SampleDisplay(props) {
|
|||
|
||||
var { shift, freq } = props;
|
||||
|
||||
if (freq == 0) return [];
|
||||
|
||||
var freq2 = log2(freq);
|
||||
|
||||
var fspan = <span title="Frequency">{freq}</span>;
|
||||
|
||||
var fspann = freq == 1 ? <i>n</i> : <>({fspan} * <i>n</i>)</>;
|
||||
|
||||
var rv = [];
|
||||
|
||||
rv.push(
|
||||
<div>
|
||||
Sample<sub>n</sub> = RAM[ ({fspan} * <i>n</i>) >> {shift} ]
|
||||
Sample<sub>n</sub> = RAM[ {fspann} >> {shift} ]
|
||||
</div>
|
||||
);
|
||||
rv.push(
|
||||
<div>
|
||||
Sample<sub>n</sub> = RAM[ ({fspan} * <i>n</i>) / {1 << shift} ]
|
||||
Sample<sub>n</sub> = RAM[ {fspann} / {1 << shift} ]
|
||||
</div>
|
||||
);
|
||||
|
||||
|
@ -91,17 +94,22 @@ function NoteDisplay(props) {
|
|||
|
||||
var best_res = 0;
|
||||
var best_freq = 0;
|
||||
var actual = 0;
|
||||
for (var res = 0; res < 8; ++res) {
|
||||
var tmp = Math.round(f * (1 << calc_shift(res, wave)));
|
||||
const shift = (1 << calc_shift(res, wave));
|
||||
const tmp = Math.round(f * shift);
|
||||
if (tmp >= 0x10000) break;
|
||||
best_res = res;
|
||||
best_freq = tmp;
|
||||
|
||||
actual = sr / ( 256 * shift / tmp);
|
||||
}
|
||||
|
||||
[best_res, best_freq] = simplify(best_res, best_freq);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div>Note: { actual.toFixed(2)} Hz</div>
|
||||
<div>Wave Size: 256</div>
|
||||
<div>Resolution: {best_res}</div>
|
||||
<div>Frequency: {best_freq}</div>
|
||||
|
@ -165,8 +173,10 @@ function HyperDisplay(props) {
|
|||
|
||||
|
||||
function TimerDisplay(props) {
|
||||
var {osc, time } = props;
|
||||
var {osc, duration } = props;
|
||||
|
||||
|
||||
const [time, units] = DurationSplit(duration);
|
||||
const sr = calc_sr(osc);
|
||||
|
||||
const cycles = time * sr;
|
||||
|
@ -182,6 +192,7 @@ function TimerDisplay(props) {
|
|||
|
||||
var best_res = 0;
|
||||
var best_freq = 0;
|
||||
var actual = 0;
|
||||
|
||||
best = []
|
||||
for (var res = 0; res < 8; ++res) {
|
||||
|
@ -189,7 +200,7 @@ function TimerDisplay(props) {
|
|||
var f = Math.round(shift * 256 / cycles);
|
||||
if (f >= 0x10000) continue; // break;
|
||||
|
||||
var actual = Math.ceil(256 * shift / f);
|
||||
actual = Math.ceil(256 * shift / f);
|
||||
|
||||
best_res = res;
|
||||
best_freq = f;
|
||||
|
@ -198,8 +209,15 @@ function TimerDisplay(props) {
|
|||
[best_res, best_freq] = simplify(best_res, best_freq);
|
||||
var best_shift = calc_shift(best_res, size);
|
||||
|
||||
switch(units) {
|
||||
case "s": break;
|
||||
case "ms": actual *= 1000; break;
|
||||
case "ticks": actual *= 60; break;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<div>Time: { actual ? (actual / sr).toFixed(2) + " " + units : "N/A" }</div>
|
||||
<div>Resolution: {best_res ? best_res : "N/A"}</div>
|
||||
<div>Frequency: {best_freq ? best_freq : "N/A"}</div>
|
||||
<SampleDisplay freq={best_freq} shift={best_shift} />
|
||||
|
@ -417,7 +435,7 @@ export class Application extends preact.Component {
|
|||
<label>Duration</label> <DurationInput value={duration} onChange={this._durationChange} />
|
||||
</div>
|
||||
|
||||
<TimerDisplay osc={osc} time={DurationToSeconds(duration)} />
|
||||
<TimerDisplay osc={osc} duration={duration} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,18 @@ function split_value(x) {
|
|||
return [ "", 0];
|
||||
}
|
||||
|
||||
export function DurationToUnits(x) {
|
||||
|
||||
let [ time, unit ] = split_value(x);
|
||||
switch (+unit) {
|
||||
case 0: "seconds"; // seconds;
|
||||
case 1: "milliseconds" ; // milliseconds;
|
||||
case 2: "ticks"; // ticks
|
||||
default: return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export function DurationToSeconds(x) {
|
||||
|
||||
let [ time, unit ] = split_value(x);
|
||||
|
@ -24,6 +36,18 @@ export function DurationToSeconds(x) {
|
|||
}
|
||||
}
|
||||
|
||||
export function DurationSplit(x) {
|
||||
|
||||
let [ time, unit ] = split_value(x);
|
||||
switch (+unit) {
|
||||
case 0: return [+time, "s"]; // seconds;
|
||||
case 1: return [+time / 1000, "ms"]; // milliseconds;
|
||||
case 2: return [+time / 60, "ticks"]; // ticks
|
||||
default: return [0, ""];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class DurationInput extends preact.Component {
|
||||
|
||||
constructor(props) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user