怎样在android中实现和java me中playTone一样的功能

一口三个汉堡 2011-06-12 01:04:09
如题,就是在android实现可以自己设定他播放的音调,如音乐中do,rui,mi,fa,so,la,xi,dou。
搜了很久没看到,发现ToneGenerator有类似功能,但不能实现自定义相应的音调。
...全文
153 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenzheng38 2011-06-13
  • 打赏
  • 举报
回复
楼上高手啊,学习了
fontlose 2011-06-12
  • 打赏
  • 举报
回复

private final int duration = 1; // seconds
private final int sampleRate = 8000;
private final int numSamples = duration * sampleRate;
private final double sample[] = new double[numSamples];
private final double freqOfTone[] ={262, 294,330,349,392,440,494,524}; // do,rui,mi,fa,so,la,xi,dou的频率
private final byte generatedSnd[] = new byte[2 * numSamples];
private int freqCnt=0;


class PlayThread extends Thread
{
private int playfreq;//播放频率
public PlayThread(int cnt)
{
playfreq=cnt%8;
}


@Override
public void run() {
// TODO Auto-generated method stub

for (int i = 0; i < numSamples; ++i) {
sample[i] = Math.sin(2 * Math.PI * i / (sampleRate/freqOfTone[playfreq]));
}
int idx = 0;
for (final double dVal : sample) {
// scale to maximum amplitude
final short val = (short) ((dVal * 32767));
// in 16 bit wav PCM, first byte is the low order byte
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
}


final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, numSamples,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, generatedSnd.length);
audioTrack.play();
super.run();
}
}



调用

new PlayThread(0).start(); //0播发duo 1播放rui 2播放mi ......

我试过了 可以

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧