Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将注释名称和频率存储为数据,以便在java中的其他类中使用_Java_Arrays_Class - Fatal编程技术网

如何将注释名称和频率存储为数据,以便在java中的其他类中使用

如何将注释名称和频率存储为数据,以便在java中的其他类中使用,java,arrays,class,Java,Arrays,Class,我想建立某种数组来存储音符名称,例如A4和频率,例如440 我还想知道我应该用什么样的类来完成这个任务 我希望能够使用wave generator类将音符生成为正弦波或方波等波形。范例 public SineGenerator(double amplitude, Note note, int bitRate, double duration) { Note类将索引某种数组中的C4,然后将中间C的频率261.63返回给SineGenerator,SineGenerator将生成正弦波。要存储音符

我想建立某种数组来存储音符名称,例如A4和频率,例如440 我还想知道我应该用什么样的类来完成这个任务

我希望能够使用wave generator类将音符生成为正弦波或方波等波形。范例

public SineGenerator(double amplitude, Note note, int bitRate, double duration) {

Note类将索引某种数组中的C4,然后将中间C的频率261.63返回给SineGenerator,SineGenerator将生成正弦波。

要存储音符名称及其各自的频率,请查找HashMaps,这听起来像是您要查找的。 使用音符名称作为键,频率作为值

HashMap<String, Double> Notes = new HashMap<>();
HashMap Notes=newhashmap();

要存储便笺名称及其各自的频率,请查找HashMaps,它听起来像是您要查找的内容。 使用音符名称作为键,频率作为值

HashMap<String, Double> Notes = new HashMap<>();
HashMap Notes=newhashmap();

如果我理解正确,您是在询问如何实现
Note
类的大致指南

Note
类可能包含3个主要字段:

private char letter;
private int octave;
private boolean sharp;
像D这样的音符♭4的字母为
C
octave
的字母为
4
sharp
的字母为
true
。如你所见,我代表D♭ C#和这里的音符一样,因为它们有相同的频率,这里唯一重要的是频率

Note
还将有一个
HashMap
HashMap
来存储每个注释的频率。请注意,您不需要在此地图中存储半音,因为您只需将下面的音符乘以1.0595(或
Math.pow(2,1.0/12)
)即可获得半音频率

然后您将编写一个名为
getFrequency
的方法,用于访问映射。如果
sharp
为真,则将其乘以1.0595并返回

下面是我编写的一个简单实现:

class Note {
    private char letter;
    private int octave;
    private boolean sharp;

    private static HashMap<String, Integer> map;

    static {
        map = new HashMap<>();
        map.put("C0", 16);
        map.put("D0", 18);
        map.put("E0", 21);
        map.put("F0", 22);
        map.put("G0", 25);
        map.put("A1", 28);
        // ...
    }

    public Note(char letter, int octave, boolean sharp) {
        this.letter = letter;
        this.octave = octave;
        this.sharp = sharp;
    }

    public char getLetter() {
        return letter;
    }

    public int getOctave() {
        return octave;
    }

    public boolean isSharp() {
        return sharp;
    }

    public double getFrequency() {
        String key = Character.toString(letter) + octave;
        double frequency = map.get(key);
        if (sharp) {
            frequency *= Math.pow(2, 1.0 / 12);
        }
        return frequency;
    }
}
课堂笔记{
私人信件;
专用整数倍频程;
私有布尔夏普;
私有静态哈希映射;
静止的{
map=新的HashMap();
地图放置(“C0”,16);
地图放置(“D0”,18);
地图放置(“E0”,21);
地图放置(“F0”,22);
地图放置(“G0”,25);
地图.put(A1,28);;
// ...
}
公共注释(字符字母、整数倍频程、布尔夏普){
这个字母=字母;
这个。倍频程=倍频程;
这个;
}
公共字符getLetter(){
回信;
}
公共整数getOctave(){
返回倍频程;
}
公共布尔值isSharp(){
返回夏普;
}
公共双getFrequency(){
字符串键=字符。toString(字母)+倍频程;
双频=map.get(键);
如果(夏普){
频率*=数学功率(2,1.0/12);
}
返回频率;
}
}

如果我理解正确,您是在询问如何实现
Note
类的大致指南

Note
类可能包含3个主要字段:

private char letter;
private int octave;
private boolean sharp;
像D这样的音符♭4的字母为
C
octave
的字母为
4
sharp
的字母为
true
。如你所见,我代表D♭ C#和这里的音符一样,因为它们有相同的频率,这里唯一重要的是频率

Note
还将有一个
HashMap
HashMap
来存储每个注释的频率。请注意,您不需要在此地图中存储半音,因为您只需将下面的音符乘以1.0595(或
Math.pow(2,1.0/12)
)即可获得半音频率

然后您将编写一个名为
getFrequency
的方法,用于访问映射。如果
sharp
为真,则将其乘以1.0595并返回

下面是我编写的一个简单实现:

class Note {
    private char letter;
    private int octave;
    private boolean sharp;

    private static HashMap<String, Integer> map;

    static {
        map = new HashMap<>();
        map.put("C0", 16);
        map.put("D0", 18);
        map.put("E0", 21);
        map.put("F0", 22);
        map.put("G0", 25);
        map.put("A1", 28);
        // ...
    }

    public Note(char letter, int octave, boolean sharp) {
        this.letter = letter;
        this.octave = octave;
        this.sharp = sharp;
    }

    public char getLetter() {
        return letter;
    }

    public int getOctave() {
        return octave;
    }

    public boolean isSharp() {
        return sharp;
    }

    public double getFrequency() {
        String key = Character.toString(letter) + octave;
        double frequency = map.get(key);
        if (sharp) {
            frequency *= Math.pow(2, 1.0 / 12);
        }
        return frequency;
    }
}
课堂笔记{
私人信件;
专用整数倍频程;
私有布尔夏普;
私有静态哈希映射;
静止的{
map=新的HashMap();
地图放置(“C0”,16);
地图放置(“D0”,18);
地图放置(“E0”,21);
地图放置(“F0”,22);
地图放置(“G0”,25);
地图.put(A1,28);;
// ...
}
公共注释(字符字母、整数倍频程、布尔夏普){
这个字母=字母;
这个。倍频程=倍频程;
这个;
}
公共字符getLetter(){
回信;
}
公共整数getOctave(){
返回倍频程;
}
公共布尔值isSharp(){
返回夏普;
}
公共双getFrequency(){
字符串键=字符。toString(字母)+倍频程;
双频=map.get(键);
如果(夏普){
频率*=数学功率(2,1.0/12);
}
返回频率;
}
}