Skip to content

Commit

Permalink
歌パートの除外オプション
Browse files Browse the repository at this point in the history
  • Loading branch information
fourthline committed Nov 23, 2021
1 parent 9469ed5 commit a12bf46
Show file tree
Hide file tree
Showing 15 changed files with 274 additions and 203 deletions.
1 change: 1 addition & 0 deletions properties/appResource.properties
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ score_property.measure=<time>

####### mmltrackview.* #######
instrument.nouse_chorus=no-chorus
instrument.excludeSongPart=exclude song part
mmltrack.mute=Mute
mmltrack.mute.on.icon=/img/mute_on.png
mmltrack.mute.off.icon=/img/mute_off.png
Expand Down
1 change: 1 addition & 0 deletions properties/appResource_ja.properties
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ score_property.measure=<拍子>

####### mmltrackview.* #######
instrument.nouse_chorus=コーラスなし
instrument.excludeSongPart=歌パートを除外する
mmltrack.mute=Mute
mmltrack.solo=Solo
mmltrack.all=All
Expand Down
1 change: 1 addition & 0 deletions properties/appResource_ko.properties
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ score_property.measure=<박자>

####### mmltrackview.* #######
instrument.nouse_chorus=코러스 없음
instrument.excludeSongPart=노래 파트 제외
mmltrack.mute=Mute
mmltrack.solo=Solo
mmltrack.all=All
Expand Down
1 change: 1 addition & 0 deletions properties/appResource_zh_cn.properties
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ score_property.measure=<时间>

####### mmltrackview.* #######
instrument.nouse_chorus=没有合唱声部
instrument.excludeSongPart=排除歌曲部分
mmltrack.mute=静音
mmltrack.solo=独奏
mmltrack.all=取消独奏
Expand Down
1 change: 1 addition & 0 deletions properties/appResource_zh_tw.properties
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ score_property.measure=<時間>

####### mmltrackview.* #######
instrument.nouse_chorus=沒有合唱聲部
instrument.excludeSongPart=排除歌曲部分
mmltrack.mute=靜音
mmltrack.solo=獨奏
mmltrack.all=取消獨奏
Expand Down
59 changes: 47 additions & 12 deletions src/fourthline/mabiicco/ui/MMLTrackView.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2013-2017 たんらる
* Copyright (C) 2013-2021 たんらる
*/

package fourthline.mabiicco.ui;
Expand Down Expand Up @@ -60,7 +60,9 @@ public final class MMLTrackView extends JPanel implements ActionListener {
private IMMLManager mmlManager;

private final InstClass noUseSongEx = new InstClass(AppResource.appText("instrument.nouse_chorus")+",0", -1, -1, null);
private final InstClass excludeSongPart = new InstClass(AppResource.appText("instrument.excludeSongPart")+",0", -2, -2, null);
private int trackIndex;
private boolean disableAction = false;

private JPanel mmlTextPanel = new JPanel();

Expand Down Expand Up @@ -105,6 +107,7 @@ private MMLTrackView() {
comboBox = new JComboBox<>( MabiDLS.getInstance().getAvailableInstByInstType(InstType.MAIN_INST_LIST) );
songComboBox = new JComboBox<>( MabiDLS.getInstance().getAvailableInstByInstType(InstType.SUB_INST_LIST) );
songComboBox.addItem(noUseSongEx);
songComboBox.addItem(excludeSongPart);
songComboBox.setSelectedItem(noUseSongEx);
comboBox.setFocusable(false);
songComboBox.setFocusable(false);
Expand Down Expand Up @@ -277,14 +280,32 @@ public void updateTrack() {
}

setInstProgram(mmlTrack);
updateRankFormat(mmlTrack);
}

private void updateRankFormat(MMLTrack mmlTrack) {
trackComposeLabel.setText(mmlTrack.mmlRankFormat());
String str = " "+(trackIndex+1)+"/"+mmlManager.getMMLScore().getTrackCount();
trackIndexLabel.setText(str);
}

private InstClass convertInstBySongProgram(InstClass inst, int songProgram) {
InstClass songInst = MabiDLS.getInstance().getInstByProgram(songProgram);
if (songInst != null) {
return songInst;
}

if ( (songProgram == excludeSongPart.getProgram()) && (inst.getType() != InstType.VOICE) ) {
return excludeSongPart;
}
return noUseSongEx;
}

private void setInstProgram(MMLTrack track) {
int program = track.getProgram();
int songProgram = track.getSongProgram();

disableAction = true;
InstClass inst = MabiDLS.getInstance().getInstByProgram(program);
if (inst != null) {
comboBox.setSelectedItem(inst);
Expand All @@ -293,14 +314,11 @@ private void setInstProgram(MMLTrack track) {
program = ((InstClass) comboBox.getSelectedItem()).getProgram();
track.setProgram(program);
}
InstClass songInst = MabiDLS.getInstance().getInstByProgram(songProgram);
if ( (songInst != null) && (songInst.getType() == InstType.CHORUS) ) {
songComboBox.setSelectedItem(songInst);
} else {
songComboBox.setSelectedItem(noUseSongEx);
songProgram = ((InstClass) songComboBox.getSelectedItem()).getProgram();
track.setSongProgram(songProgram);
}

InstClass songInst = convertInstBySongProgram(inst, songProgram);
songComboBox.setSelectedItem(songInst);
track.setSongProgram(songInst.getProgram());
disableAction = false;

updateProgramChangeStatus();
}
Expand All @@ -315,23 +333,25 @@ private void setInstProgram(MMLTrack track) {
*/
private void updateProgramChangeStatus() {
InstClass inst = (InstClass) comboBox.getSelectedItem();
MMLTrack track = mmlManager.getMMLScore().getTrack(trackIndex);

if (inst.getType() == InstType.VOICE) {
songComboBox.setSelectedItem(noUseSongEx);
songComboBox.setVisible(false);
} else {
songComboBox.setVisible(true);
}

updatePartButtonStatus();

InstClass songInst = ((InstClass) songComboBox.getSelectedItem());
int program = inst.getProgram();
int songProgram = songInst.getProgram();
MMLTrack track = mmlManager.getMMLScore().getTrack(trackIndex);
int songProgram = convertInstBySongProgram(inst, songInst.getProgram()).getProgram();
if ( (track.getProgram() == program) && (track.getSongProgram() == songProgram) ) {
return;
}

mmlManager.updateActiveTrackProgram(trackIndex, program, songProgram);
updateRankFormat(track);
}

private void updatePartButtonStatus() {
Expand Down Expand Up @@ -385,6 +405,9 @@ public void switchMMLPart(boolean toNext) {

@Override
public void actionPerformed(ActionEvent e) {
if (disableAction) {
return;
}
Object source = e.getSource();
if (source instanceof JComboBox<?>) {
updateProgramChangeStatus();
Expand All @@ -399,4 +422,16 @@ public void actionPerformed(ActionEvent e) {
updateMuteButton();
}
}

JComboBox<InstClass> getComboBox() {
return comboBox;
}

JComboBox<InstClass> getSongComboBox() {
return songComboBox;
}

String getRankText() {
return trackComposeLabel.getText();
}
}
17 changes: 13 additions & 4 deletions src/fourthline/mabiicco/ui/mml/MMLOutputPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@

public final class MMLOutputPanel extends JPanel {
private static final long serialVersionUID = 8558159209741558854L;
private final TrackListTable table;
final TrackListTable table;
private final JDialog dialog;
private final Window parentFrame;
private final JButton splitButton = new JButton(AppResource.appText("mml.output.split"));

private List<MMLTrack> trackList;
private List<String> outputTextList = new ArrayList<>();
List<String> outputTextList = new ArrayList<>();

public MMLOutputPanel(Frame parentFrame) {
this.dialog = null;
Expand Down Expand Up @@ -156,10 +156,19 @@ private void currentSelectedTrackMMLOutput() {
*/
private void currentSelectedTrackMMLSplitOutput() {
int row = table.getSelectedRow();
createSelectedTrackMMLSplitPanel(row).showDialog();
nextSelect(row);
}

/**
* 楽譜集分割用のパネルを作成する
*/
MMLOutputPanel createSelectedTrackMMLSplitPanel(int row) {
MMLTrack track = trackList.get(row);
MMLText mmlText = new MMLText().setMMLText( outputTextList.get(row) );
new MMLOutputPanel(dialog, track, mmlText.splitMML(ComposeRank.getTopRank())).showDialog();
nextSelect(row);
mmlText.setExcludeSongPart(track.isExcludeSongPart());
ComposeRank topRank = !track.isExcludeSongPart() ? ComposeRank.getTopRank() : ComposeRank.getTopExcludeSongRank();
return new MMLOutputPanel(dialog, track, mmlText.splitMML(topRank));
}

private void checkSplitCopy() {
Expand Down
4 changes: 4 additions & 0 deletions src/fourthline/mabiicco/ui/mml/TrackListTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -206,4 +206,8 @@ public boolean selectedRowCanSplit() {
ComposeRank rank = checkTableModel.rankList.get(row);
return !rank.canCompose();
}

public ComposeRank getRank(int index) {
return checkTableModel.rankList.get(index);
}
}
51 changes: 33 additions & 18 deletions src/fourthline/mmlTools/ComposeRank.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
/*
* Copyright (C) 2013-2017 たんらる
* Copyright (C) 2013-2021 たんらる
*/

package fourthline.mmlTools;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ResourceBundle;

import fourthline.mmlTools.core.ResourceLoader;
Expand All @@ -18,10 +19,19 @@ public final class ComposeRank {
/** 作曲不可ランク */
final private static ComposeRank RANK_0 = new ComposeRank(0, 0, 0, "-");

final private static ArrayList<ComposeRank> rankList;
final private static ArrayList<ComposeRank> rankList = new ArrayList<>();
final private static ArrayList<ComposeRank> excludeSongRankList = new ArrayList<>();
static {
rankList = new ArrayList<>();
ResourceBundle bundle = ResourceBundle.getBundle(RESOURCE_NAME, new ResourceLoader());
loadRankResource(rankList, RESOURCE_NAME);
rankList.forEach(t -> {
int d = t.getMelody() / 3;
ComposeRank r = new ComposeRank(t.getMelody()+d, t.getChord1()+d, t.getChord2()+d, t.getRank()+'`');
excludeSongRankList.add(r);
});
}

static private void loadRankResource(List<ComposeRank> list, String name) {
ResourceBundle bundle = ResourceBundle.getBundle(name, new ResourceLoader());
for (String key : Collections.list(bundle.getKeys()) ) {
String s[] = bundle.getString(key).split(",");
if (s.length != 4) {
Expand All @@ -30,10 +40,10 @@ public final class ComposeRank {
int melody = Integer.parseInt(s[0].trim());
int chord1 = Integer.parseInt(s[1].trim());
int chord2 = Integer.parseInt(s[2].trim());
rankList.add( new ComposeRank(melody, chord1, chord2, s[3].trim()) );
list.add( new ComposeRank(melody, chord1, chord2, s[3].trim()) );
}

rankList.sort((rank1, rank2) -> {
list.sort((rank1, rank2) -> {
return (rank1.melody + rank1.chord1 + rank1.chord2)
- (rank2.melody + rank2.chord1 + rank2.chord2);
});
Expand All @@ -43,6 +53,10 @@ public static ComposeRank getTopRank() {
return rankList.get(rankList.size()-1);
}

public static ComposeRank getTopExcludeSongRank() {
return excludeSongRankList.get(excludeSongRankList.size()-1);
}

private int melody;
private int chord1;
private int chord2;
Expand All @@ -61,25 +75,26 @@ public static ComposeRank mmlRank(String melody, String chord1, String chord2, S
}

public static ComposeRank mmlRank(int melody, int chord1, int chord2, int songEx) {
for (ComposeRank rank : rankList) {
return mmlRank(rankList, melody, chord1, chord2, songEx);
}

public static ComposeRank mmlExcludeSongRank(String melody, String chord1, String chord2, String songEx) {
return mmlExcludeSongRank( melody.length(), chord1.length(), chord2.length(), songEx.length() );
}

public static ComposeRank mmlExcludeSongRank(int melody, int chord1, int chord2, int songEx) {
return mmlRank(excludeSongRankList, melody, chord1, chord2, songEx);
}

private static ComposeRank mmlRank(List<ComposeRank> list, int melody, int chord1, int chord2, int songEx) {
for (ComposeRank rank : list) {
if (rank.compare(melody, chord1, chord2, songEx))
return rank;
}

return RANK_0;
}

/**
* for Test, package private
* @param melody
* @param chord1
* @param chord2
* @return
*/
static ComposeRank createComposeRank(int melody, int chord1, int chord2) {
return new ComposeRank(melody, chord1, chord2);
}

private ComposeRank() {}

private ComposeRank(int melody, int chord1, int chord2) {
Expand Down
6 changes: 6 additions & 0 deletions src/fourthline/mmlTools/MMLTrack.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ public String getMabiMML() {
}

public ComposeRank mmlRank() {
mabiMML.setExcludeSongPart(isExcludeSongPart());
return mabiMML.mmlRank();
}

Expand All @@ -125,6 +126,7 @@ public ComposeRank mmlRank() {
* @return フォーマット済みRank文字列
*/
public String mmlRankFormat() {
mabiMML.setExcludeSongPart(isExcludeSongPart());
return (generated ? "" : "*") + mabiMML.mmlRankFormat();
}

Expand Down Expand Up @@ -412,4 +414,8 @@ public boolean isVisible() {
public void setVisible(boolean visible) {
this.visible = visible;
}

public boolean isExcludeSongPart() {
return songProgram == -2;
}
}
Loading

0 comments on commit a12bf46

Please sign in to comment.