Соннификация javascript, возвращающая только одну заметку - PullRequest
0 голосов
/ 12 декабря 2018

Я пытался использовать скрипт node.js, чтобы превратить некоторые данные в музыку.По какой-то причине скрипт возвращает только одну заметку:

Оригинальный скрипт на github: https://github.com/wbkd/from-data-to-sound имел res.concat (scribble.scale ('c', но выдает ошибку Invalid Scale)имя.

const scribble = require('scribbletune');

// example data
const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];

const min = Math.min(...data);
const octaves = [...Array(5)].map((d, i) => i + 1); // [1, 2, 3, 4, 5]

// creates array of notes like 'c1', 'd1', 'e1', 'gb1', 'ab1', 'bb1', 'c2', ...
const notes = octaves.reduce((res, octave) =>
  res.concat(scribble.scale('c1 major', 'whole tone', octave, false))
, []);

const midiData = scribble.clip({
  notes: data.map(value => notes[value - min]),
  pattern: 'x',
  noteLength: '1/16',
});

// write the MIDI file ???
scribble.midi(midiData, 'data-sonification.mid');

1 Ответ

0 голосов
/ 12 декабря 2018

Из документа scribbletune:

каждый x означает примечание о событии

scribbletune docs / core / clip

Поскольку вы передаете только 1 'x' в качестве шаблона в scribble.clip, он воспроизводит только 1 ноту.Чтобы сыграть все ноты, вы можете попробовать что-то вроде этого:

  const midiData = scribble.clip({
    notes: data.map(value => notes[value - min]),
-   pattern: 'x', // only play 1 note
+   pattern: 'x'.repeat(data.length), // repeat this pattern for each note in data
    noteLength: '1/16',
  });
...