1

Тема: Создаём программу Complement MIDI converter

Формы, механизмы, энергия наномира. Сообщение 87 060

Пикотехнология белков, ДНК, РНК - 2

Создаём программу Complement MIDI converter

https://habrahabr.ru/post/257813/

https://img-fotki.yandex.ru/get/217607/158289418.3f5/0_177cc0_37bfa49c_orig.gif

https://img-fotki.yandex.ru/get/197741/158289418.3f5/0_177cc5_6facf2b9_orig.gif

2

Re: Создаём программу Complement MIDI converter

https://github.com/tirnak/MIDI.js/blob/ … hoven.html

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <!-- polyfill -->
    <script src="../inc/shim/Base64.js" type="text/javascript"></script>
    <script src="../inc/shim/Base64binary.js" type="text/javascript"></script>
    <script src="../inc/shim/WebAudioAPI.js" type="text/javascript"></script>
    <!-- midi.js package -->
    <script src="../js/midi/audioDetect.js" type="text/javascript"></script>
    <script src="../js/midi/gm.js" type="text/javascript"></script>
    <script src="../js/midi/loader.js" type="text/javascript"></script>
    <script src="../js/midi/plugin.audiotag.js" type="text/javascript"></script>
    <script src="../js/midi/plugin.webaudio.js" type="text/javascript"></script>
    <script src="../js/midi/plugin.webmidi.js" type="text/javascript"></script>
    <!-- utils -->
    <script src="../js/util/dom_request_xhr.js" type="text/javascript"></script>
    <script src="../js/util/dom_request_script.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
window.onload = function () {
    MIDI.loadPlugin({
        soundfontUrl: "./soundfont/",
        instrument: "acoustic_grand_piano",
        onprogress: function(state, progress) {
            console.log(state, progress);
        },
        onsuccess: function() {
            play();
        }
    });
};
var keys = {
    4 : {
        C : 1,
        D : 1,
        F : 1,
        G : 1
    }
};
var player = {
    barDuration : 8,
    timeline : 0,
    velocity : 127,
    key : keys[4],
    tempAlts : {},
    play : function(noteString, duration, moveTime) {
        var noteInt = this.calcNote(noteString);
        MIDI.noteOn(0, noteInt, this.velocity, this.timeline);
        MIDI.noteOff(0, noteInt, this.velocity, this.timeline + this.barDuration * duration);
        if (typeof moveTime !== 'undefined' && moveTime === true) {
            this.move(duration);
        }
    },
    move : function(duration) {
        this.timeline += this.barDuration * duration;
        if (this.isEndOfBar()) {
            this.tempAlts = {};}
    },
    calcNote : function(noteString) {
        var note = noteString[0];
        var noteWithOctave = noteString.substring(0,2);
        var altering = this.getAltering(noteString);
        // set altering
        if (altering) {
            this.setTempAltering(noteWithOctave, altering);
        }
        // if temporary altering is set - start keys shouldn't be applied
        if (this.tempAlts[noteWithOctave] !== undefined) {
            return MIDI.keyToNote[noteWithOctave] + this.tempAlts[noteWithOctave];
        }
        return MIDI.keyToNote[noteWithOctave] +
                (this.key[note] !== undefined ? this.key[note] : 0);
    },
    isEndOfBar : function() {
        return !!(this.timeline % this.barDuration === 0)
    },
    getAltering : function(noteString) {
        var altering = noteString[2];
        return altering !== undefined ? altering : false;
    },
    setTempAltering : function(noteWithOctave, altering) {
        switch (altering) {
            case 'b': this.tempAlts[noteWithOctave] = -1; break;
            case '%': this.tempAlts[noteWithOctave] = 0;  break;
            case '#': this.tempAlts[noteWithOctave] = 1;  break;
        }
    }
}
function play() {
    MIDI.setVolume(0, 80);
    // first bar
    player.play('C2', 1);
    player.play('C1', 1);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    // second bar
    player.play('B1', 1);
    player.play('B2', 1);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    // third bar
    player.play('A1', 1/2);
    player.play('A2', 1/2);
    player.play('A3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('A3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('F1', 1/2);
    player.play('F2', 1/2);
    player.play('A3', 1/12, true);
    player.play('D4%', 1/12, true);
    player.play('F4', 1/12, true);
    player.play('A3', 1/12, true);
    player.play('D4', 1/12, true);
    player.play('F4', 1/12, true);
    // fourth bar
    player.play('G1', 1/2);
    player.play('G2', 1/2);
    player.play('G3', 1/12, true);
    player.play('B3#', 1/12, true);
    player.play('F4', 1/12, true);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('G1', 1/2);
    player.play('G2', 1/2);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('D4#', 1/12, true);
    player.play('F3', 1/12, true);
    player.play('B3', 1/12, true);
    player.play('D4', 1/12, true);
    // fifth bar
    player.play('G2', 1);
    player.play('C2', 1);
    player.play('C3', 1);
    player.play('E3', 2/25, true);
    player.play('G3', 2/25, true);
    player.play('C4', 2/25, true);
    player.play('G3', 2/25, true);
    player.play('C4', 2/25, true);
    player.play('E4', 2/25, true);
    player.play('G3', 2/25, true);
    player.play('C4', 2/25, true);
    player.play('E4', 2/25, true);
    player.play('G4', 2/25 * 1.5);
    player.play('G3', 2/25, true);
    player.play('C4', 2/25, true);
    player.play('E4', 2/25, true);
    player.play('G4', 1/25, true);
    // sixth bar
    player.play('B1#', 1);
    player.play('G2', 1);
    player.play('B2#', 1);
    player.play('G4', 12/25);
    player.play('G3', 2/25, true);
    player.play('D4', 2/25, true);
    player.play('F4', 2/25, true);
    player.play('G3', 2/25, true);
    player.play('D4', 2/25, true);
    player.play('F4', 2/25, true);
    player.play('G3', 2/25, true);
    player.play('D4', 2/25, true);
    player.play('F4', 2/25, true);
    player.play('G4', 2/25 * 1.5);
    player.play('G3', 2/25, true);
    player.play('D4', 2/25, true);
    player.play('F4', 2/25, true);
    player.play('G4', 1/25, true);
    // seventh bar
    player.play('C2', 1/2);
    player.play('C3', 1/2);
    player.play('G3', 1/12);
    player.play('G4', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('G3', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('E4', 1/12, true);
    player.play('F1', 1/2);
    player.play('F2', 1/2);
    player.play('A3', 1/12);
    player.play('A4', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('F4', 1/12, true);
    player.play('A3', 1/12);
    player.play('A4', 1/12, true);
    player.play('C4', 1/12, true);
    player.play('F4', 1/12, true);
}
</script>
</body>
</html>

3

Re: Создаём программу Complement MIDI converter

https://img-fotki.yandex.ru/get/228104/158289418.3f5/0_177cc8_bba7dcb7_orig.png

4

Re: Создаём программу Complement MIDI converter

Формы, механизмы, энергия наномира. Сообщение 87 100

Письмо Дидье Маруани / Didier Marouani от Кушелева

Создаём программу Complement MIDI converter

Программа создана!

https://img-fotki.yandex.ru/get/194989/158289418.3f8/0_177ee5_61232de_L.jpg

Знакомьтесь, комплементарный Бах:

Оригинал: https://cloud.mail.ru/public/2TLB/kZ45e67on
Комплемент: https://cloud.mail.ru/public/JEKG/M6xWMxJu7

5

Re: Создаём программу Complement MIDI converter

Создаём программу Complement MIDI converter

https://img-fotki.yandex.ru/get/225029/158289418.3f9/0_177f3d_bfcf059b_L.jpg

Знакомьтесь, комплементарный Моцарт:

Оригинал: https://cloud.mail.ru/public/BDE4/JFpXGkLS1
Комплемент: https://cloud.mail.ru/public/5jLa/MjUqCriRX

6

Re: Создаём программу Complement MIDI converter

Формы, механизмы, энергия наномира. Сообщение 87 349

Письмо Дидье Маруани / Didier Marouani от Кушелева

Создаём программу Complement MIDI converter

Профессиональный музыкант пытается отгадать оригинальные произведения Баха и Моцарта, из которых были получены комплементарные произведения.

https://img-fotki.yandex.ru/get/246231/158289418.40c/0_178ce6_93a7c3bb_orig.jpg
В первом сюжете я объясняю музыканту, что такое комплементарное музыкальное произведение.

https://img-fotki.yandex.ru/get/195990/158289418.40c/0_178ce7_d75756a6_orig.jpg
Во втором сюжете музыкант пытается узнать произведение Баха и Моцарта, но ...

Оба сюжета здесь:

https://cloud.mail.ru/public/8Yvd/JCYCkrh7Z

Оригинальную музыку Баха и Моцарта, а так же комплементарные произведения можно послушать по ссылкам, которые есть в этой теме: http://nanoworld.org.ru/topic/1665/

7

Re: Создаём программу Complement MIDI converter

Формы, механизмы, энергия наномира. Сообщение 87 352

Пикотехнология белков, ДНК, РНК - 3

Создаём программу Complement MIDI converter

Skype:

[23.04.2017 12:04:04] Кушелев Александр Юрьевич: Привет!
[23.04.2017 12:04:24] Кушелев Александр Юрьевич: Я тут обнаружил странную ошибку в проге. Вот этот геном: https://www.ncbi.nlm.nih.gov/nuccore/292397674
[23.04.2017 12:04:52] Кушелев Александр Юрьевич: Обрабатывается таким образом, что html не показывает чёрные элементы, а ftml-3 показывает.
[23.04.2017 12:06:49] Кушелев Александр Юрьевич: Здесь результаты обработки: https://cloud.mail.ru/public/Lj7t/PUB46Mcqx
[24.04.2017 11:26:19] Va12220(Valqwa): понял. смотрю
[24.04.2017 12:54:43] Кушелев Александр Юрьевич: Меня срочнее интересует обработка подпапок и графические образы html-файлов. Вручную лопатить не камильфо...
[24.04.2017 12:55:10] Va12220(Valqwa): планирую в среду поутру к тебе. будешь дома ? Нет планов не быть дома ?
[24.04.2017 12:55:34] Va12220(Valqwa): рвут меня рвут на части. Не смог в выходные приступить к программе
[24.04.2017 12:55:36] Кушелев Александр Юрьевич: Пока вроде дома должен быть
[24.04.2017 12:57:42] Va12220(Valqwa): Гуд. хорошо. ну а потом на майских ещё в планах тебя подергать за извилину.
[24.04.2017 12:58:20] Va12220(Valqwa): Активный член форума "Татьяна" так и не ответила мне в скайпе. она наверное в форуме сама с собой общается.
[24.04.2017 12:58:39] Кушелев Александр Юрьевич: Может не заметила
[24.04.2017 13:02:07] Va12220(Valqwa): А жаль. Вопрос к ней связан с привлечением её к варианту возглавить получение финансов для проекта Рубиновая энергетика и Пико2017 от *****.
[24.04.2017 13:04:57] Кушелев Александр Юрьевич: Она форум читает. В скайпе, как я понял, она не работает
[24.04.2017 13:24:28] Va12220(Valqwa): без слов
[24.04.2017 13:28:15] Кушелев Александр Юрьевич: А ты, если доделаешь прогу и будет время, можешь послушать 6 мелодий в музыкальном размере 7/8, которые закодированы одной нуклеотидной последовательностью: http://nanoworld.org.ru/topic/1675/
[24.04.2017 19:25:51] Кушелев Александр Юрьевич: Привет! А твоя программа сможет обработать весь этот геном? https://www.ncbi.nlm.nih.gov/protein/75 … W6YTK2A01R
[24.04.2017 19:26:30] Кушелев Александр Юрьевич: Мне нужно получить корректный html-файл, а лучше сразу его графический образ
[24.04.2017 19:27:04] Кушелев Александр Юрьевич: И html-3 файл
[24.04.2017 19:56:49] Кушелев Александр Юрьевич: Вот такие геномы интересно обрабатывать на уровне html-файла и графического образа
[24.04.2017 19:56:50] Кушелев Александр Юрьевич: https://www.ncbi.nlm.nih.gov/nuccore/508078133#
[25.04.2017 12:57:09] Va12220(Valqwa): саша привет. я проверю сейчас
[25.04.2017 13:01:16] Va12220(Valqwa): первая ссылочка
ORIGIN     
        1 myarraytkt rtgclqckqr kikcdehkps ccnckrhqss csylqyipvg srpghphpsi
       61 lptsqhstqt irsrtpsqls fresspskgl rplpleftil dlellyfytt ttsneilghh
      121 ltgthvwqth vvtisfqhtf llyellslaa qhlaflhtas lsqskrylna atlyhlksis
      181 tfrnelqnit rensdaccac asllglhawt npggrgsslf fpgqeavess pgsgiawykl
      241 hrganeilks nlerirdgql wdmirpwqsi spqavgfefp tplpmeegan ldavaecwvy
      301 sdlsiddkla leealqtlrl ifsmvsimdi eisnytails wttimpkrfc emveekypqa
      361 lilvavycvl lkrldefwwi rgkaeslmga vkrelpgvwd swlewpsrel dgsaidgegk
      421 alvchik
ну совсем странные буковки - с ними надо отдельно "учиться" работать
просто нужны правила. Далее как обычно
[25.04.2017 13:02:05] Va12220(Valqwa): вторая ссылочка - там конечно ГИПЕР большая цепочка
сейчас подгрузится  - попробую её "взять" ))
[25.04.2017 13:04:10] Кушелев Александр Юрьевич: 1000 извинений. Там нужно пройти по ссылке: accession KN832874.1: https://www.ncbi.nlm.nih.gov/nuccore/751754252
[25.04.2017 13:04:45] Кушелев Александр Юрьевич: И это только часть. Если нажать на ссылку CDS, то предложат загрузить нуклеотидную последовательность. Могу сразу тебе её кинуть в скайпе
[25.04.2017 13:05:01] Va12220(Valqwa): давай
[25.04.2017 13:06:55] Кушелев Александр Юрьевич: Это полные геномы. Мне интересно анализировать их целиком по файлам html, а ещё лучше по их графическим образам
[25.04.2017 13:13:46] Va12220(Valqwa): первый - kind03047 - там 309 тысяч триплетов!
[25.04.2017 13:25:08] Va12220(Valqwa): остальное считается ОЧЕНЬ долго,
я думаю пока что тоже поставить ограничение на размер файла при выводе миди.
[25.04.2017 13:28:53] Va12220(Valqwa): прислать то ты мне файлы прислал. только
[gap 100 bp]    Expand Ns
не нажал. все в пустую мегабайты по проводам гоняешь )
[25.04.2017 13:33:51] Кушелев Александр Юрьевич: А я поэтому и прислал тебе ссылку, что сам не могу там сделать Expand. Что-то не срабатывает.
[25.04.2017 13:34:55] Va12220(Valqwa): ясно )
я гружу фасту сразу. там уже все(экпанд)учтено
[25.04.2017 13:35:17] Кушелев Александр Юрьевич: А...
[25.04.2017 13:37:10] Кушелев Александр Юрьевич: Да. Миди придётся ограничить.
[25.04.2017 14:36:15] Кушелев Александр Юрьевич: Что-то длина строчек в html-файле вдруг разная стала. В чём проблема?
[25.04.2017 14:37:18] Va12220(Valqwa): сам удивляюсь )
[25.04.2017 14:37:54] Кушелев Александр Юрьевич: Может шрифт слетел?
[25.04.2017 15:07:47] Кушелев Александр Юрьевич: А сможешь сделать в МИДИ-конвертере округление номеров нот до множества разрешённых номеров? И этот набор разрешённых номеров нужно держать отдельным файлом-таблицей.
[25.04.2017 15:08:05] Кушелев Александр Юрьевич: Точнее, не таблицей, а строкой
[25.04.2017 15:08:13] Кушелев Александр Юрьевич: Или столбцом
[25.04.2017 15:09:05] Кушелев Александр Юрьевич: Столбец разрешённых номеров будет состоять из максимум 12 чисел. Остальные получаются добавлением 12*n
[25.04.2017 15:10:22] Кушелев Александр Юрьевич: Фактически я буду задавать номера разрешённых нот для самой нижней октавы, а остальные будут получаться добавлением 12*(номер октавы-1)
[25.04.2017 15:46:07] Va12220(Valqwa): Могу. Все могу. Я же волшебник.)
но вот матлаб уже не тянет те самые супер последовательности триплетов в которых их сотни тысяч(((
а значит все равно надо переписывать (и побыстрее) все на С
[25.04.2017 15:46:33] Va12220(Valqwa): даже у меня не потянул. А у меня тут компец будь здоров.
[25.04.2017 17:40:00] Кушелев Александр Юрьевич: Можно же разбить на блоки, например, по 100 000 или по 50 000
[8:34:13] Кушелев Александр Юрьевич: Глядя на картинки можно понять, что твоя прога не обнуляет память, поэтому следующая структура накладывается на предыдущую. Если следующая структура короче, то видна "из под пятницы суббота" smile
[8:53:35] Кушелев Александр Юрьевич: Поэтому приходится вручную перетаскивать из папки в папку фасту, а потом обратно файлы-результаты. Версия подпапочной корректной обработки может сильно сэкономить время.
[18:43:44] Кушелев Александр Юрьевич: Таблица, точнее строка разрешённых нот для complement-midi-converter
1,1,1,1,1,1,1,1,1,1,1,1,0 -все 12 нот в каждой октаве разрешены, т.е. получается обычный комплемент.
[18:44:33] Кушелев Александр Юрьевич: На первом месте нота до, на втором - до-диез, на последнем - си.
[18:47:04] Кушелев Александр Юрьевич: 13 цифра - тип округления. 0 - округления нет. 1 - округление до ближайшего верхнего номера, 2 - округление до ближайшено нижнего номера, 3 - округление до ближайшего (верхнего или нижнего. Если оба одинаково близко, то до верхего.) 4 - то же (если оба одинаково близко, то до нижнего).
[18:47:32] Кушелев Александр Юрьевич: Вариант таблицы с разрешёнными белыми клавишами рояля:
[18:49:42] Кушелев Александр Юрьевич: 1,0,1,0,1,1,0,1,0,1,0,1,3 (с округлением до ближайшего верхнего или нижнего. Если одинаково близки, то верхнего).

8

Re: Создаём программу Complement MIDI converter

Пишем программу Пикотех и Complement-MIDI-Converter

https://img-fotki.yandex.ru/get/118528/158289418.40c/0_178ce9_96ded3c6_XL.jpg

https://img-fotki.yandex.ru/get/169451/158289418.40c/0_178cea_cea381a1_XL.jpg

https://img-fotki.yandex.ru/get/198786/158289418.40c/0_178ceb_3e7ef446_XL.jpg