在 Turbo C++ 中,我们有一个名为的头文件,dos.h
它公开了三个函数sound
和. 使用这三个函数可以用 C++ 编写一个基本的钢琴程序。nosound
delay
我想使用 Java 实现相同的结果。我的选择是使用 jfugue 提供的库或javax.sound.sampled
. 问题是我事先不知道每个音符的持续时间。
我想在用户按下某个键时开始播放某个频率,并仅在用户释放它时停止。我该如何解决这个问题?
Java 教程有一个示例,其中在最里面的 while 循环中查询一个布尔值,其中一个正在打包字节并将它们交给 SourceDataLine 进行播放。
因此,可以编写您的事件(可能是关闭事件)来更改此布尔值。由于声音播放在其自己的线程中,因此最好使布尔值“易失”,并使用这种消息传递方法而不是尝试直接控制播放。
让我们看看能否找到教程示例... http://docs.oracle.com/javase/tutorial/sound/playing.html
请注意,在“使用源数据行”部分的示例中,有一个 while 循环,其中表达式“!stopped”作为条件之一。在这个例子中,回放的基类肯定有一个布尔值“stopped”,并且可能将它标记为“volatile”。