Javascript Piano с возможностью записи MIDI - Не могу понять, как заставить его немедленно генерировать файл MIDI - PullRequest
0 голосов
/ 06 октября 2019

Я медленно работал над этим монстром Франкенштейна онлайн-пианино. Вот что у меня есть: http://www.skyetheguy.com/puerlingpianoexposed.html

Я пытаюсь сделать пианино на HTML5, которое отвечало бы так же, как пианино на основе Unity от Recursivearts, добавив при этом функцию записи того, кем вы былииспользуя MIDI, для последующего использования в DAW по вашему выбору.

В тот момент, когда вы нажимаете кнопку «Запись», он создает строки текста, которые заканчиваются после нажатия кнопки «Стоп».

Когда одна нота (C0) получает удар, она выглядит следующим образом:

if (e.keyCode == 49 && shiftinUse == 0) {
        nonfunctionalKey = 0;
        trackID = C0;
        if (ittybittymidi == 1) {
            document.getElementById('txtexport').value += "\n" + totalmilliSeconds + " On ch=1 n=36 v=98";
            document.addEventListener("keyup", C0keyupOff);
            function C0keyupOff() {
                if (e.keyCode == 49) {
                    document.getElementById('txtexport').value += "\n" + totalmilliSeconds + " On ch=1 n=36 v=0";
                    document.removeEventListener("keyup", C0keyupOff);
                }
            }
        }
    }

После того, как вы нажмете Стоп и создадите последнюю строку этого текстового блока, вы можете взять весь этот текст и вставить егов этот конвертер TXT в MIDI, который создал Пит ван Оострум (http://valentin.dasdeck.com/midi/)), который я загрузил на свой сайт: http://www.skyetheguy.com/midi_class_v178/txt2mid.php

Код на этой конкретной странице PHP не мой иполучает больше кода с другой более длинной страницы PHP, но выглядит примерно так:

<?php
@set_time_limit(120);
error_reporting(E_ALL);

$PHP_SELF = $_SERVER['PHP_SELF'];

if (isset($_POST['txt'])){
    $txt = $_POST['txt'];
    if (get_magic_quotes_gpc()==1) $txt = stripslashes($txt);
}else{
    $txt = '';

}
?>
<!doctype html>
<html>
<head>
<title>Text2Midi</title>
</head>
<body>

<form action="<?=$PHP_SELF?>" method="post">
<textarea name="txt" cols="100" rows="30"><?php echo $txt?></textarea><br />
<input type="submit" value=" Generate MIDI File " />
</form>

<div>
<?php
if (isset($_POST['txt'])){
    $save_dir = 'tmp/';
    srand((double)microtime()*1000000);
    $file = $save_dir.rand().'.mid';

    /****************************************************************************
    MIDI CLASS CODE
    ****************************************************************************/
    require('./classes/midi.class.php');

    $midi = new Midi();
    $midi->importTxt($txt);
    $midi->saveMidFile($file, 0666);
?>
<br /><input type="button" name="download" value="Download MIDI File" onclick="self.location.href='download.php?f=<?php echo urlencode($file)?>'" />
<?php
}
?>
</div>

</body>
</html>

Затем вы можете загрузить файл MIDI того, что вы играли. Однако я понятия не имею, как это сделать. все происходит проще,Я хочу нажать «Запись», нажать «Стоп», а затем сразу же появиться кнопка «Загрузить файл MIDI» прямо под остальными кнопками. Возможно ли что-то подобное? Моя неуместная идея изменить страницу пианино на PHP и скопировать и вставить весь код вместе определенно не сработала.

Большое спасибо за вашу помощь и надеюсь, что у вас замечательный деньи далее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...