`
一口三个汉堡
  • 浏览: 115966 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

实例11--播放按键声音

阅读更多

  实例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

0
4
分享到:
评论

相关推荐

    344-矩阵式键盘按键音(51单片机C语言实例Proteus仿真和代码)

    344-矩阵式键盘按键音(51单片机C语言实例Proteus仿真和代码)344-矩阵式键盘按键音(51单片机C语言实例Proteus仿真和代码)344-矩阵式键盘按键音(51单片机C语言实例Proteus仿真和代码)344-矩阵式键盘按键音(51单片机...

    单片机C语言实例--344-矩阵式键盘按键音.zip

    这个压缩包“单片机C语言实例--344-矩阵式键盘按键音.zip”显然是一个教学资源,旨在帮助学习者理解如何使用C语言在单片机上实现矩阵式键盘的按键检测及播放按键音的功能。下面我们将详细探讨这一主题。 1. **矩阵...

    单片机C语言实例-矩阵式键盘按键音.zip

    本实例“单片机C语言实例-矩阵式键盘按键音”着重介绍了如何使用C语言在单片机上实现矩阵式键盘的检测以及按键触发音频播放功能。 矩阵式键盘是一种常见的输入设备,通过排列按键形成行列交叉的方式,利用较少的I/O...

    单片机C语言实例--81-音乐播放.zip

    - **用户交互**:可能还包括按键输入来控制播放、暂停、停止等操作。 这个实例可能还会涉及一些硬件接口,比如I/O口控制和A/D转换(如果使用模拟音频信号)。总的来说,通过这个实例,学习者可以了解到如何将C语言...

    单片机实例81-音乐播放.rar

    3. **DA转换**:解码后的数字音频信号需要通过数模转换器(Digital-to-Analog Converter, DAC)转换为模拟信号,以便扬声器能够播放出声音。 4. **控制电路**:单片机通过控制DAC的工作,比如设置采样率、位深度等...

    单片机源码学习参考-矩阵式键盘按键音.zip

    本压缩包“单片机源码学习参考-矩阵式键盘按键音.zip”包含了一个具体的实例——如何使用单片机处理矩阵式键盘的按键输入,并实现按键音的播放。 矩阵式键盘是一种常见的输入设备,广泛应用于各种电子设备中,如...

    单片机C语言实例--138-电子琴.zip

    在这个实例中,C语言被用来编写控制电子琴的程序,通过定义不同的函数来实现音符的播放、音量调节等功能。 2. **单片机编程环境**: 提供的`.c`文件是C源代码,`.Opt`和`.plg`文件可能是编译优化报告和链接器生成...

    单片机C语言实例--371-矩阵键盘.zip

    通过这些实例,学习者不仅可以了解矩阵键盘的基本工作原理,还能深入学习如何在C语言环境下编写程序来驱动矩阵键盘,处理按键事件,这对于单片机编程和嵌入式系统的开发至关重要。同时,这些实践项目也提供了很好的...

    单片机C语言实例--345-简易电子琴.zip

    可能包括定义函数来处理按键扫描、音符播放和定时器管理等任务。 综上所述,这个“简易电子琴”的实例涵盖了从硬件接口到软件编程的多个方面,是学习单片机和嵌入式系统开发的一个很好的实践项目。通过理解和实现这...

    J2ME手机游戏实例之--俄罗斯方块

    《J2ME手机游戏实例之--俄罗斯方块》 Java Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机。本实例将探讨如何使用J2ME开发经典游戏——俄罗斯方块。在手机上实现这个...

    单片机实例345-简易电子琴.rar

    在这个实例中,PWM可能被用来产生不同音高的声音。 6. 扬声器驱动: 驱动扬声器通常需要将数字信号转换为模拟信号,这需要DA(数模)转换器。单片机通过控制DA转换器的输出来改变扬声器的音调和音量。 7. 仿真环境...

    51单片机教程实例58-抢答器

    按键用于参赛者抢答,显示模块用来显示抢答状态,蜂鸣器则用于声音提示。51单片机的IO端口将被用作与这些外设的接口。 3. **软件编程**:编写控制程序通常是使用C语言或汇编语言。在这个实例中,我们需要设计一个...

    51单片机教程实例75-喇叭发声原理

    在程序中,我们设置初始状态,启动定时器或PWM,然后在主循环中处理其他任务,如等待按键输入或处理其他传感器数据。同时,音频信号会持续输出,驱动喇叭发声。 在实验过程中,我们需要注意电源电压的稳定性和喇叭...

    单片机实例138-电子琴.rar

    单片机实例138-电子琴项目是一个深入学习单片机编程和应用的经典案例,主要涉及了单片机控制电子琴音符的产生、播放和处理。在电子琴项目中,单片机充当了核心处理器,负责接收用户输入、处理音频信号以及控制外部...

    51单片机教程实例138-电子琴

    音频驱动电路则负责将数字信号转化为声音,扬声器播放输出。 3. **程序编写**:使用C语言或汇编语言编程,实现音符识别、频率生成、节奏控制等功能。单片机会根据按键输入生成对应的音乐频率,并通过定时器来控制...

    51单片机源码程序-矩阵式键盘按键音.zip

    本资源“51单片机源码程序-矩阵式键盘按键音”主要探讨了如何在51单片机上实现矩阵式键盘的检测及按键音的播放功能。 矩阵式键盘是一种常见的输入设备,通过将多个按键排列成矩阵形式,利用较少的I/O引脚控制多个...

    C#做的一个按键有声音(自定义声音)的一个很好的软件

    开发者可以预先准备一系列不同按键对应的声音文件,并在事件处理程序中根据不同的按键调用不同的`SoundPlayer`实例播放对应的声音。 再者,自定义皮肤功能体现了C#界面设计的灵活性。在Windows Forms或WPF应用中,...

    fvwm实例分析-高级篇

    2. **超级键(Super键)映射** (第9-11行):将左侧和右侧的Windows键映射为`Super_L`和`Super_R`,并把右边的弹出菜单键映射为`Menu`键,这样可以更方便地使用这些特殊按键进行快速操作。 3. **加载Gnome设置守护...

Global site tag (gtag.js) - Google Analytics