2012-09-10 61 views
0

在渦輪C++有一個名爲dos.h一個頭文件暴露三大功能soundnosounddelay。使用這三個函數可以用C++編寫一個基本的鋼琴程序。播放頻率

我想用Java實現相同的結果。我的選擇是使用由jfugue提供的庫或javax.sound.sampled。問題是我不知道每個音符播放的持續時間。

我想在用戶按下某個按鍵時開始播放某個頻率,只有當用戶釋放它時纔會停止播放。我該如何解決這個問題?

+1

看看這個示例播放特定頻率的音符:http://stackoverflow.com/questions/2064066/does-java-have-built-in-libraries-for-audio-synthesis/2065693#2065693。爲了播放它/在按鍵/釋放時停止它,這只是實現一個或兩個聽衆的問題 – Alex

+0

您也可以嘗試使用MIDI來做,但採樣聲音API更可靠。 –

回答

1

Java教程有一個例子,其中在最裏面的while循環中查閱布爾值,其中一個是打包字節並將它們交給SourceDataLine進行回放。

因此,您的事件,也許是一個關鍵事件,可以寫入更改此布爾值。由於聲音播放是在其自己的線程中,所以最好使布爾型爲「易失性」,並使用這種消息傳遞方法而不是試圖直接控制播放。

讓我們來看看,如果我能找到的教程例子......在部分的示例「使用源數據行」 http://docs.oracle.com/javase/tutorial/sound/playing.html

公告不存在與表達while循環!「停止」之一的條件。在這個例子中,回放的基類肯定有一個布爾型「停止」,並且可能會標記爲「volatile」。