android 类似讯飞sdk android麦克风的动态效果

更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
使用您的微博帐号登录,即刻尊享微博用户专属服务。
使用您的QQ帐号登录,即刻尊享QQ用户专属服务。
使用您的人人帐号登录,即刻尊享人人用户专属服务。
按住视频可进行拖动
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
收藏成功,可进入查看所有收藏列表
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看:
讯飞麦克风使用帮助
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/164eL4
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/164eL4
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
爸爸去哪儿2游戏 立即参与
讯飞麦克风使用帮助
播放量数据:
你可能还想订阅他们:
&正在加载...
周围人都在搜-百度搜索提供
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
安装爱奇艺视频客户端,
马上开始为您下载本片
5秒后自动消失
&li data-elem="tabtitle" data-seq="{{seq}}"&
&a href="javascript:void(0);"&
&span>{{start}}-{{end}}&/span&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"&
&a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《》剧集:
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入300字
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制android 类似讯飞麦克风的动态效果_百度知道
android 类似讯飞麦克风的动态效果
这是一道待解决的难题
您的回答被采纳后将获得系统奖励20(财富值+经验值)+难题奖励30(财富值+经验值)
我有更好的答案
按默认排序
  麦克风是没有动态效果的,视频画面才能出动态效果。
其他类似问题
android的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Android麦克风录音带音量大小动态显示的圆形自定义View - 推酷
Android麦克风录音带音量大小动态显示的圆形自定义View
1、所谓无图无真相,先上效果图。我们要实现的就是中间那个录音的按钮,周边会显示一圈音量大小的波形
2、VolumCircleBar继承自View,我们进行了自定义,代码如下
package com.rdinfo.ccenglish.ui.ccprofile.
import android.content.C
import android.content.res.TypedA
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.C
import android.graphics.M
import android.graphics.P
import android.graphics.RectF;
import android.util.AttributeS
import android.view.V
import com.panshi.xuexiao.R;
* 麦克风音量圆形按钮
* @version [CCEnglish, ]
public class VolumCircleBar extends View
private double volumR // 音量百分比
private boolean isR // 录音标志
private Object lock = new Object();
private Thread uiT
private Paint mP
private RectF arcR
private Matrix matrix = new Matrix();
private final int VOLUM_INDICATE_LENGTH = 5; // 音量大小线长度
private final int CIRCLE_INNER_DISTANCE_TO_OUTSIDE = 5; // 内切圆距离外圆的距离
public VolumCircleBar(Context context)
this(context, null);
public VolumCircleBar(Context context, AttributeSet attrs)
this(context, attrs, 0);
public VolumCircleBar(Context context, AttributeSet attrs, int defStyle)
super(context, attrs, defStyle);
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.VolumCircleBar, defStyle, 0);
init(typedArray);
private int recordingC // 录音背景色
private int stoppedC // 停止背景色
private Bitmap centerR // 中间麦克风图片
private int totalBlockC // 块数量
private int spliteA // 块之间的间隔角度大小
private int circleW // 直径
private void init(TypedArray typedArray)
for (int i = 0; i & typedArray.length(); i++)
int attr = typedArray.getIndex(i);
switch (attr)
case R.styleable.VolumCircleBar_recordingColor:
recordingColor = typedArray.getColor(i, Color.GREEN);
case R.styleable.VolumCircleBar_stoppedColor:
stoppedColor = typedArray.getColor(i, Color.GRAY);
case R.styleable.VolumCircleBar_centerRes:
centerRes = BitmapFactory.decodeResource(getContext().getResources(), typedArray.getResourceId(i, R.drawable.ic_launcher));
case R.styleable.VolumCircleBar_blockCount:
totalBlockCount = typedArray.getInt(i, 50);
case R.styleable.VolumCircleBar_splitAngle:
spliteAngle = typedArray.getInt(i, 2);
typedArray.recycle();
uiThread = Thread.currentThread();
mPaint = new Paint();
if (spliteAngle * totalBlockCount & 360)
throw new IllegalArgumentException(&spliteAngle * blockCount & 360, while the result should be less than 360.&);
// debug for test
isRecording =
volumRate = 0.5;
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
circleWidth = width & height? width :
if (arcRect == null)
arcRect = new RectF(CIRCLE_INNER_DISTANCE_TO_OUTSIDE, CIRCLE_INNER_DISTANCE_TO_OUTSIDE,
circleWidth - CIRCLE_INNER_DISTANCE_TO_OUTSIDE, circleWidth - CIRCLE_INNER_DISTANCE_TO_OUTSIDE); // 音量显示区域, 内偏移几个像素
// 图片处理矩阵
initBitmapMatrix();
// 强制设置view大小
setMeasuredDimension(circleWidth, circleWidth);
* 中间图片压缩处理
private void initBitmapMatrix()
float innerCircleRadius = (circleWidth - 2 * (VOLUM_INDICATE_LENGTH + CIRCLE_INNER_DISTANCE_TO_OUTSIDE)) / 2f; // 内圆的半径
float innerRectangleWidth = (float)Math.cos((Math.PI / 180) * 45) * innerCircleRadius * 2; // 内圆的内切正方形的边长
float translateOffset = VOLUM_INDICATE_LENGTH + CIRCLE_INNER_DISTANCE_TO_OUTSIDE + innerCircleRadius - innerRectangleWidth / 2; // 偏移的offset
if (centerRes.getWidth() & (innerRectangleWidth) || centerRes.getHeight() & (innerRectangleWidth))
// 图片宽度或高度大于(直径-内偏移), 等比压缩
if (centerRes.getWidth() & centerRes.getHeight())
// 按照宽度压缩
float ratio = innerRectangleWidth / centerRes.getWidth();
matrix.postScale(ratio, ratio);
float translateY = (innerRectangleWidth - (centerRes.getHeight() * ratio)) / 2f;
// 在纵坐标方向上进行偏移,以保证图片居中显示
matrix.postTranslate(translateOffset, translateY + translateOffset);
// 按照高度压缩
float ratio = innerRectangleWidth / (centerRes.getHeight() * 1.0f);
matrix.postScale(ratio, ratio);
float translateX = (innerRectangleWidth - (centerRes.getWidth() * ratio)) / 2f;
// 在横坐标方向上进行偏移,以保证图片居中显示
matrix.postTranslate(translateX + translateOffset, translateOffset);
// 当图片的宽高都小于屏幕宽高时,直接让图片居中显示
float translateX = (innerRectangleWidth - centerRes.getWidth()) / 2f;
float translateY = (innerRectangleWidth - centerRes.getHeight()) / 2f;
matrix.postTranslate(translateX + translateOffset, translateY + translateOffset);
* 设置音量百分比
* @param rate
public void updateVolumRate(double rate)
synchronized (lock)
this.volumRate =
if (Thread.currentThread() != uiThread)
postInvalidate();
invalidate();
* 开始、停止录音
public void toggleRecord()
synchronized (lock)
isRecording = !isR
if (Thread.currentThread() != uiThread)
postInvalidate();
invalidate();
protected void onDraw(Canvas canvas)
super.onDraw(canvas);
canvas.drawColor(Color.TRANSPARENT);
synchronized (lock)
if (isRecording) // 正在录音
//1.绘制绿色圆圈
mPaint.setAntiAlias(true); //消除锯齿
mPaint.setColor(recordingColor);
mPaint.setStrokeWidth(1);
mPaint.setStyle(Paint.Style.FILL); // 填充
canvas.drawCircle(circleWidth / 2f, circleWidth / 2f, circleWidth / 2f, mPaint);
//2.根据音量百分比、块数量、块间隔大小计算角度动态绘制音量大小
// 计算块的角度
float blockAngle = (360 * 1.0f - spliteAngle * totalBlockCount) / totalBlockC
int drawBlockCount = (int)(totalBlockCount * volumRate); // 绘制的block数量
mPaint.setStrokeWidth(VOLUM_INDICATE_LENGTH);
mPaint.setColor(stoppedColor);
mPaint.setStyle(Paint.Style.STROKE); // 空心
for (int i = 0; i & drawBlockC i++)
canvas.drawArc(arcRect, i * (blockAngle + spliteAngle) - 90, blockAngle, false, mPaint);
else // 录音停止
//1.绘制灰色圆圈
mPaint.setColor(stoppedColor);
mPaint.setStrokeWidth(1);
mPaint.setStyle(Paint.Style.FILL); // 填充
canvas.drawCircle(circleWidth / 2f, circleWidth / 2f, circleWidth / 2f, mPaint);
// 绘制中间话筒
canvas.drawBitmap(centerRes, matrix, null);
} 今天时间不多,没看明白的留言吧。
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见Android麦克风录音带音量大小动态显示的圆形自定义View-android100学习网
Android麦克风录音带音量大小动态显示的圆形自定义View
1、所谓无图无真相,先上效果图。我们要实现的就是中间那个录音的按钮,周边会显示一圈音量大小的波形2、VolumCircleBar继承自View,我们进行了自定义,代码如下
1、所谓无图无真相,先上效果图。我们要实现的就是中间那个录音的按钮,周边会显示一圈音量大小的波形
2、VolumCircleBar继承自View,我们进行了自定义,代码如下下次自动登录
现在的位置:
& 综合 & 正文
我的Android笔记(十四)—— 在应用中集成科大讯飞的语音识别技术
语音识别技术最近貌似是越来越火了。再前几天科大讯飞还刚刚发布了讯飞语点——一个据说要挑战siri的应用。……好吧,对这些的东西讨论要说起来就多了。
本文主要讲如何在自己的android应用中集成语音识别技术——自然,是使用科大讯飞的sdk。
讯飞的语音sdk是需要申请的,地址是: 。申请一个讯飞的开发者账号,然后申请一个appid,申请的时候需要填写开发者信息和你的应用的信息。
申请之后经过审核通过,会得到一个appid,这个是在使用语音服务时需要用到的。(笔者感觉申请还是比较容易通过的,简单地填写一下就通过了。速度也很快,我在晚上十一点多申请的,到第二天早上九点多就收到审核通过的邮件。个人感觉这个审核只是为了防止恶意使用,毕竟语音服务是要使用讯飞的服务器资源的。)
申请到appid之后就可以下载SDK了,然后使用语音服务了。
以下我试用的过程,(点击button,弹出语音框,说完之后将识别的结果显示在EditText中):
在eclipse里新建一个android工程
导入讯飞的语音jar包
讯飞的服务是需要一堆权限的,在manifest.xml中加入
分别为:通过麦克风录音、联网、获取网络信息状态、获取wifi状态、改变网络状态如是否能联网、访问电话状态
在main.xml中添加一个EditText和一个Button,如下
【上篇】【下篇】

我要回帖

更多关于 android 麦克风音量 的文章

 

随机推荐