- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 JFugue 5.0.7 时遇到了问题:我正在编写一个可以无限期播放音乐的实时应用程序,但 jfugue 库提供的 RealtimePlayer 会相互混合乐器。
我有以下代码
public class HelloJFugue {
public static int BPM = 150;
public static int SIGNATURE = 3;
public static boolean RANDOM = false;
public static void main(String[] args) throws MidiUnavailableException {
RealtimePlayer player = new RealtimePlayer();
BlockingQueue<Pattern> queue = new SynchronousQueue<>();
List<PatternProducer> pProducers = createPatternProducers();
Thread pConsumer = new Thread(new PatternConsumer(player, queue));
Thread pProducer = new Thread(new PatternMediator(queue, pProducers));
pConsumer.start();
pProducer.start();
}
private static List<PatternProducer> createPatternProducers() {
Random rand = new Random();
PatternProducer rightHand = new PatternProducer() {
int counter = 0;
String[] patterns = {
"Rq Rq E6i D#6i",
"E6i D#6i E6i B5i D6i C6i",
"A5q Ri C5i E5i A5i",
"B5q Ri E5i G#5i B5i",
"C6q Ri E5i E6i D#6i",
"E6i D#6i E6i B5i D6i C6i",
"A5q Ri C5i E5i A5i",
"B5q Ri E5i C6i B5i",
"A5q Ri E5i E6i D#6i"
};
@Override
public Pattern getPattern() {
Pattern p = new Pattern(patterns[RANDOM ? rand.nextInt(patterns.length - 1) + 1 : counter])
.setVoice(0)
.setInstrument("Piano");
counter++;
if (counter >= patterns.length) {
counter = 1;
}
return p;
}
};
PatternProducer leftHand = new PatternProducer() {
int counter = 0;
String[] patterns = {
"Rq Rq Rq",
"Rq Rq Rq",
"A3i E4i A4i Ri Rq",
"E3i E4i G#4i Ri Rq",
"A3i E4i A4i Ri Rq",
"Rq Rq Rq",
"A3i E4i A4i Ri Rq",
"E3i E4i G#4i Ri Rq",
"A3i E4i A4i Ri Rq"
};
@Override
public Pattern getPattern() {
Pattern p = new Pattern(patterns[RANDOM ? rand.nextInt(patterns.length - 1) + 1 : counter])
.setVoice(1)
.setInstrument("Guitar");
counter++;
if (counter >= patterns.length) {
counter = 1;
}
return p;
}
};
return new ArrayList<PatternProducer>() {
{
add(rightHand);
add(leftHand);
}
};
}
}
public class PatternMediator implements Runnable {
private BlockingQueue<Pattern> queue;
private List<PatternProducer> producers;
public PatternMediator(BlockingQueue<Pattern> queue, List<PatternProducer> producers) {
this.queue = queue;
this.producers = producers;
}
private void fillQueue() throws InterruptedException {
Pattern p = new Pattern();
for (PatternProducer producer : producers) {
p.add(producer.getPattern().setTempo(HelloJFugue.BPM));
}
this.queue.put(p);
}
@Override
public void run() {
while (true) {
try {
fillQueue();
} catch (InterruptedException ex) {
Logger.getLogger(PatternMediator.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
public class PatternConsumer implements Runnable {
private RealtimePlayer player;
private BlockingQueue<Pattern> queue;
public PatternConsumer(RealtimePlayer player, BlockingQueue<Pattern> queue) {
this.player = player;
this.queue = queue;
}
private void playFromQueue() throws InterruptedException {
player.play(queue.take());
}
@Override
public void run() {
while (true) {
try {
playFromQueue();
Thread.sleep(HelloJFugue.SIGNATURE * 60000 / HelloJFugue.BPM);
} catch (InterruptedException ex) {
Logger.getLogger(PatternConsumer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
问题是,演奏两种乐器(吉他和钢琴)时会混合在一起,并且两者不能同时演奏。相反,演奏者会在两种乐器之间随意切换,因此一次只能听到一种乐器演奏两种模式。
最佳答案
这个问题已通过在 JFugue 5.0.8 中引入 Atom
得到解决。原子在一个原子单元中包含语音、乐器和音符信息,因此乐器不会与它们用来演奏的音符断开连接。
我在这里更全面地描述了此更新:https://medium.com/@dmkoelle/whats-new-in-jfugue-5-0-8-7479abca3be4
关于java - JFugue RealtimePlayer 无法同时演奏多种乐器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42232541/
当用户更改参数或预设时,我如何/何时实际更新仪器? AUInstrumentBase 中没有ParameterUpdated 或PresetSelected 类型的方法/回调 最佳答案 相关机制是 A
我已经粘合了这个小型 Java 程序:我有 8 个音调(C、D、E、...、A、B、C),因此我可以使用一架穷人的钢琴。 package net.coderodde.music; import jav
我在使用 AVAudioSequencer(iOS 12.1.4、Swift 4.2、Xcode 10.1)通过 MIDI 控制第三方 AUv3 乐器时遇到问题,非常感谢您的帮助。 我目前在做什么:
我正在使用 MPICH2 1.4 构建一个 Raspberry Pi2 集群(又名 bramble)。 我还有一个 Launchpad,它是一 block 包含 64 个以上按钮的板,每个按钮可以亮起
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
示例:如果我想在我即将自制的 VST 乐器中播放一个声音,并且音序器中的这个音符有 15000 个样本长,并且该音符被 processEvents 设置为 ON,则 processReplace 函数
我是一名优秀的程序员,十分优秀!