2

在下面的给定代码中,频率 240 和 254.1764 相距很远,但都在 240 处发声。288 和 301.395 也是如此,最后两个 432 和 552.09 也存在同样的问题。我需要帮助来确定问题出在 java 还是 JFugue 部分。

      class JFugueMicrotoneTest{


      public static void main(String[]arg)throws InvalidMidiDataException, IOException{

        MicrotoneNotation microtone = new MicrotoneNotation();
        microtone.put("C", 240.0);
        microtone.put("Df", 254.1764705882353);
        microtone.put("D", 270.0); 
        microtone.put("Ef", 288.0);
        microtone.put("E", 301.3953488372093);
        microtone.put("F", 320.0);
        microtone.put("F#", 338.8235294117647);
        microtone.put("G", 360.0);
        microtone.put("Af", 381.1764705882353);
        microtone.put("A", 405.0);
        microtone.put("Bf", 432.0);
        microtone.put("B", 452.09302325581393);

        Player player = new Player();
        String music="T[60] <C> <Df>    <D>     <Ef> <E>    <F> <F#> <G> <Af> <A>       <Bf> <B>";
        Pattern pattern=microtone.getPattern(music);
        player.play(pattern);
        }
} 
4

1 回答 1

1

JFugue 5.0.9已更新,修复了用于创建微音的数学转换。试试看,听听不同!

另外:您在原始问题中发布的代码是 JFugue 4.x 代码。在 JFugue 5.x 中,没有 MicrotoneNotation 类。相反,您可以将频率直接写入音乐字符串,如下所示:

"T60 m240.0 m254.17 m270.0"

(请注意,版本 5.x 中的数字 Tempo 值周围没有方括号)

如果要在字符串中使用 <C>、<Cf> 等,还可以创建“替换映射”。请参阅http://www.jfugue.org/examples.html上当前显示的最后三个示例

于 2017-05-23T02:31:21.807 回答