用java设计节拍器_具有高速的Java节拍器
關于Thread.sleep()不可靠的答案是正確的:你不能指望它完全返回你指定的時間.事實上,我很驚訝你的節拍器可以使用,特別是當你的系統負載不足時.閱讀Thread.sleep()的文檔以獲取更多詳細信息.關于MIDI的Max Beikirch的答案是一個很好的建議:MIDI處理時機非常好.
但你問如何用音頻做到這一點.訣竅是打開音頻流并在節拍器點擊之間填充靜音,并將節拍器點擊插入所需的位置.當您這樣做時,您的聲卡以恒定速率播放樣本(無論它們是否包含咔嗒聲或靜音).這里的關鍵是保持音頻流打開,永不關閉它.那么,時鐘是音頻硬件,而不是你的系統時鐘 – 一個微妙但重要的區別.
因此,假設您正在以44100 Hz生成16位單聲道樣本.這是一個以所需速率創建咔嗒聲的功能.請記住,這種咔嗒聲對揚聲器(和你的耳朵)來說是不好的,所以如果你真的使用它,請以低音量播放. (此外,此代碼未經測試 – 只是為了演示這個概念)
int interval = 44100; // 1 beat per second, by default
int count = 0;
void setBPM( float bpm ) {
interval = ( bpm / 60 ) * 44100 ;
}
void generateMetronomeSamples( short[] s ) {
for( int i=0; i
s = 0;
++count;
if( count == 0 ) {
s = Short.MAX_VALUE;
}
if( count == interval ) {
count = 0;
}
}
}
使用setBPM設置速度后,可以重復調用generateMetronomeSamples()函數生成的樣本,并使用JavaSound將輸出流式傳輸到揚聲器. (請參閱JSResources.org以獲得一個很好的教程)
一旦你有了這個工作,你就可以用從WAV或AIFF或短音或其他任何東西獲得的聲音來代替刺耳的咔嗒聲.
總結
以上是生活随笔為你收集整理的用java设计节拍器_具有高速的Java节拍器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 办信用卡没接到电话怎么办 办信用卡没有回
- 下一篇: 中信信用卡优惠活动 9分享兑超值好礼