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 ...
随机推荐
- js 几个重要的特性
背景: 语法借鉴 java 函数借鉴 scheme 原型继承借鉴 self 正则表达式借鉴 Perl 1.动态语言 函数的定义和调用 形参与实参不需要一致 形参可由 argu ...
- marquee 跑马灯公告
1.原始 marquee 2.自定义 marquee .tops { color: #fff; height: 23px; margin: 0 0 0 20px; min-height: 23px; ...
- 浏览器滚动条及其影响 calc()
1.浏览器滚动条 默认风格各异,推荐一插件 mCustomScrollbar 不考虑兼容也可自定义样式 链接二 2.影响 以垂直方向为例,当内容变化的时候,如果设置的是overflow:aut ...
- android开发:Android 中自定义View的应用
大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码: <?xml version="1.0&q ...
- [ORA-28001: the password has expired]的处理
http://irikintwtr.com/wordpress/?p=420 alter profile default limit password_life_time unlimited; alt ...
- php file_get_contents计时读取一个文件/页面 防止读取不到内容
php file_get_contents计时读取一个文件/页面 防止读取不到内容 $url = 'http://www.baidu.com/index.php'; $opts = array( 'h ...
- memcached set命令的大致处理逻辑笔记
这次记录状态机的主要逻辑,跟踪set命令的执行流程,暂不涉及到内存申请这一块,下面内容基本都是代码注释 首先还是补充了解下客户连接在发送数据到数据被处理并返回过程中conn的各种状态的表示 enum ...
- thinkphp关于时间加减几天
1.当前时间,往后退5天: date('Y-m-d H:i:s',strtotime('-1 days')); 2.有固定时间,往后面退一天或者七天,或者30天: 比如时间:$time = 2014- ...
- 比较windows下的5种IO模型
看到一个很有意思的解释: 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系.他们的信会被邮递员投递到他们的信箱里. 这和Socket模型非常类似.下面我就以老陈接收信件为例讲解Socke ...
- TCP文件发送
发送端(客户端) #include <iostream> #include <winsock2.h> #include <Ws2tcpip.h> #include ...