实例11播放按键声音,在java me中有playTone的方法,可以指定一些特定的频率播放,在android中,我没找到相应的方法,所以就用了另一种方法,但是播放出来的生硬不是音乐的音符,只是其他的一些声音,下面给出源代码。因为简单,也没有涉及到界面,所以就不给出效果图,也没有MainView,就单单一个acitivity.
package com.wjh.test_tone;
import android.app.Activity;
import android.media.AudioManager;
import android.media.ToneGenerator;
import android.os.Bundle;
import android.view.KeyEvent;
public class TestTone extends Activity {
/** Called when the activity is first created. */
ToneGenerator tonePlayer = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tonePlayer = new ToneGenerator(AudioManager.STREAM_MUSIC, 70);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch(keyCode)
{
case KeyEvent.KEYCODE_0:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_0,100);
break;
case KeyEvent.KEYCODE_1:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_1,100);
break;
case KeyEvent.KEYCODE_2:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_2,100);
break;
case KeyEvent.KEYCODE_3:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_3,100);
break;
case KeyEvent.KEYCODE_4:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_4,100);
break;
case KeyEvent.KEYCODE_5:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_5,100);
break;
case KeyEvent.KEYCODE_6:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_6,100);
break;
case KeyEvent.KEYCODE_7:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_7,100);
break;
case KeyEvent.KEYCODE_8:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_8,100);
break;
case KeyEvent.KEYCODE_9:
tonePlayer.startTone(ToneGenerator.TONE_DTMF_9,100);
break;
}
return super.onKeyDown(keyCode, event);
}
}
在想playtone的时候,我在csdn发问了,fontlose回答了一种方法,我觉得还不错,有发出那7个声音,下面给出他提供的方法源码:
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 ......
apk文件(将后缀改为 apk):Demon_11.zip
源代码文件:Demon_11.rar
分享到:
相关推荐
344-矩阵式键盘按键音(51单片机C语言实例Proteus仿真和代码)344-矩阵式键盘按键音(51单片机C语言实例Proteus仿真和代码)344-矩阵式键盘按键音(51单片机C语言实例Proteus仿真和代码)344-矩阵式键盘按键音(51单片机...
这个压缩包“单片机C语言实例--344-矩阵式键盘按键音.zip”显然是一个教学资源,旨在帮助学习者理解如何使用C语言在单片机上实现矩阵式键盘的按键检测及播放按键音的功能。下面我们将详细探讨这一主题。 1. **矩阵...
本实例“单片机C语言实例-矩阵式键盘按键音”着重介绍了如何使用C语言在单片机上实现矩阵式键盘的检测以及按键触发音频播放功能。 矩阵式键盘是一种常见的输入设备,通过排列按键形成行列交叉的方式,利用较少的I/O...
- **用户交互**:可能还包括按键输入来控制播放、暂停、停止等操作。 这个实例可能还会涉及一些硬件接口,比如I/O口控制和A/D转换(如果使用模拟音频信号)。总的来说,通过这个实例,学习者可以了解到如何将C语言...
3. **DA转换**:解码后的数字音频信号需要通过数模转换器(Digital-to-Analog Converter, DAC)转换为模拟信号,以便扬声器能够播放出声音。 4. **控制电路**:单片机通过控制DAC的工作,比如设置采样率、位深度等...
本压缩包“单片机源码学习参考-矩阵式键盘按键音.zip”包含了一个具体的实例——如何使用单片机处理矩阵式键盘的按键输入,并实现按键音的播放。 矩阵式键盘是一种常见的输入设备,广泛应用于各种电子设备中,如...
在这个实例中,C语言被用来编写控制电子琴的程序,通过定义不同的函数来实现音符的播放、音量调节等功能。 2. **单片机编程环境**: 提供的`.c`文件是C源代码,`.Opt`和`.plg`文件可能是编译优化报告和链接器生成...
通过这些实例,学习者不仅可以了解矩阵键盘的基本工作原理,还能深入学习如何在C语言环境下编写程序来驱动矩阵键盘,处理按键事件,这对于单片机编程和嵌入式系统的开发至关重要。同时,这些实践项目也提供了很好的...
可能包括定义函数来处理按键扫描、音符播放和定时器管理等任务。 综上所述,这个“简易电子琴”的实例涵盖了从硬件接口到软件编程的多个方面,是学习单片机和嵌入式系统开发的一个很好的实践项目。通过理解和实现这...
《J2ME手机游戏实例之--俄罗斯方块》 Java Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机。本实例将探讨如何使用J2ME开发经典游戏——俄罗斯方块。在手机上实现这个...
在这个实例中,PWM可能被用来产生不同音高的声音。 6. 扬声器驱动: 驱动扬声器通常需要将数字信号转换为模拟信号,这需要DA(数模)转换器。单片机通过控制DA转换器的输出来改变扬声器的音调和音量。 7. 仿真环境...
按键用于参赛者抢答,显示模块用来显示抢答状态,蜂鸣器则用于声音提示。51单片机的IO端口将被用作与这些外设的接口。 3. **软件编程**:编写控制程序通常是使用C语言或汇编语言。在这个实例中,我们需要设计一个...
在程序中,我们设置初始状态,启动定时器或PWM,然后在主循环中处理其他任务,如等待按键输入或处理其他传感器数据。同时,音频信号会持续输出,驱动喇叭发声。 在实验过程中,我们需要注意电源电压的稳定性和喇叭...
单片机实例138-电子琴项目是一个深入学习单片机编程和应用的经典案例,主要涉及了单片机控制电子琴音符的产生、播放和处理。在电子琴项目中,单片机充当了核心处理器,负责接收用户输入、处理音频信号以及控制外部...
音频驱动电路则负责将数字信号转化为声音,扬声器播放输出。 3. **程序编写**:使用C语言或汇编语言编程,实现音符识别、频率生成、节奏控制等功能。单片机会根据按键输入生成对应的音乐频率,并通过定时器来控制...
本资源“51单片机源码程序-矩阵式键盘按键音”主要探讨了如何在51单片机上实现矩阵式键盘的检测及按键音的播放功能。 矩阵式键盘是一种常见的输入设备,通过将多个按键排列成矩阵形式,利用较少的I/O引脚控制多个...
开发者可以预先准备一系列不同按键对应的声音文件,并在事件处理程序中根据不同的按键调用不同的`SoundPlayer`实例播放对应的声音。 再者,自定义皮肤功能体现了C#界面设计的灵活性。在Windows Forms或WPF应用中,...
2. **超级键(Super键)映射** (第9-11行):将左侧和右侧的Windows键映射为`Super_L`和`Super_R`,并把右边的弹出菜单键映射为`Menu`键,这样可以更方便地使用这些特殊按键进行快速操作。 3. **加载Gnome设置守护...