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 ...
随机推荐
- 卸载 mysql
sudo apt-get remove mysql-* dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 之后会跳出一个弹框点击“是”就行了
- ros 录制
rosbag record cd ~/bagfiles # 存放.bag数据的路径 1. 录制所有 topic rosbag record -a # 录制所有topic 2. 录制指定的 topic ...
- Python定位SVG元素
svgelementXpath = "//div[12]/*[name()='svg']/*[name()='g']/*[name()='g'][2]/*[name()='g'][1]/*[ ...
- Spring AMQP 源码分析 01 - Impatient
### 准备 ## 目标 了解 Spring AMQP 核心代码 ## 前置知识 RabbitMQ 入门 ## 相关资源 Quick Tour for the impatient:&l ...
- URAL 1658 Sum of Digits
URAL 1658 思路: dp+记录路径 状态:dp[i][j]表示s1为i,s2为j的最小位数 初始状态:dp[0][0]=0 状态转移:dp[i][j]=min(dp[i-k][j-k*k]+1 ...
- Codeforces 680D - Bear and Tower of Cubes
680D - Bear and Tower of Cubes 思路:dfs+贪心,设剩余的体积为res,存在a,使得a3 ≤ res,每次取边长为a的立方体或者边长为a-1的立方体(这时体积上限变成a ...
- Necklace CodeForces - 613C (构造)
链接 大意: 给定n种珠子, 第i种有$a_i$个, 求将珠子穿成项链, 使得能使切开后的项链回文的切口尽量多 若有一种以上珠子为奇数, 显然不能为回文, 否则最大值一定是$gcd(a_1,a_2,. ...
- 修改TOMCAT默认主页
1.默认的项目都在目录:apache-tomcat-9.0.0.M22\webapps\ROOT下 2.该目录下有一个index.jsp是tomcat的默认主页,如下 3.现在需要修改这个默认主页,改 ...
- bzoj2763: [JLOI2011]飞行路线 最短路
题意:求最多可以有k条路免费的最短路 题解:用dis[x][k]表示从s开始用了k次免费机会到x的最短路,然后dij跑的时候优先队列里多维护一个k就好了 /********************** ...
- SMTP 通过 ssh 通道发送垃圾邮件
通过SSH隧道传输SMTP 根据设计,我们不允许校外机器使用我们的SMTP服务器.如果我们允许它,我们将允许任何和所有使用我们的SMTP服务器来分发垃圾邮件.但是也可以通过我们的SMTP服务器发送邮件 ...