缘由 OpenSL ES 学习到现在已经知道 OpenSL ES 不仅能播放和录制PCM音频数据,还能改变声音大小.设置左声道或右声道播放.还能变速播放,可谓是播放音频的王者.但是变速有一点不好的就是,虽然播放音频的速度变了,但是相应的音调也随之变了,这样的用户体验就不那么好了.所以就想到了用开源的SoundTouch来实现PCM音频变速和变调,OpenSL ES只是单纯的播放PCM数据就可以了. 实现 1.移植SoundTouch(Android) 下载SoundTouch源码,当前最新是:v…
一.实现说明 OpenSL ES的录音要比播放简单一些,在创建好引擎后,再创建好录音接口基本就可以录音了.在这里我们做的是流式录音,所以需要用至少2个buffer来缓存录制好的PCM数据,这里我们可以动态创建一个二维数组,里面有2个buffer,然后每次录音取出一个,录制好后再写入文件就可以了,2个buffer依次来存储PCM数据,这样就可以连续录制流式音频数据了,二维数组里面自己维护了一个索引,来标识当前处于哪个buffer录制状态,暴露给外部的只是调用方法而已,细节对外也是隐藏的. 二.编码…
一.Android OpenSL ES 介绍 OpenSL ES (Open Sound Library for Embedded Systems)是无授权费.跨平台.针对嵌入式系统精心优化的硬件音频加速API.它为嵌入式移动多媒体设备上的本地应用程序开发者提供标准化, 高性能,低响应时间的音频功能实现方法,并实现软/硬件音频性能的直接跨平台部署,降低执行难度,促进高级音频市场的发展.简单来说OpenSL ES是一个嵌入式跨平台免费的音频处理库. Android的OpenSL ES库是在NDK的…
感谢,摘自:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ES 简明开发教程一:概述 Android OpenGL ES 简明开发教程二:构造OpenGL ES View Android OpenGL ES 简明开发教程三:3D绘图基本概念 Android OpenGL ES 简明开发教程四:3D 坐标变换 Android OpenGL ES 简明开发教程…
众所周知,Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的.MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制.但是该类只能对完整的音频文件进行操作,而不能直接对纯PCM音频数据操作.假如我们通过解码得到…
前阵子用一个JavaCV的FFmpeg库实现了YUV视频数据地采集,同样的采集PCM音频数据也可以采用JavaCV的FFmpeg库. 传送门:JavaCV FFmpeg采集摄像头YUV数据 首先引入 javacpp-ffmpeg依赖: <dependency> <groupId>org.bytedeco.javacpp-presets</groupId> <artifactId>ffmpeg</artifactId> <version>…
OpenSL ES 是基于NDK也就是c语言的底层开发音频的公开API,通过使用它能够做到标准化, 高性能,低响应时间的音频功能实现方法. 这次是使用OpenSL ES来做一个音乐播放器,它能够播放m4a.mp3文件,并能够暂停和调整音量. 播放音乐需要做一些步骤: 1.创建声音引擎 首先创建声音引擎的对象接口 result = slCreateEngine(&engineObject, , NULL, , NULL, NULL); 然后实现它 result = (*engineObject)-…
在上篇文章,我们能够配置好基本的Android OpenGL 使用的环境.但是如果我们不了解OpenGL ES如何定义图像的一些基本知识就使用OpenGL ES进行绘图还是有点棘手的.所以能够在OpenGL ES的View里面定义要绘制的形状是进行高端绘图操作的第一步. 本文主要做的事情就是为了讲解Android设备屏幕相关的OpenGL ES坐标系统,定义形状,形状面的基础知识,以及定义三角形和正方形. 一.定义三角形 OpenGL ES允许你使用三维空间坐标系定义绘制的图像,所以你在绘制一个…
零:环境搭建目的 为了在Android应用程序中使用OpenGL ES绘制图形,必须要为他们创建一个视图容器.其中最直接或者最常用的方式就是实现一个GLSurfaceView和一个GLSurfaceView.Renderer.GLSurfaceView是用OpenGL绘制图形的视图容器,GLSurfaceView.Renderer控制在该视图内绘制的内容. 下面将讲解如何使用GLSurfaceView 和 GLSurfaceView.Renderer 在一个简单的应用程序的Activity上面做…
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4829007.html [TOC] 使用Kotlin+OkHttp+RxJava进行网络请求 代码:https://github.com/wangjiegulu/KotlinAndroidSample 1. 需要 对Kotlin语法有基本的掌握 对OkHttp有基本的了解 对RxJava / RxAndroid有基本的了解 2. Kotlin搭建环境 见之前的文…
简述Android项目中android.jar文件里包含较为重要的15个系统编译后的class文件 android.app:提供高层的程序模型,提供基本的运行环境android.content:包含各种对设备上的数据进行访问和发布的类android.database:通过内容提供者浏览和操作数据库android.graphics:底层的图形库,包含画布,颜色过滤.点.矩形,可以将他们直接绘制到屏幕上android.location:定位相关服务的类android.media:提供一些类管理多种音…
在使用OpenGL ES做开发的时候,发现不是所有机型对OpenGL的代码都兼容的那么好,同样的代码在某些机型上总是会出现问题,但是在其他手机上就是好的.下面是本人总结的OpengGL 兼容问题: 一.验证当前手机支持的Opengl版本 android获取当前手机Opengl版本的方法 ActivityManager am =(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); ConfigurationInfo info =…
OpenGL(Open Graphics Library) 是开放图形库,是一个跨平台的图形 API.OpenGL ES(OpenGL for Embedded System)是专为移动端提供的一个子集.目前主要版本有1.0/1.1/2.0/3.0/3.1: 1.0:Android 1.0和更高的版本支持这个API规范 2.0:不兼容 OpenGL ES 1.x.Android 2.2(API 8)和更高的版本支持这个API规范 3.0:向下兼容 OpenGL ES 2.x.Android 4.…
简介OpenGL ES 谈到OpenGL ES,首先我们应该先去了解一下Android的基本架构,基本架构下图: 在这里我们可以找到Libraries里面有我们目前要接触的库,即OpenGL ES. 根据上图可以知道Android 目前是支持使用开放的图形库的,特别是通过OpenGL ES API来支持高性能的2D和3D图形.OpenGL是一个跨平台的图形API.为3D图形处理硬件指定了一个标准的软件接口.OpenGL ES 是适用于嵌入式设备的OpenGL规范. Android 支持OpenG…
前面的文章主要是整理的Android 官方文档对OpenGL ES支持的介绍.通过之前的文章,我们基本上可以完成的基本的形状的绘制. 这是本人做的整理笔记: https://github.com/renhui/OpenGLES20Study 目前到这里第一阶段的学习,也就是基本的图形绘制,基本的交互的实现. 平面绘制:三角形.正方形.在相机视角下的三角形.彩色三角形 立体绘制:正方体.圆柱体.圆锥体.球体 基本交互:手绘点.旋转三角形 知道了基本的图形绘制,也知道了基本的交互的实现,现在可能大多…
在屏幕上绘制图形只是OpenGL的相当基础的特点,你也可以用其他的Android图形框架类来实现这些,包括Canvas和Drawable对象.OpenGL ES为在三维空间中移动和变换提供了额外的功能,并提供了创建引人注目的用户体验的独特方式. 在本文中,你将进一步使用OpenGL ES学习怎样为你的图形添加一个旋转动作. 一.旋转一个图形 用OpenGL ES 2.0来旋转一个绘制对象是相对简单的.在你的渲染器中,添加一个新的变换矩阵(旋转矩阵),然后把它与你的投影与相机视图变换矩阵合并到一起…
一.概念 一般说来,纹理是表示物体表面的一幅或几幅二维图形,也称纹理贴图(texture).当把纹理按照特定的方式映射到物体表面上的时候,能使物体看上去更加真实.当前流行的图形系统中,纹理绘制已经成为一种必不可少的渲染方法.在理解纹理映射时,可以将纹理看做应用在物体表面的像素颜色.在真实世界中,纹理表示一个对象的颜色.图案以及触觉特征.纹理只表示对象表面的彩色图案,它不能改变对象的几何形式.更进一步的说,它只是一种高强度的计算行为. 概括为一句就是:纹理贴图就是把一个纹理(对于2D贴图,可以简单…
在上文中,我们使用OpenGL定义了能够被绘制出来的形状了,现在我们想绘制出来它们.使用OpenGLES 2.0来绘制形状会比你想象的需要更多的代码.因为OpenGL的API提供了大量的对渲染管线的控制能力. 本文就将讲述如何使用OpenGL ES 2.0 API来绘制出来我们上节定义的形状. 一.初始化形状 在你做任何绘制操作之前,你必须要初始化并加载你准备绘制的形状.除非形状的结构(指原始的坐标)在执行过程中发生改变,你都应该在你的Renderer的方法onSurfaceCreated()中…
OpenGL ES环境允许你以更接近于你眼睛看到的物理对象的方式来显示你绘制的对象.物理查看的模拟是通过对你所绘制的对象的坐标进行数学变换完成的: Projection - 这个变换是基于他们所显示的GLSurfaceView的宽和高来调整绘制对象的坐标的.没有这个计算变换,通过OpenGL绘制的形状会在不同显示窗口变形.这个投影变化通常只会在OpenGL view的比例被确定或者在你渲染器的onSurfaceChanged()方法中被计算.想要了解更多的关于投影和坐标映射的相关信息,请看绘制对…
像旋转三角形一样,通过预设程序来让对象移动对于吸引注意是很有用的,但是如果你想让你的OpenGL图形有用户交互呢?让你的OpenGL ES应用有触摸交互的关键是,扩展你的GLSurfaceView的实现重载onTouchEvent()方法来监听触摸事件. 本节内容将向你展示如何监听触摸事件来让用户旋转一个图形. 一.设置触摸事件 为了你的OpenGL ES应用能够响应触摸事件,你必须在你的GLSurfaceView中实现onTouchEvent()方法,下面的实现例子展示了怎样监听MotionE…
1. 获取着色器程序内成员变量的id(句柄.指针) GLES20.glGetAttribLocation方法:获取着色器程序中,指定为attribute类型变量的id. GLES20.glGetUniformLocation方法:获取着色器程序中,指定为uniform类型变量的id. 如: // 获取指向着色器中aPosition的index maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition"); //…
OpenGL 绘制图形步骤 上一篇介绍了 OpenGL 的相关概念,今天来实际操作,使用 OpenGL 绘制出图形,对其过程有一个初步的了解. OpenGL 绘制图形主要概括成以下几个步骤: 创建程序 初始化着色器 将着色器加入程序 链接并使用程序 绘制图形 上述每个步骤还可能会被分解成更细的步骤,对应着多个 api,下面我们来逐个看下. 创建程序 使用 glCreateProgram 创建一个 program 对象并返回一个引用 ID,该对象可以附加着色器对象.注意要在OpenGL渲染线程中创…
Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) : 通过三种方式绘制图片 Android 音视频开发(二):使用 AudioRecord 采集音频PCM并保存到文件 Android 音视频开发(三):使用 AudioTrack 播放PCM音频 Android 音视频开发(四):使用 Camera API 采集视频数据 Android 音视频开发(…
/* * *这里使用了transcode-1.1.7对wav文件进行解码.然后使用opensl es进行播放 * */ //用到的变量和结构体 WAV wav; //wav文件指针 SLObjectItf engineObject; //引擎对象 SLEngineItf engineInterface; //引擎接口 SLObjectItf outputMixObject; //混音器 SLObjectItf audioPlayerObject; //播放器对象 SLAndroidSimpleB…
版权声明:转载请说明出处:http://www.cnblogs.com/renhui/p/7457321.html 一.AudioRecord API详解 AudioRecord是Android系统提供的用于实现录音的功能类. 要想了解这个类的具体的说明和用法,我们可以去看一下官方的文档: AndioRecord类的主要功能是让各种JAVA应用能够管理音频资源,以便它们通过此类能够录制声音相关的硬件所收集的声音.此功能的实现就是通过”pulling”(读取)AudioRecord对象的声音数据来…
1. OpenSL ES 是什么 OpenSL ES (Open Sound Library for Embedded Systems)是无授权费.跨平台.针对嵌入式系统精心优化的硬件音频加速API.它为嵌入式移动多媒体设备上的本地应用程序开发者提供标准化, 高性能,低响应时间的音频功能实现方法,并实现软/硬件音频性能的直接跨平台部署,降低执行难度,促进高级音频市场的发展.简单来说OpenSL ES是一个嵌入式跨平台免费的音频处理库. Android的OpenSL ES库是在NDK的platfo…
开篇 炙手可热,望而生畏的音视频开发 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多开发者望而生畏. 为什么写这一系列博文 虽然网上有很多的博文总结了音视频打怪升级的路线,但是音视频开发相关的知识都相对独立,有讲"音视频解码相关"的,有讲"OpenGL相关"的,也有讲"FFmpeg相关的",但是对于新手来说,把所有的知识衔接串联起来…
前言 H264 视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的.随着 x264/openh264 以及 ffmpeg 等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使用H264的成本. 但为了用好 H264,我们还是要对 H264 的基本原理弄清楚才行.今天我们就来看看H264 的基本原理. H264概述 H264压缩技术主要采用了以下几种方法对视频数据进行压缩.包括: 帧内预测压缩,解决的是空域数据冗余问题. 帧间预测压缩(运动估计与补偿),解决的…
OpenGL ES是个跨平台的3D图形开发包规范,最常见的实现是采用C语言实现的,Android OpenGL ES 实现上是使用Java 语言对底层的C接口进行了封装,因此在android.opengl javax.microedition.khronos.egl ,javax.microedition.khronos.opengles 包中定义的OpenGL相关的类和方法带有很强的C语言色彩. 定义的常量都以GL_为前缀.比如GL10.GL_COLOR_BUFFER_BIT OpenGL E…
在学习Android OpenGL ES开发之前,你必须具备Java 语言开发经验和一些Android开发的基本知识,但并不需要有图形开发的经验,本教程也会涉及到一些基本的线性几何知识,如矢量,矩阵运算等. 此外Android SDK 中有关OpenGL ES API的开发文档 android.opengl javax.microedition.khronos.egl javax.microedition.khronos.opengles java.nio 注:上述Android 文档基本为空,…