Skip to content

Commit

Permalink
WIP: added functions for track volume in song generation (TS only)
Browse files Browse the repository at this point in the history
  • Loading branch information
Modrigue committed Dec 26, 2023
1 parent 2fc3c8b commit aae4ecd
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 19 deletions.
2 changes: 2 additions & 0 deletions ts/song_generator/counterpoint_1_1.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// source: https://www.youtube.com/@JacobGran

const perfectConsonances = [0, 7]; // unison, 8ves and 5ths
const imperfectConsonances = [3, 4, 8, 9]; // 3rds and 6ths
const dissonances = [1, 2, 5, 6, 10, 11]; // 2nds, 4ths and 7ths
Expand Down
15 changes: 10 additions & 5 deletions ts/song_generator/midiFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,16 @@ class MidiFile
this.Tracks[trackIndex].PitchBend(cents, deltaTime);
}

public ControlChangeEntrySlider(trackIndex: number, refParam: number = 0)
{
this.Tracks[trackIndex].ControlChangeEntrySlider(refParam);
}

public ControlChangeVolume(trackIndex: number, volume: number = 0)
{
this.Tracks[trackIndex].ControlChangeVolume(volume);
}

public ControlChangeFine(trackIndex: number, refParam: number = 0)
{
this.Tracks[trackIndex].ControlChangeFine(refParam);
Expand All @@ -101,11 +111,6 @@ class MidiFile
this.Tracks[trackIndex].ControlChangeCoarse(refParam);
}

public ControlChangeEntrySlider(trackIndex: number, refParam: number = 0)
{
this.Tracks[trackIndex].ControlChangeEntrySlider(refParam);
}

public ToBytes(): Uint8Array
{
let headerBytes : Uint8Array = this.Header.ToBytes();
Expand Down
21 changes: 15 additions & 6 deletions ts/song_generator/midiTrack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ class MidiTrack

public Channel: number; // 4 bytes
public InstrumentId: number;
public Volume: number;

constructor(channel: number)
{
Expand All @@ -15,6 +16,7 @@ class MidiTrack
this.InstrumentId = 1; // default, piano
this.UpdateInstrument(this.InstrumentId);

this.Volume = 80;
this.Muted = false;

// add end of track event
Expand Down Expand Up @@ -131,23 +133,30 @@ class MidiTrack
this.AddEvent(event);
}

public ControlChangeFine(refParam: number = 0): void
public ControlChangeEntrySlider(refParam: number = 0): void
{
const event: MidiTrackEvent = ControlChangeFineEvent(this.Channel - 1, refParam);
const event: MidiTrackEvent = ControlChangeEntrySliderEvent(this.Channel - 1, refParam);
//DisplayHexBytesArray(event.ToBytes());
this.AddEvent(event);
}

public ControlChangeCoarse(refParam: number = 0): void
public ControlChangeVolume(volume: number = 0): void
{
const event: MidiTrackEvent = ControlChangeCoarseEvent(this.Channel - 1, refParam);
const event: MidiTrackEvent = ControlChangeVolumeEvent(this.Channel - 1, volume);
//DisplayHexBytesArray(event.ToBytes());
this.AddEvent(event);
}

public ControlChangeEntrySlider(refParam: number = 0): void
public ControlChangeFine(refParam: number = 0): void
{
const event: MidiTrackEvent = ControlChangeEntrySliderEvent(this.Channel - 1, refParam);
const event: MidiTrackEvent = ControlChangeFineEvent(this.Channel - 1, refParam);
//DisplayHexBytesArray(event.ToBytes());
this.AddEvent(event);
}

public ControlChangeCoarse(refParam: number = 0): void
{
const event: MidiTrackEvent = ControlChangeCoarseEvent(this.Channel - 1, refParam);
//DisplayHexBytesArray(event.ToBytes());
this.AddEvent(event);
}
Expand Down
25 changes: 17 additions & 8 deletions ts/song_generator/midiTrackEvent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,23 @@ function PitchBendEvent(channel: number, cents: number, deltaTime: number): Midi
return new MidiTrackEvent(deltaTime, data, MidiTrackEventType.PICTH_BEND, cents);
}

function ControlChangeEntrySliderEvent(channel: number, refParam: number = 0): MidiTrackEvent
{
const start: number = 0xB0 + (channel & 0xF);
const data : Array<number> = [start, 6, refParam];

return new MidiTrackEvent(0, data, MidiTrackEventType.CONTROL_CHANGE_ENTRY_SLIDER);
}

function ControlChangeVolumeEvent(channel: number, volume: number = 0): MidiTrackEvent
{
const start: number = 0xB0 + (channel & 0xF);
const data : Array<number> = [start, 7, volume];
//console.log(DisplayHexArray(data));

return new MidiTrackEvent(0, data, MidiTrackEventType.CONTROL_CHANGE_ENTRY_SLIDER);
}

function ControlChangeFineEvent(channel: number, refParam: number = 0): MidiTrackEvent
{
const start: number = 0xB0 + (channel & 0xF);
Expand All @@ -122,12 +139,4 @@ function ControlChangeCoarseEvent(channel: number, refParam: number = 0): MidiTr
const data : Array<number> = [start, 101, refParam];

return new MidiTrackEvent(0, data, MidiTrackEventType.CONTROL_CHANGE_COARSE);
}

function ControlChangeEntrySliderEvent(channel: number, refParam: number = 0): MidiTrackEvent
{
const start: number = 0xB0 + (channel & 0xF);
const data : Array<number> = [start, 6, refParam];

return new MidiTrackEvent(0, data, MidiTrackEventType.CONTROL_CHANGE_ENTRY_SLIDER);
}

0 comments on commit aae4ecd

Please sign in to comment.