1
package org.herac.tuxguitar.gui.scale;
4
import java.io.IOException;
5
import java.util.ArrayList;
6
import java.util.Iterator;
9
import javax.xml.parsers.ParserConfigurationException;
11
import org.herac.tuxguitar.gui.scale.xml.ScaleReader;
12
import org.herac.tuxguitar.gui.util.TuxGuitarFileUtils;
13
import org.herac.tuxguitar.song.models.MusicScale;
14
import org.xml.sax.SAXException;
16
public class MusicScaleManager {
17
private static final String[] KEY_NAMES = new String[]{"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"};
19
private static final String KEY_SEPARATOR = ",";
21
public static final int NONE_SELECTION = -1;
25
private MusicScale scale;
27
private int selectionIndex;
29
private int selectionKey;
31
public MusicScaleManager(){
32
this.scales = new ArrayList();
33
this.scale = new MusicScale();
34
this.selectionKey = 0;
35
this.selectionIndex = NONE_SELECTION;
39
public MusicScale getScale() {
43
public void selectScale(int index,int key){
44
if(index == NONE_SELECTION){
47
else if(index >= 0 && index < scales.size()){
49
ScaleInfo info = (ScaleInfo)scales.get(index);
50
String[] keys = info.getKeys().split(KEY_SEPARATOR);
51
for (int i = 0; i < keys.length; i ++){
52
int note = (Integer.parseInt(keys[i]) - 1);
53
if(note >= 0 && note < 12){
54
getScale().setNote(note,true);
57
getScale().setKey(key);
59
this.selectionIndex = index;
60
this.selectionKey = key;
63
public String[] getScaleNames(){
64
String[] names = new String[this.scales.size()];
66
Iterator it = this.scales.iterator();
67
for(int i = 0;i < scales.size();i ++){
68
ScaleInfo info = (ScaleInfo)scales.get(i);
69
names[i] = info.getName();
75
public String[] getKeyNames(){
79
public int getSelectionIndex() {
80
return selectionIndex;
83
public int getSelectionKey() {
87
private void loadScales(){
89
new ScaleReader().loadScales(scales,getScalesFileName());
90
} catch (SAXException e) {
92
} catch (ParserConfigurationException e) {
94
} catch (IOException e) {
96
} catch (Exception e) {
103
private String getScalesFileName(){
104
return TuxGuitarFileUtils.SCALES_PREFIX + File.separator + "scales.xml";