【问题标题】:Play frequencies of sound in Java dos style以 Java dos 风格播放声音的频率
【发布时间】:2012-09-10 07:14:31
【问题描述】:

在 Turbo C++ 中,我们有一个名为 dos.h 的头文件,它公开了三个函数 soundnosounddelay。使用这三个函数可以用 C++ 编写一个基本的钢琴程序。

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

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

【问题讨论】:

  • 看看这个样本来播放特定频率的音符:stackoverflow.com/questions/2064066/…。为了在按键/释放时播放/停止,这只是实现一两个监听器的问题
  • 您也可以尝试使用 MIDI,但采样声音 API 更可靠。

标签: java dos javasound audio jfugue


【解决方案1】:

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

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

让我们看看能不能找到教程示例... http://docs.oracle.com/javase/tutorial/sound/playing.html

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多