Skip to content

Commit bafff34

Browse files
committed
再生前もGUIを表示するように修正
1 parent 73c45c9 commit bafff34

File tree

5 files changed

+52
-34
lines changed

5 files changed

+52
-34
lines changed

SFZ_MIDI_Player/Main.cpp

+6-5
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ void Main()
3232
Optional<MidiData> midiData;
3333

3434
DragDrop::AcceptFilePaths(true);
35+
Window::SetTitle(U"MIDIファイルをドラッグドロップして再生");
3536

3637
while (System::Update())
3738
{
@@ -83,14 +84,14 @@ void Main()
8384
if (midiData)
8485
{
8586
pianoRoll.updateTick(midiData.value());
87+
}
8688

8789
#ifdef LAYOUT_HORIZONTAL
88-
pianoRoll.drawHorizontal(player.keyMin(), player.keyMax(), midiData.value());
89-
player.drawHorizontal(pianoRoll, midiData.value());
90+
pianoRoll.drawHorizontal(player.keyMin(), player.keyMax(), midiData);
91+
player.drawHorizontal(pianoRoll, midiData);
9092
#else
91-
pianoRoll.drawVertical(player.keyMin(), player.keyMax(), midiData.value());
92-
player.drawVertical2(pianoRoll, midiData.value());
93+
pianoRoll.drawVertical(player.keyMin(), player.keyMax(), midiData);
94+
player.drawVertical(pianoRoll, midiData);
9395
#endif
94-
}
9596
}
9697
}

SFZ_MIDI_Player/include/PianoRoll.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ class PianoRoll
1414
m_measureWidth(measureWidth)
1515
{}
1616

17-
void drawVertical(int keyMin, int keyMax, const MidiData& midiData) const;
17+
void drawVertical(int keyMin, int keyMax, const Optional<MidiData>& midiData) const;
1818

19-
void drawHorizontal(int keyMin, int keyMax, const MidiData& midiData) const;
19+
void drawHorizontal(int keyMin, int keyMax, const Optional<MidiData>& midiData) const;
2020

2121
void updateTick(const MidiData& midiData);
2222

SFZ_MIDI_Player/include/SamplePlayer.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ class SamplePlayer
4141

4242
RectF getHorizontalRect(int octaveIndex, int noteIndex, bool isWhiteKey) const;
4343

44-
void drawVertical2(const PianoRoll& pianoroll, const MidiData& midiData) const;
44+
void drawVertical(const PianoRoll& pianoroll, const Optional<MidiData>& midiData) const;
4545

46-
void drawHorizontal(const PianoRoll& pianoroll, const MidiData& midiData) const;
46+
void drawHorizontal(const PianoRoll& pianoroll, const Optional<MidiData>& midiData) const;
4747

4848
const NoteEvent& addEvent(uint8 key, uint8 velocity, int64 pressTimePos, int64 releaseTimePos);
4949

SFZ_MIDI_Player/source/PianoRoll.cpp

+16-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <MIDILoader.hpp>
44
#include <Utility.hpp>
55

6-
void PianoRoll::drawVertical(int keyMin, int keyMax, const MidiData& midiData) const
6+
void PianoRoll::drawVertical(int keyMin, int keyMax, const Optional<MidiData>& midiDataOpt) const
77
{
88
const double bottomY = m_area.y + m_area.h;
99
const double unitHeight = m_area.h / (keyMax - keyMin + 1);
@@ -13,6 +13,13 @@ void PianoRoll::drawVertical(int keyMin, int keyMax, const MidiData& midiData) c
1313
const Color measureFontColor(214, 214, 214);
1414
m_area.draw(bgColor);
1515

16+
if (!midiDataOpt)
17+
{
18+
return;
19+
}
20+
21+
const auto& midiData = midiDataOpt.value();
22+
1623
const double widthTick = (midiData.resolution() / 480.0) * m_area.w / m_drawScale;
1724

1825
const double leftTick = m_currentTick;
@@ -91,17 +98,23 @@ void PianoRoll::drawVertical(int keyMin, int keyMax, const MidiData& midiData) c
9198
}
9299
}
93100

94-
void PianoRoll::drawHorizontal(int keyMin, int keyMax, const MidiData& midiData) const
101+
void PianoRoll::drawHorizontal(int keyMin, int keyMax, const Optional<MidiData>& midiDataOpt) const
95102
{
96103
const double leftX = m_area.x;
97104
const double unitWidth = m_area.w / (keyMax - keyMin + 1);
98105

99106
const Color bgColor(19, 19, 22);
100107
const Color measureLineColor(214, 214, 214);
101108
const Color measureFontColor(214, 214, 214);
102-
103109
m_area.draw(bgColor);
104110

111+
if (!midiDataOpt)
112+
{
113+
return;
114+
}
115+
116+
const auto& midiData = midiDataOpt.value();
117+
105118
const double heightTick = (midiData.resolution() / 480.0) * m_area.h / m_drawScale;
106119

107120
const double bottomTick = m_currentTick;

SFZ_MIDI_Player/source/SamplePlayer.cpp

+26-22
Original file line numberDiff line numberDiff line change
@@ -230,29 +230,31 @@ RectF SamplePlayer::getHorizontalRect(int octaveIndex, int noteIndex, bool isWhi
230230
return RectF(noteLeftX, m_area.y, noteWidth, m_area.h * (isWhiteKey ? 1. : 2. / 3.));
231231
}
232232

233-
void SamplePlayer::drawVertical2(const PianoRoll& pianoroll, const MidiData& midiData) const
233+
void SamplePlayer::drawVertical(const PianoRoll& pianoroll, const Optional<MidiData>& midiDataOpt) const
234234
{
235235
const int octaveMin = m_octaveMin + 1;
236236
//const int octaveMax = m_octaveMax + 1;
237237

238238
//const double currentTick = pianoroll.currentTick();
239239
const double currentSeconds = pianoroll.currentSeconds();
240240

241-
const auto& tracks = midiData.notes();
242-
243241
HashTable<int, std::pair<double, int>> pressedKeyTick;
244-
for (const auto& [i, track] : Indexed(tracks))
242+
if (midiDataOpt)
245243
{
246-
if (i == 10)
244+
const auto& tracks = midiDataOpt.value().notes();
245+
for (const auto& [i, track] : Indexed(tracks))
247246
{
248-
continue;
249-
}
247+
if (i == 10)
248+
{
249+
continue;
250+
}
250251

251-
for (const auto& note : track.notes())
252-
{
253-
if (note.beginSec <= currentSeconds && currentSeconds < note.endSec)
252+
for (const auto& note : track.notes())
254253
{
255-
pressedKeyTick[note.key] = std::make_pair(currentSeconds - note.beginSec, static_cast<int>(i));
254+
if (note.beginSec <= currentSeconds && currentSeconds < note.endSec)
255+
{
256+
pressedKeyTick[note.key] = std::make_pair(currentSeconds - note.beginSec, static_cast<int>(i));
257+
}
256258
}
257259
}
258260
}
@@ -329,29 +331,31 @@ void SamplePlayer::drawVertical2(const PianoRoll& pianoroll, const MidiData& mid
329331
}
330332
}
331333

332-
void SamplePlayer::drawHorizontal(const PianoRoll& pianoroll, const MidiData& midiData) const
334+
void SamplePlayer::drawHorizontal(const PianoRoll& pianoroll, const Optional<MidiData>& midiDataOpt) const
333335
{
334336
const int octaveMin = m_octaveMin + 1;
335337
//const int octaveMax = m_octaveMax + 1;
336338

337339
//const double currentTick = pianoroll.currentTick();
338340
const double currentSeconds = pianoroll.currentSeconds();
339341

340-
const auto& tracks = midiData.notes();
341-
342342
HashTable<int, std::pair<double, int>> pressedKeyTick;
343-
for (const auto& [i, track] : Indexed(tracks))
343+
if (midiDataOpt)
344344
{
345-
if (i == 10)
345+
const auto& tracks = midiDataOpt.value().notes();
346+
for (const auto& [i, track] : Indexed(tracks))
346347
{
347-
continue;
348-
}
348+
if (i == 10)
349+
{
350+
continue;
351+
}
349352

350-
for (const auto& note : track.notes())
351-
{
352-
if (note.beginSec <= currentSeconds && currentSeconds < note.endSec)
353+
for (const auto& note : track.notes())
353354
{
354-
pressedKeyTick[note.key] = std::make_pair(currentSeconds - note.beginSec, static_cast<int>(i));
355+
if (note.beginSec <= currentSeconds && currentSeconds < note.endSec)
356+
{
357+
pressedKeyTick[note.key] = std::make_pair(currentSeconds - note.beginSec, static_cast<int>(i));
358+
}
355359
}
356360
}
357361
}

0 commit comments

Comments
 (0)