midi-segmentizer
Advanced tools
+18
-0
@@ -28,2 +28,3 @@ "use strict"; | ||
| const uuid_1 = require("uuid"); | ||
| const _1 = require("."); | ||
| const helpers_1 = require("./helpers"); | ||
@@ -300,5 +301,22 @@ const midi_1 = __importDefault(require("./midi")); | ||
| } | ||
| function handleLucky() { | ||
| const segments = (0, _1.segmentizeMidi)(props.data); | ||
| if (!segments) { | ||
| alert("Midi file isn't simple enough to auto-segment..."); | ||
| return; | ||
| } | ||
| setNotes([]); | ||
| setSegments(segments.map((segment) => ({ | ||
| id: (0, uuid_1.v4)(), | ||
| color: getRandomColor(), | ||
| offset: segment.offset, | ||
| notes: segment.notes | ||
| .map((note) => (Object.assign(Object.assign({}, note), { offset: segment.offset }))) | ||
| .map(buildNote), | ||
| }))); | ||
| } | ||
| return (react_1.default.createElement("div", null, | ||
| react_1.default.createElement("div", { style: { position: "fixed" } }, | ||
| react_1.default.createElement("button", { onClick: handleSaveSegment }, "make segment"), | ||
| react_1.default.createElement("button", { onClick: handleLucky }, "i'm feeling lucky"), | ||
| react_1.default.createElement("button", { disabled: !segments.length, onClick: handleSave }, "save segments")), | ||
@@ -305,0 +323,0 @@ react_1.default.createElement("canvas", { onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, id: "react-midiVisualizer-canvas", ref: ref, height: height, width: width }), |
+1
-1
| { | ||
| "name": "midi-segmentizer", | ||
| "version": "2.1.1-3", | ||
| "version": "2.2.0", | ||
| "description": "break a simple midi file into monophonic segments", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
+2
-4
| # midi-segmentizer | ||
| - break a midi file into monophonic segments | ||
| - assume constant tempo and time signature for MVP | ||
| React Component and/or helper functions to help you segment a piece of midi. | ||
| # todo | ||
| - this repo used to be somewhat coherent but now it's a bit all over the place... think about high level organization more | ||
| - determine output => experiement with midi, musicXML... | ||
| - make PR for midiconvert types - controlChanges should be on Track type... MIDI type... | ||
| - write tests to prevent files with tempo changes and mixed meter | ||
@@ -12,0 +10,0 @@ idea: |
+24
-1
| import React, { useEffect, useRef, useState } from "react"; | ||
| import { v4 as uuidv4 } from "uuid"; | ||
| import { Note, Segment } from "."; | ||
| import { Note, Segment, segmentizeMidi } from "."; | ||
| import { | ||
@@ -374,2 +374,24 @@ base64ToArrayBuffer, | ||
| function handleLucky() { | ||
| const segments = segmentizeMidi(props.data); | ||
| if (!segments) { | ||
| alert("Midi file isn't simple enough to auto-segment..."); | ||
| return; | ||
| } | ||
| setNotes([]); | ||
| setSegments( | ||
| segments.map((segment) => ({ | ||
| id: uuidv4(), | ||
| color: getRandomColor(), | ||
| offset: segment.offset, | ||
| notes: segment.notes | ||
| .map((note) => ({ | ||
| ...note, | ||
| offset: segment.offset, | ||
| })) | ||
| .map(buildNote), | ||
| })) | ||
| ); | ||
| } | ||
| return ( | ||
@@ -379,2 +401,3 @@ <div> | ||
| <button onClick={handleSaveSegment}>make segment</button> | ||
| <button onClick={handleLucky}>i'm feeling lucky</button> | ||
| <button disabled={!segments.length} onClick={handleSave}> | ||
@@ -381,0 +404,0 @@ save segments |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
106122
1.19%1882
2.17%2
-33.33%15
-11.76%