欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 范文大全 > 实用文>Android话筒音频采样和使用

Android话筒音频采样和使用

2022-07-22 13:46:16 收藏本文 下载本文

“jamesjoice”通过精心收集,向本站投稿了7篇Android话筒音频采样和使用,下面是小编给大家带来关于Android话筒音频采样和使用,一起来看看吧,希望对您有所帮助。

Android话筒音频采样和使用

篇1:Android话筒音频采样和使用

Android手机话筒采样有部分代码是在网上找的,具体不记得了,

使用采样结果以及是自己的app的功能代码:

1. 在一部分app中会需要对话筒的音频输入获取使用,比如之前很火的吹裙子;

2. 采样线程:

public class MicroLevelRunnable implements Runnable {

private static final String tag = “MicroLevelThread”;

private AudioRecord ar;

private short bs;

// 11 025 Hz、8 bit的声音称为电话音质;

// 22 050 Hz、16 bit的声音称为广播音质;

// 44 100 Hz、16 bit已达到CD的音质了[4]。

private final int SAMPLE_RATE_IN_HZ = 22050;

private boolean isRun = false;

public static final int msg_v = 0;

public static final int msg_vv = 1;

public static final int msg_vf = 2;

public static final int msg_vo = 3;

public static final int page_need_water = 10;

public static int bubble_speed = 2;// 每N次调用,出一个bubble

public MicroLevelRunnable {

super();

}

public void stop(){

isRun = false;

ar.stop();

ar.release();

ar = null;

}

public void run() {

bs = (short)AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT);

ar = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE_IN_HZ,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT, bs);

// 用于读取的

ar.startRecording();

short[] buffer = new short[bs];

isRun = true;

int speed = 1;

while (true) {

if (!isRun) {

try {

synchronized (this) {

Log.v(tag, “wait..”);

this.wait();

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

speed++;

int r = ar.read(buffer, 0, bs);

int v = 0;

for (int i = 0; i< buffer.length; i++) {

v += buffer[i] * buffer[i];

}

int value = (int) (Math.abs((int) (v / (float) r) / 10000) >>1);

double dB = 10 * Math.log10(Math.abs(v) / (double) r);

Message msg = new Message();

msg.what = msg_v;

msg.arg1 = value;

msg.arg2 = (int) dB;

// -------------------------------------------

// 用以下方法区分是否是吹气,缺点是可以模拟

// DB白噪低于50为噪音,大于60为无效

// value值低于38为无声,大于60无无效

if (speed >bubble_speed) {

BubbleMain.MainHandle.sendMessage(msg);

speed = 1;

}

}

}

}

3. 启动采样线程:

mRunnable = new MicroLevelRunnable();

mThread = new Thread(mRunnable);

mThread.start();

4. 本人的android应用【openbox.mobilem.360.cn/index/d/sid/341284 zhushou.360.cn/detail/index/soft_id/341284】 吹泡泡中就使用了如上功能模块

该应用是web+android组件的典型应用,吹泡泡的展现是优化修改过的web程序,通过webview接口以及话筒采样线程的结合,实现在手机上吹出泡泡的效果:

篇2:演讲时如何正确使用话筒

当前会议发言话筒的配置常见的有三种方式:

1.会议话筒+调音台;

2.会议话筒+智能混音器或会议话筒+数字媒体矩阵;

3.手拉手式数字会议话筒。

关于这三种配置方式的应用场合以及优缺点,做个简单比较,以便在实际工程配置时根据现场功能需要做到心中有底:

“会议话筒+调音台”方式

主要应用在对音质要求较高的场合。具有音色还原相对较好的优点,但是这种方式话筒的数量不宜过多,一般150平方左右,配置四只话筒为宜,并且须顾及现场的建声环境以及话筒、音箱的摆位。如果会议话筒数量增多,啸叫的问题在所难免,通过处理设备来解决的话,不但牺牲了音质,传声增益也提不起来。这样,就把这种配置方式的优点也给变成了缺点。其次,这种配置方式如果加上处理器来抵制啸叫,总体的造价就增加,性价比没有另外两种方式高;再次,作为最传统的会议发言方式,其功能不能进行扩展,比如会议智能化管理、摄像跟踪,同声传译等功能。这种方式目前仍然有实际应用,主要是用于报告厅、培训厅等场所。

“会议话筒+智能混音器或会议话筒+音频处理器”方式

会议话筒+智能混音器主要是应用在话筒的数量较多(四只以上)、工程造价又不太高的场合;会议话筒+数字媒体矩阵主要是应用在话筒的.数量较多(四只以上)、工程造价比较高的场合。优点在于一定程度上抑制了啸叫,同时可以对会议现场的话筒进行一定的智能管理,通过中控或摄像跟踪处理可以实现摄像跟踪功能,但缺点也是显而易见的,首先每个话筒要

一根话筒线,话筒数量越多,需要布的线越多,施工调试工作量很大;其次传声增益虽有一定的提升,但通常十几只话筒共用的效果还是不太理想;再次虽然实现了会议现场的智能管理,但要拓展其它会议现场的功能需求,尚需要借助其它功能设备来实现,性价比并不是太高。这种方式主要应用在人数不是很多的视频会议、音视频信号需要记录的小型会议室、较大型互动培训室、接见厅等场所。

“手拉手式数字会议话筒”方式

主要应用在话筒数量多,从数只会议话筒的小型会议到几千只会议话筒的大型会议;可以实现从单一的语音发言到多语种的语音发言;可以对会议现场通过硬件本身设置或管理软件设置,对会议进行有效的管理,还可以拓展签到、投票表决、嵌入式安装等功能需要。其优点在于会议综合功能需要可以满足,能保证对会议的效果做到有效控制;布线方便,一条专用数字会议话筒线可以连接几十只话筒;控制方式灵活;可拓展性强,性价比很高。尽管单只话筒的音质没有第一种方式好,但在使用相同的话筒数量前提下,总体效果则比第一种方式要好。这种方式已经广泛应用于各种类型的会议场所,成为会议发言的主流配置。

拿话筒的正确姿势

1.手不要完全握住麦克风的最上面,也不要只拿麦克风最下面一点点。正确的拿法要在麦克风下方的四分之一处,这样的拿法是最标准的。

2.嘴巴不要离麦克风太近。有些朋友唱歌喜欢离麦克风很近,感觉这样声音会大些,效果会好些,这种想法是错误的。这反而会影响到麦克风的收音,效果会更差。

3.也有些朋友唱歌喜欢离麦克风很远,感觉很有范,结果往往会导致声音很小,有的时候甚至听不到他唱歌的声音。正确的距离是,麦克风距离嘴巴大概两根手指的宽度,这个距离是最适合的,不远也不会太近。这样唱出来的歌声也是最好听的。

4.麦克风不要一直放在嘴巴面前。很多伙伴唱歌,在歌曲的间奏时,也喜欢把麦克风放在嘴巴跟前,这样其实是很容易开口唱的时候,跟错拍子的。正确的做法时,歌曲间奏时,把麦克风放下来,等下一句快开始的时候,再拿起来,这样等你刚好拿起来就开唱,就很容易跟到拍子。

篇3:演讲时如何正确使用话筒

麦克风比较好是放置在话筒架上,话简架上的麦克风可以上下移动、前后娜动,使用起来很方便,更主要的是可以空出双手来做动作,使演讲者的形象保持一个完美的整体。

麦克风与嘴的距离一般在一拳左右,太近了气粗声大,容易产生喷话筒的情况,一些送气音节(如怕、他、可、去、其等)更是明显,要注意把握好;话简也不能太远,太远了声音传不出去,尤其是敏感度不高的话筒,太远了等于没用。

麦克风不要放在嘴与地面平行的直线上,应低于嘴唇,放在嘴的下部且与嘴成45°角,这样才能灵活运用,否则会出现抬头时被话简拦住脸部的情况。

调好麦克风的位置后,不要用手去敲,看有没有声音,也不要用嘴吹,这些动作很不雅观。可检查麦克风的开关是否开了,麦克风的开关向上是开,向下是关,这是国际统一的。

有时可能没有话筒架,那么麦克风只能拿在手里了,握麦克风时不要太紧,握得太紧手容易颇动,会使听众以为你很紧张。可以握成拳状,也可握成抓状,但一般采用前者。不要随意换手,如果要换,一定要配合好动作进行。

演讲者根据场地的大小和麦克风的性能以及听众情绪的静噪情况,可以灵活调整嘴与麦克风的距离。场地大,尤其是在室外,或者麦克风性能差、听众浮躁不安、人群中有声音时,可以近点,否则应远点。

篇4:android sqlite 使用

Android操作系统使用SQLite数据库,使用有两种方法获得数据库对象:

1.获取已经存在的数据库

?

1

SQLiteDatabase dbbrndi=SQLiteDatabase.openDatabase(“/sdcard/zhycheng.db3”, null,SQLiteDatabase.OPEN_READONLY);

第一个String参数是数据库在文件系统中的位置,第二个参数一般为null,第三个参数控制数据库打开的方式,

这样就获得了数据库对象。

2.自己创建数据库

新建一个类,继承SQLiteOpenHelper,添加未实现的方法

代码如下

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

package your.zhycheng;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

public class MyHelper extends SQLiteOpenHelper{

public MyHelper(Context context, String name)

{

this(context,name,1);

}

public MyHelper(Context context, String name,int version)

{

this(context,name,null,version);

}

public MyHelper(Context context, String name,//数据库的名字

CursorFactory factory,

int version) {

super(context, name, factory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(“create table user(id int,name text)”);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

获得的数据库位于/data/data/yourpackage/databases/zhycheng.db3

然后通过生成一个MyHelper类的对象,调用

?

1

2

3

MyHelper mh=new MyHelper(this,“zhycheng”);

SQLiteDatabase db=mh.getReadableDatabase;

SQLiteDatabase db=mh.getWritableDatabase();

分别获得只读和可写的数据库,

获得数据库之后就可以进行数据库操作有以下两种方式操作数据库

1.执行SQL语句

?

1

2

3

db.rawQuery(sql,Args)

db.execSQL(sql, Args)

db.execSQL(sql)

上面的sql是String类型的数据库语言,Args是String数组。前面String中若有“?”则对应后面的值。

篇5:Android中AsyncTask使用

一、AsyncTask的作用:

代替Thread+Handler的组合,使创建异步任务变得简单,

AsyncTask执行后台操作,并在用户界面上发布结果,而不必处理线程。

二、AsyncTask的定义:

public abstract class AsyncTask

extends Object

AsyncTask必须子类可以使用。子类将覆盖至少一个方法(doInBackground执行异步任务),通常会覆盖一次(onPostExecute显示结果,更新UI)

AsyncTask三种类型如下:

》Params,参数的类型发送到任务执行时。

》Progress,在后台计算过程中公布的进度单元类型。

》Result,计算结果的类型。

不是所有类型都是异步任务所使用的。要标记为未使用的类型,设置该类型Void:

三、AsyncTask的方法:

1、onPreExecute()

在任务开始后立即调用,在UI线程执行。这一步通常用于设置任务,例如在用户界面中初始化进度条。

2、doInBackground(Params...)

后台线程调用onPreExecute()完成后立即执行。这一步后台进程执行,可能会花费很长时间。

3、onProgressUpdate(Progress...)

调用publishProgress,在UI线程上执行,

这种方法是用来显示用户进度界面,后台进程仍在执行。例如,它可用于显示一个进度条或在文本中显示日志。

4、onPostExecute(Result)

后台进程处理完后,在UI线程上执行。后台进程的结果被传递到这一步作为参数。

常用的写法如下:

class MyTask extends AsyncTask { @Override protected String doInBackground(String... params) { //执行异步任务 int n = 10; //调用publishProgress公布进度,最后onProgressUpdate方法将被执行 publishProgress(n); Thread.sleep(500);return null; } @Override protected void onPostExecute(String result) { //更新UI,显示结果 } @Override protected void onProgressUpdate(Integer... values) { //更新进度信息 }

new MyTask().execute();//执行任务

三、AsyncTask的规则:

1、任务实例必须在用户界面线程中创建。

2、execute(Params... params)方法必须在UI线程中调用。

3、不要手动调用onPreExecute,doInBackground,onProgressUpdate,onPostExecute这些方法

4、一个任务实例只能执行一次,如果执行第二次将会抛出异常

篇6:android shape使用总结

今天使用到shape,这个里面有很多属性,在这里我记录一下各个属性的使用的情况以及所代表的意思

复制代码

xmlns:android=“schemas.android.com/apk/res/android”

android:shape=[“rectangle” | “oval” | “line” | “ring”] >

android:radius=“integer”

android:topLeftRadius=“integer”

android:topRightRadius=“integer”

android:bottomLeftRadius=“integer”

android:bottomRightRadius=“integer” />

android:angle=“integer”

android:centerX=“integer”

android:centerY=“integer”

android:centerColor=“integer”

android:endColor=“color”

android:gradientRadius=“integer”

android:startColor=“color”

android:type=[“linear” | “radial” | “sweep”]

android:useLevel=[“true” | “false”] />

android:left=“integer”

android:top=“integer”

android:right=“integer”

android:bottom=“integer” />

android:width=“integer”

android:height=“integer” />

android:color=“color” />

android:width=“integer”

android:color=“color”

android:dashWidth=“integer”

android:dashGap=“integer” />

复制代码

上面这段就是shape使用的格式,来看一下如何使用:

定义这是一个GradientDrawable,必须作为根元素,

android:shape

定义shape的值,必须是下面的之一:

“rectangle”  矩阵,这也是默认的shape

“oval”  椭圆

“line”  一条水平的直线。这种shape必须使用 元素来定义这条线的宽度

“ring”  圆环

下面的属性只有当 android:shape=“ring”才使用:

android:innerRadius

尺寸。 内环的半径。一个尺寸值(dip等等)或者一个尺寸资源。

android:innerRadiusRatio

Float类型。这个值表示内部环的比例,例如,如果android:innerRadiusRatio = “ 5 ”,那么内部的半径等于环的宽度除以5。这个值会被android:innerRadius重写。 默认值是9。

android:thickness

尺寸。环的厚度,是一个尺寸值或尺寸的资源。

android:thicknessRatio

Float类型。厚度的比例。例如,如果android:thicknessRatio= “ 2 ”,然后厚度等于环的宽度除以2。这个值是被android:innerRadius重写, 默认值是3。

android:useLevel

Boolean类型。如果用在 LevelListDrawable里,那么就是true。如果通常不出现则为false。

为Shape创建一个圆角,只有shape是rectangle时候才使用。

android:radius

Dimension。圆角的半径。会被下面每个特定的圆角属性重写。

android:topLeftRadius

Dimension。top-left 设置左上角的半径

android:topRightRadius

Dimension。top-right 设置右上角的半径

android:bottomLeftRadius

Dimension。 设置右下角的半径

android:bottomRightRadius

Dimension。设置左下角的半径

指定这个shape的渐变颜色。

android:angle

Integer。渐变的角度。 0 代表从 left 到 right。90 代表bottom到 top。必须是45的倍数,默认为0

android:centerX

Float。渐变中心的相对X坐标,在0到1.0之间。

android:centerY

Float。渐变中心的相对Y坐标,在0到1.0之间。

android:centerColor

Color。可选的颜色值。基于startColor和endColor之间。

android:endColor

Color。 结束的颜色。

android:gradientRadius

Float 。渐变的半径。只有在 android:type=“radial”才使用

android:startColor

Color。开始的颜色值。

android:type

Keyword。渐变的模式,下面值之一:

“linear”  线形渐变,

这也是默认的模式

“radial”  辐射渐变。startColor即辐射中心的颜色

“sweep”  扫描线渐变。

android:useLevel

Boolean。如果在LevelListDrawable中使用,则为true

内容与视图边界的距离

android:left

Dimension。左边填充距离.

android:top

Dimension。顶部填充距离.

android:right

Dimension。右边填充距离.

android:bottom

Dimension。底部填充距离.

这个shape的大小。

android:height

Dimension。这个shape的高度。

android:width

Dimension。这个shape的宽度。

注意:默认情况下,这个shape会缩放到与他所在容器大小成正比。当你在一个ImageView中使用这个shape,你可以使用 android:scaleType=“center”来限制这种缩放。

填充这个shape的纯色

android:color

Color。颜色值,十六进制数,或者一个Color资源

这个shape使用的笔画,当android:shape=“line”的时候,必须设置改元素。

android:width

Dimension。笔画的粗细。

android:color

Color。笔画的颜色

android:dashGap

Dimension。每画一条线就间隔多少。只有当android:dashWidth也设置了才有效。

android:dashWidth

Dimension。每画一条线的长度。只有当 android:dashGap也设置了才有效。

android:dashGap和android:dashWidth设置这条线为虚线的,其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离,

使用别人的一段代码:

button_bg.xml

复制代码

android:width=“2dp”

android:color=“#fad3cf” />

android:bottomLeftRadius=“5dp”

android:bottomRightRadius=“5dp”

android:topLeftRadius=“5dp”

android:topRightRadius=“5dp” />

android:bottom=“10dp”

android:left=“10dp”

android:right=“10dp”

android:top=“10dp” />

复制代码

button_pressed_bg.xml的内容如下:

复制代码

android:endColor=“#FFFFFF”

android:gradientRadius=“50”

android:startColor=“#ff8c00”

android:type=“radial” />

android:dashGap=“3dp”

android:dashWidth=“5dp”

android:width=“2dp”

android:color=“#dcdcdc” />

android:bottom=“10dp”

android:left=“10dp”

android:right=“10dp”

android:top=“10dp” />

复制代码

如何使用,看下面的代码:

复制代码

复制代码

篇7:android AlarmManager的使用

Android的闹钟实现机制很简单, 只需要调用AlarmManager.Set()方法将闹钟设置提交给系统,当闹钟时间到后,系统会按照我们的设定发送指定的广播消息,我们写一个广播去接收消息做相应处理即可,

第一步是设置闹钟:

?

1

private static String MY_ALARM_ACTION = “android.alarm.test.action”;

?

1

2

3

4

5

6

7

8

9

10

11

12

/**

* 设置闹钟

* @param context

* @param firstTriggerTimeMillis 首次触发时间 (单位毫秒)

* @param periodTimeMillis 间隔时间

*/

private void setAlarmTime(Context context, long firstTriggerTimeMillis, long periodTimeMillis) {

AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

Intent intent = new Intent(MY_ALARM_ACTION);

PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

alarm.setRepeating(AlarmManager.RTC_WAKEUP, firstTriggerTimeMillis, periodTimeMillis, sender);

}

第二步是写一个接口器接收事件广播:

?

1

2

3

4

5

6

7

8

9

/**

* 闹钟接收

* @author Antony

* @date 2014-7-23

*/

public static class MyAlarmReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

if (MY_ALARM_ACTION.equals(intent.getAction())) {

Logcat.e(“接收一次闹钟消息!”);

?

1

2

3

4

5

//TODO 在这里写相关处理

return;

}

}

}

当然Receiver是需要在Mainfest.xml中注册的,我的注册信息如下:

?

1

2

3

4

5

细心的可能会发现我的MyAlarmReceiver类是带static关键词的,还有我在注册广播时是加了“$”符号的,

原因是酱紫的,为了代码不至于看起来那么凌乱,接收器是作为MyTest的内部类来写的。如果BroadcastReceiver做为内部类来写在Manifest中是不能直接用形如下面的方式来注册的:

【Android话筒音频采样和使用】相关文章:

1.android Actionbar 上的 MenuItem 的 使用细节和优化

2.经典童话故事音频

3.话筒作文400字

4.金色话筒作文

5.android学习方法

6.普通话考试范文音频

7.采样员个人工作计划

8.android全屏显示

9.android就业前景

10.学习Android心得体会

下载word文档
《Android话筒音频采样和使用.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

  • 返回顶部