/***********************************************************************************
* 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的更多相关文章

  1. Android hacking event 2017

    1.you can't find me, 老规矩先打开jeb,然后看下主活动, 发现又调用了mainthread类的startWrites方法,继续跟进去. 发现是新建了一个随机输入流的文件对象,然后 ...

  2. 【转载】Android app 安全测试调研及执行

    本文来源于:http://testerhome.com/topics/2209 一.通过在线工具进行测试 1.腾讯金刚审计系统http://service.security.tencent.com 优 ...

  3. Android平台免Root无侵入AOP框架Dexposed使用详解

    Dexposed是基于久负盛名的开源Xposed框架实现的一个Android平台上功能强大的无侵入式运行时AOP框架. Dexposed的AOP实现是完全非侵入式的,没有使用任何注解处理器,编织器或者 ...

  4. Android 4.1.1源码编译

    适用环境: 系统:ubuntu-12.04.2-desktop-amd64 JDK:sun-java6-jdk Android源码:android_4.1.1_r1 虚拟机安装: VMware Wor ...

  5. android PreferenceScreen使用笔记

    preference.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen ...

  6. Java系列--第七篇 基于Maven的Android开发实战项目

    本篇是基于<Android应用案例开发大全,吴亚峰等著>的项目开发实例源码,其中有些图片,我做了一些修改,用于个人学习,请勿用于商业. 1, 日程管理专家 mvn archetype:ge ...

  7. Java系列--第三篇 基于Maven的Android开发CAIO

    学习要打好基础,这里用一个项目来学习一下Android的组件,参考网址为这个但不限于这个.有些东西的学习,理解三遍理论还不如一遍操作,所谓理论来自实践,实践是检验真理的唯一标准.所以,虽然看懂了那篇文 ...

  8. Java系列--第二篇 基于Maven的Android开发HelloAndroidWorld

    曾经写过一篇Android环境配置的随笔,个人感觉特繁琐,既然有Maven,何不尝试用用Maven呢,经网上搜索这篇文章但不限于这些,而做了一个基于Maven的Android版的Hello Andro ...

  9. TI芯片android环境搭建和编译

    1>. Reading package lists... Done Building dependency tree        Reading state information... Do ...

随机推荐

  1. HTML5-form表单

    什么是表单? 01.获取用户的输入  ==>收集数据 02.将用户的输入发送到服务器   ==>与服务器进行交互 相关属性: action:我们收集完用户的信息之后,需要提交的服务器地址 ...

  2. IDEA配置GIT

    注:此方法可用于配置gitlab也可用于配置github 1.在github中创建一个账号:https://github.com/join?source=header-home 2.下载并安装git: ...

  3. 装B必备之 快捷键配置

    作为一个程序员 所有程序都用快捷来这是装B必备的无形装B 最为致命.... 开始搞起 第一步配置环境变量 在系统D盘新建一个文件夹  D:\cache; 然后把这个路径 配置上 D:\cache; 最 ...

  4. JavaScript权威指南--脚本化HTTP

    知识要点 超文本传输协议(HTTP)规定web浏览器如何从web服务器获取文档和向web服务器发送表单内容,以及web服务器如何响应这些请求和提交.web浏览器会处理大量的HTTP.通常,HTTP并不 ...

  5. domContentload和onload

    defer和async <script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚 ...

  6. Python 爬虫-Robots协议

    2017-07-25 21:08:16 一.网络爬虫的规模 二.网络爬虫的限制 • 来源审查:判断User‐Agent进行限制 检查来访HTTP协议头的User‐Agent域,只响应浏览器或友好爬虫的 ...

  7. 解决SpringBoot更新数据到MySQL乱码问题

    怀疑数据库没有采用UTF8编码. DB也是UTF8格式,没有问题. 怀疑Hibernate连接字符串问题. application.properties修改为通过utf8连接mysql,但是问题依然没 ...

  8. TortoiseXX 与TotalCommander (TC)的图标问题

    TortoiseXX通过overlay图标标志文件或文件夹是否被修改等状态,非常有用. 可惜TotoalCommander上,这些图标都没有显示. 其实,只需要在TC的菜单 配置->显示-> ...

  9. 河南省第十一届ACM大学生程序设计竞赛

    nyoj-1365-山区修路 内存限制:128MB 时间限制:3000ms 特判: No通过数:4 提交数:4 难度:3 题目描述: SNJ位于HB省西部一片群峰耸立的高大山地,横亘于A江.B水之间, ...

  10. Leetcode 114

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...