Generate And Play A Tone In Android hacking
/***********************************************************************************
* Generate And Play A Tone In Android hacking
* 声明:
* 1. 源代码url: http://stackoverflow.com/questions/2413426/playing-an-arbitrary-tone-with-android
* 2. 主要功能是能够让Android手机发出一定频率的声音;
* 3. 当然我们也可以用来做各种波形发生器,这只是一个简单的Demo源码程序;
*
* 2015-4-27 周一 晴 深圳 平山村 曾剑锋
**********************************************************************************/
public class PlaySound extends Activity {
// originally from http://marblemice.blogspot.com/2010/04/generate-and-play-tone-in-android.html
// and modified by Steve Pomeroy <steve@staticfree.info>
/* 声音持续3秒 */
private final int duration = ; // seconds
/* 采用率是8000 */
private final int sampleRate = ;
/* 总共采样多少个点 */
private final int numSamples = duration * sampleRate;
/* 利用总共采样的点数来生成数据数组 */
private final double sample[] = new double[numSamples];
/* 声音频率 */
private final double freqOfTone = ; // hz /* 主要是因为采用的16位的数据 */
private final byte generatedSnd[] = new byte[ * numSamples]; Handler handler = new Handler(); @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
} @Override
protected void onResume() {
super.onResume(); // Use a new tread as this can take a while
final Thread thread = new Thread(new Runnable() {
public void run() {
genTone();
handler.post(new Runnable() { public void run() {
playSound();
}
});
}
});
thread.start();
} /**
* 生成上面参数对应的声音数据,保存在数组中
*/
void genTone(){
// fill out the array
for (int i = ; i < numSamples; ++i) {
/**
* 算法解析:
* 1. sampleRate/freqOfTone:每个周期才多少个点;
* 2. i / (sampleRate/freqOfTone):当前第i个点在整个周期的
* 采样点的比重(不知怎么表达 :) );
* 3. 2 * Math.PI * i / (sampleRate/freqOfTone):当前第i个点对应的弧度制;
* 4. Math.sin(2 * Math.PI * i / (sampleRate/freqOfTone)):-1到1的sin函数值;
*/
sample[i] = Math.sin( * Math.PI * i / (sampleRate/freqOfTone));
} // convert to 16 bit pcm sound array
// assumes the sample buffer is normalised.
/**
* 将上面-1到1范围的sin函数值,转换成-32767到32767范围的值,
* 这个值是16位的值,放在对应的数组中
*/
int idx = ;
for (final double dVal : sample) {
// scale to maximum amplitude
final short val = (short) ((dVal * ));
// in 16 bit wav PCM, first byte is the low order byte
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> ); }
} void playSound(){
final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT/*16位数据*/, generatedSnd.length,
AudioTrack.MODE_STATIC);
//将所有数据写出,相当于是发出声音
audioTrack.write(generatedSnd, , generatedSnd.length);
audioTrack.play();
}
}

Generate And Play A Tone In Android hacking的更多相关文章
- Android hacking event 2017
1.you can't find me, 老规矩先打开jeb,然后看下主活动, 发现又调用了mainthread类的startWrites方法,继续跟进去. 发现是新建了一个随机输入流的文件对象,然后 ...
- 【转载】Android app 安全测试调研及执行
本文来源于:http://testerhome.com/topics/2209 一.通过在线工具进行测试 1.腾讯金刚审计系统http://service.security.tencent.com 优 ...
- Android平台免Root无侵入AOP框架Dexposed使用详解
Dexposed是基于久负盛名的开源Xposed框架实现的一个Android平台上功能强大的无侵入式运行时AOP框架. Dexposed的AOP实现是完全非侵入式的,没有使用任何注解处理器,编织器或者 ...
- Android 4.1.1源码编译
适用环境: 系统:ubuntu-12.04.2-desktop-amd64 JDK:sun-java6-jdk Android源码:android_4.1.1_r1 虚拟机安装: VMware Wor ...
- android PreferenceScreen使用笔记
preference.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen ...
- Java系列--第七篇 基于Maven的Android开发实战项目
本篇是基于<Android应用案例开发大全,吴亚峰等著>的项目开发实例源码,其中有些图片,我做了一些修改,用于个人学习,请勿用于商业. 1, 日程管理专家 mvn archetype:ge ...
- Java系列--第三篇 基于Maven的Android开发CAIO
学习要打好基础,这里用一个项目来学习一下Android的组件,参考网址为这个但不限于这个.有些东西的学习,理解三遍理论还不如一遍操作,所谓理论来自实践,实践是检验真理的唯一标准.所以,虽然看懂了那篇文 ...
- Java系列--第二篇 基于Maven的Android开发HelloAndroidWorld
曾经写过一篇Android环境配置的随笔,个人感觉特繁琐,既然有Maven,何不尝试用用Maven呢,经网上搜索这篇文章但不限于这些,而做了一个基于Maven的Android版的Hello Andro ...
- TI芯片android环境搭建和编译
1>. Reading package lists... Done Building dependency tree Reading state information... Do ...
随机推荐
- python 获取本地语言和编码的代码
#! /usr/bin/env python # encoding=utf8 import locale language, encoding = locale.getdefaultlocale() ...
- 更新自带pip
想安装docker-compose发现居然找不到pip curl https://bootstrap.pypa.io/get-pip.py | python 直接sudo不行.还是提示权限不够. su ...
- CentOS7.6 yum install Git
1. yum install git 2. git version or git –version 3. uninstall: git remove
- spring boot 基础篇 -- 自带图片服务器
我们平时在日常项目中经常会遇到图片的上传和访问的情景,平时我们可能习惯于把图片传到resource或者项项目中的某个位置,这样会有一个缺点,当我们重新项目打包时,这些图片会丢失.为了解决这一缺点,我们 ...
- ZOJ-3329 One Person Game (有环期望问题)
题目大意:有3个骰子,各有k1,k2,k3个面,面值为1~ki.还有一个计数器,初始值为0,统计所有的面值和.每次同时置这三个骰子,如果第一个骰子的朝上的值为a.第二个值为b.第三个值为c,那么将计数 ...
- POJ-1753 Flip Game (BFS+状态压缩)
Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of i ...
- OAF 标准的供应商管理员批准流程
标准供应商审批流程 oracle.apps.pos.onboard.webui.FlexRegApproverPGCO--初始化poplist LinkedList actionListText = ...
- ** exception error: no match of right hand side value
错误发生的情况是模式匹配失败.对于badmatch异常,很难找到单一的原因,但经常性的原因是你无意间尝试绑定已绑定过的变量.
- 变形CSS3
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- zookeeper server处理客户端命令的流程
zk server处理命令涉及到3个类,2个线程:一个命令请求先后经过PrepRequestProcessor,SyncRequestProcessor,FinalRequestProcessor. ...