日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

用java设计节拍器_具有高速的Java节拍器

發(fā)布時(shí)間:2023/12/10 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用java设计节拍器_具有高速的Java节拍器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于Thread.sleep()不可靠的答案是正確的:你不能指望它完全返回你指定的時(shí)間.事實(shí)上,我很驚訝你的節(jié)拍器可以使用,特別是當(dāng)你的系統(tǒng)負(fù)載不足時(shí).閱讀Thread.sleep()的文檔以獲取更多詳細(xì)信息.關(guān)于MIDI的Max Beikirch的答案是一個(gè)很好的建議:MIDI處理時(shí)機(jī)非常好.

但你問如何用音頻做到這一點(diǎn).訣竅是打開音頻流并在節(jié)拍器點(diǎn)擊之間填充靜音,并將節(jié)拍器點(diǎn)擊插入所需的位置.當(dāng)您這樣做時(shí),您的聲卡以恒定速率播放樣本(無論它們是否包含咔嗒聲或靜音).這里的關(guān)鍵是保持音頻流打開,永不關(guān)閉它.那么,時(shí)鐘是音頻硬件,而不是你的系統(tǒng)時(shí)鐘 – 一個(gè)微妙但重要的區(qū)別.

因此,假設(shè)您正在以44100 Hz生成16位單聲道樣本.這是一個(gè)以所需速率創(chuàng)建咔嗒聲的功能.請記住,這種咔嗒聲對(duì)揚(yáng)聲器(和你的耳朵)來說是不好的,所以如果你真的使用它,請以低音量播放. (此外,此代碼未經(jīng)測試 – 只是為了演示這個(gè)概念)

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設(shè)置速度后,可以重復(fù)調(diào)用generateMetronomeSamples()函數(shù)生成的樣本,并使用JavaSound將輸出流式傳輸?shù)綋P(yáng)聲器. (請參閱JSResources.org以獲得一個(gè)很好的教程)

一旦你有了這個(gè)工作,你就可以用從WAV或AIFF或短音或其他任何東西獲得的聲音來代替刺耳的咔嗒聲.

總結(jié)

以上是生活随笔為你收集整理的用java设计节拍器_具有高速的Java节拍器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。