以Java dos风格播放声音的频率 < Turbo C++中的P>有一个头文件,叫做“代码> DOS .H/CODE”,它公开了三个函数:代码>声音, NothOns/Cuff>和延迟< /代码>。使用这三个功能,可以在C++中编写一个基本的钢琴程序。

以Java dos风格播放声音的频率 < Turbo C++中的P>有一个头文件,叫做“代码> DOS .H/CODE”,它公开了三个函数:代码>声音, NothOns/Cuff>和延迟< /代码>。使用这三个功能,可以在C++中编写一个基本的钢琴程序。,java,dos,javasound,audio,jfugue,Java,Dos,Javasound,Audio,Jfugue,我想用Java实现同样的结果。我的选择是使用jfugue提供的库或javax.sound.sampled。问题是我不知道每个音符在演奏之前的持续时间 我想在用户按下某个键时开始播放某个频率,只有在用户释放该键时才停止播放。如何解决这个问题?Java教程中有一个例子,在最里面的while循环中引用布尔值,其中一个循环正在打包字节,并将它们交给SourceDataLine进行回放 因此,您的事件(可能是一个关闭键事件)可以写入以更改此布尔值。由于声音播放在自己的线程中,因此最好将布尔值设置为“vol

我想用Java实现同样的结果。我的选择是使用jfugue提供的库或
javax.sound.sampled
。问题是我不知道每个音符在演奏之前的持续时间


我想在用户按下某个键时开始播放某个频率,只有在用户释放该键时才停止播放。如何解决这个问题?

Java教程中有一个例子,在最里面的while循环中引用布尔值,其中一个循环正在打包字节,并将它们交给SourceDataLine进行回放

因此,您的事件(可能是一个关闭键事件)可以写入以更改此布尔值。由于声音播放在自己的线程中,因此最好将布尔值设置为“volatile”,并使用这种消息传递方法,而不是试图直接控制播放

让我们看看是否可以找到教程示例。。。


请注意,在“使用源数据行”部分的示例中,有一个while循环,其中的一个条件是表达式“!stopped”。本例中播放的基类肯定有一个布尔值“stopped”,并且可能标记为“volatile”。

查看此示例以播放特定频率的音符:。为了在按键/释放时播放/停止,只需实现一个或两个监听器。您也可以尝试使用MIDI,但采样的声音API更可靠。