Newer
Older
System-Takizawa-kenban / kenban_test / kenban_test.html
<!DOCTYPE html>
<html lang="jp">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>作曲ページ</title>
  <link rel="stylesheet" href="./kenban.css">
  <style>
    .hidden {
      display: none;
    }
  </style>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/tone/14.8.49/Tone.js"></script>
  <script src="https://unpkg.com/@tonejs/midi"></script>
  <script type="text/javascript" src="./kenban_test.js?v=midi_final_fix"></script>
</head>
<body>

<!-- ▼▼▼ MIDIステータス表示(画面右上に固定) ▼▼▼ -->
<div id="midi-status-fixed">
    <p id="midistatus">MIDI: 未接続</p>
</div>
<!-- ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ -->

<div id="app-container">

    <!-- ▼▼▼ ページ上部のコントロールパネル ▼▼▼ -->
    <div id="top-control-panel">
	<div class="control-group">
            <button id="helpButton" class="control-button">? 使い方</button>
        </div>
        <div class="control-group">
            <button id="exportMidiButton" class="control-button">MIDI書き出し</button>
            <label for="importMidiInput" class="control-button">MIDI読み込み</label>
            <input type="file" id="importMidiInput" accept=".mid, .midi" class="hidden">
        </div>
        
        <div class="control-group">
        <label>メトロノーム:</label>
        <div id="metronome-selector" class="tool-selector">
            <div id="metronome-off" class="tool-item" data-state="off">OFF</div>
            <div id="metronome-4n" class="tool-item" data-state="4n">4分</div>
            <div id="metronome-8n" class="tool-item" data-state="8n">8分</div>
        </div>
    </div>
        
        <div class="control-group">
            <label>編集トラック:</label>
            <div id="track-selector" class="tool-selector">
                <div class="tool-item" data-track="track1">1</div>
                <div class="tool-item" data-track="track2">2</div>
                <div class="tool-item" data-track="track3">3</div>
                <div class="tool-item" data-track="track4">4</div>
            </div>
        </div>
        <div class="control-group">
            <div class="input-group">
                <label for="instrumentSelect1">T1:</label>
                <select id="instrumentSelect1" class="control-select">
                    <option value="synth">シンセ</option>
                    <option value="piano">ピアノ</option>
                    <option value="violin">バイオリン</option>
                    <option value="trumpet">トランペット</option>
                </select>
            </div>
            <div class="input-group">
                <label for="instrumentSelect2">T2:</label>
                <select id="instrumentSelect2" class="control-select">
                    <option value="synth">シンセ</option>
                    <option value="piano">ピアノ</option>
                    <option value="violin">バイオリン</option>
                    <option value="trumpet">トランペット</option>
                </select>
            </div>
            <div class="input-group">
                <label for="instrumentSelect3">T3:</label>
                <select id="instrumentSelect3" class="control-select">
                    <option value="piano">ピアノ</option>
                    <option value="synth">シンセ</option>
                    <option value="violin">バイオリン</option>
                    <option value="trumpet">トランペット</option>
                </select>
            </div>
            <div class="input-group">
                <label for="instrumentSelect4">T4:</label>
                <select id="instrumentSelect4" class="control-select">
                    <option value="piano">ピアノ</option>
                    <option value="synth">シンセ</option>
                    <option value="violin">バイオリン</option>
                    <option value="trumpet">トランペット</option>
                </select>
            </div>
            <div class="control-group">
        	<label>鍵盤:</label>
        	<div id="mini-keyboard-container">
        	<!-- JavaScriptによってミニ鍵盤がここに描画されます -->
        	</div>
	    </div>
        </div>
    </div>
    <!-- ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ -->

    <!-- ▼▼▼ 音符ツールボックス ▼▼▼ -->
    <div id="note-length-selector" class="tool-selector">
    	<div class="tool-group-left">
        <div class="tool-item" data-length="1n">全</div>
        <div class="tool-item" data-length="2n">2分</div>
        <div class="tool-item" data-length="4n">4分</div>
        <div class="tool-item" data-length="8n">8分</div>
        <div class="tool-item" data-length="16n">16分</div>
        <div id="dotButton" class="tool-item toggle-item">付点</div>
        <div id="auditionButton" class="tool-item toggle-item">試奏</div>
        </div>
        <div class="zoom-controls">
        <div class="input-group">
            <label for="zoom-x">横:</label>
            <input type="range" id="zoom-x" min="20" max="400" step="10" value="100">
            <span id="zoom-x-value" class="zoom-value">100%</span>
        </div>
        <div class="input-group">
            <label for="zoom-y">縦:</label>
            <input type="range" id="zoom-y" min="50" max="200" step="10" value="100">
            <span id="zoom-y-value" class="zoom-value">100%</span>
        </div>
    </div>
    </div>
    <!-- ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ -->

    <!-- ピアノロールエリア -->
    <div id="pianoRollContainer">
        <div id="timeline-container">
            <canvas id="timelineCanvas"></canvas>
        </div>
        <canvas id="pianoRollCanvas"></canvas>
    </div>
    <div id="resize-handle"></div>
    <!-- ▼▼▼ ピアノロール下のコントロールパネル ▼▼▼ -->
    <div id="bottom-control-panel">
        <div class="control-group-bottom left">
            <label for="numMeasuresInput">小節数:</label>
            <input id="numMeasuresInput" type="number" min="1" value="2" class="control-input">
            <button id="setMeasuresButton" class="control-button">設定</button>
        </div>
        <div class="control-group-bottom center">
            <button id="playButton" class="control-button">▶ 再生</button>
            <button id="pauseButton" class="control-button">⏸ 一時停止</button>
            <button id="stopButton" class="control-button">⏹ 停止</button>
        </div>
        <div class="control-group-bottom right">
            <div class="input-group">
                <label for="tempo">BPM:</label>
                <input type="number" id="tempo" value="120" min="1" class="control-input">
            </div>
            <div class="input-group">
                <label>オクターブ:</label>
                <button onclick="decreaseOctave()" class="control-button small-btn">-</button>
                <span id="currentOctave">4</span>
                <button onclick="increaseOctave()" class="control-button small-btn">+</button>
            </div>
        </div>
    </div>
    <!-- ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ -->

    <!-- データ表示エリア -->
    <div id="data-display-container" class="hidden">
        <textarea id="pianoRoll" rows="10" cols="70" placeholder="ここに音符データが表示・編集できます"></textarea>
        <button onclick="editNote()">テキストから音符を更新</button>
    </div>
    <button id="showDataButton">ノートデータを表示/非表示</button>

</div> <!-- #app-container の閉じタグ -->

    
<!-- ▼▼▼ ヘルプモーダル ▼▼▼ -->

<div id="help-modal" class="modal-overlay hidden">
    <div class="modal-content">
        <button id="close-modal-button" class="close-button">&times;</button>
        <h2>使い方ガイド</h2>
        
        <!-- ▼▼▼ ここを空のコンテナに変更 ▼▼▼ -->
        <div id="accordion-container" class="accordion-container">
            <!-- JavaScriptによって内容がここに挿入されます -->
        </div>
        <!-- ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ -->
    </div>
</div>

<!-- ▲▲▲ ヘルプモーダル ▲▲▲ -->

  

</body>
</html>