简体   繁体   English

Java jFugue 音乐播放

[英]Java jFugue music play

import org.jfugue.player.Player;

public class MusicPlayer {
    public static void main(String[] args) {
        TwelveBarBlues twelveBarBlues = new TwelveBarBlues();

        System.out.println("Twelve Bar blues Playing: ");

        Player player = new Player();
        player.play(twelveBarBlues.getPattern());

        }

}

import java.io.IOException;

import org.jfugue.pattern.Pattern;
import org.jfugue.player.Player;
import org.jfugue.theory.ChordProgression;

public class TwelveBarBlues {

private String pattern;

public static void main(String[] args) throws IOException {
    Pattern pattern = new ChordProgression("I IV V")
            .distribute("7%6")
            .allChordsAs("$0 $0 $0 $0 $1 $1 $0 $0 $2 $1 $0 $0")
            .eachChordAs("$0ia100 $1ia80 $2ia80 $3ia80 $4ia100 $3ia80 $2ia80 $1ia80")
            .getPattern()
            .setInstrument("Acoustic_Bass")
            .setTempo(100);
    new Player().play(pattern);
}

public String getPattern() {
    this.pattern = pattern;
    return pattern;
    }
}

I want to play the twelveBarBlue music code at MusicPlayer.我想在 MusicPlayer 上播放 12BarBlue 音乐代码。 but I got error code Cannot invoke "java.lang.CharSequence.length()" because "this.text" is null when I run the MusicPlayer MusicPlayer Error Code但我得到错误代码无法调用“java.lang.CharSequence.length()”因为当我运行 MusicPlayer MusicPlayer 错误代码时“this.text”为空

When you execute MusicPlayer, it calls main() in MusicPlayer but main() in TwelveBarBlues is never called, so in getPattern() , 'pattern' has never been set, and you're returning null.当您执行 MusicPlayer 时,它会调用 MusicPlayer 中的main() ,但从未调用 TwelveBarBlues 中的main() ,因此在getPattern() ,从未设置过 'pattern',您将返回 null。

Instead, change TwelveBarBlues so getPattern() returns the pattern that you currently have in main() .相反,更改 TwelveBarBlues 以便getPattern()返回您当前在main() Just move the code from main() into getPattern() , then remove the main() method, since you're not running TwelveBarBlues as its own program.只需将代码从main()移到getPattern() ,然后删除main()方法,因为您没有将 TwelveBarBlues 作为自己的程序运行。

Or, keep the main() method in case you want to use that class as its own executable, but have it call its own getPattern() method.或者,保留main()方法,以防您想将该类用作其自己的可执行文件,但让它调用自己的getPattern()方法。 You'll need to do something like TwelveBarBlues blues = new TwelveBarBlues();你需要做一些像TwelveBarBlues blues = new TwelveBarBlues(); and then new Player().play(blues.getPattern());然后new Player().play(blues.getPattern()); . .

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM