10 2011 档案
摘要:本文译自三星官方bada开发网bada SDK 的安装 在你开始开发bada应用前,你需要先安装bada SDK(软件开发工具箱):准备工作 在你装SDK之前,请确认你的电脑符合开发所需的系统软硬件要求.准备工作还包括你在bada文档的帮助下开发bada应用所需要了解的一些相关知识安装bada SDK你可以到bada开发网上找到bada SDK. 需要更多SDK安装后的使用方面的信息,请参考开发环境搭建一节. 当你不再需要bada SDK,你可以从你的电脑将它卸载,以释放所占用的空间.英文原文地址:http://developer.bada.com/hel...
阅读全文
摘要:终端差异性信息 bada移动设备的特性可能各不相同.当你在设计你的应用时,你需要考虑你的目标终端的相关配置特性.例如,你能够很好的理解不同终端模型之间的区别,并会对你的应用产生怎样不同的影响,对于你的应用至关重要, 你还需要让你的应用能够支持多种不同终端.你需要考虑的因素包括:自动缩放(屏幕自适应)屏幕,摄像头解决方案支持的编码/解码器色彩与透明度位图英文原文地址:http://developer.bada.com/help_2.0/topic/com.osp.documentation.help/html/bada_overview/device_speci...
阅读全文
摘要:Privileged API bada 的开放API有三个级别. 有些API叫做Privileged API,用于处理平台和用户敏感数据.要使用特权API,你必须在你的(C++/FLASH应用或者WEB应用的)manifest文件中恰当说明.bada的开放API可以分为三个优先级别:非优先的,普通和系统. 下表提供了上述级别:Table: API privilege levelsPrivilege levelDescriptionNon-privileged本级别包含可以自由使用的API.因此,你不需要为使用本API级别而声明privilege group...
阅读全文
摘要:bada 文件系统 每个bada应用都会在终端文件系统中分配一个私有的存储区域,即该应用的根目录以下为文件系统的访问规则:C++/FLASH应用可以使用Osp::Io命名空间方法.web应用访问文件路径也遵循相同规则; 但是WAC device APIs支持的虚拟根目录不相同在整个系统范围内bada API的路径参数仅支持绝对路径形式.不支持CWD (Current Working Directory).以下特殊字符不允许出现在路径参数中: \\, ", *, :, <, >, ?, or |.文件系统路径参数区分大小写注意尽管文件系统目前是大小写敏感的,以后也...
阅读全文
摘要:终止应用 一个应用将在以下原因而被终止:用户的动作导致终止当bada应用自身调用方法Osp::App::Application::Terminate()( C++ 框架中) 或Osp.App.Application.terminate()(Web 框架中)当在前台运行的程序,用户点击End键系统强制终止应用当内存或者电量严重不足应用的任务由Osp::App::Application::OnAppTerminating()(in the C++ framework) 或者用户自定义并已注册到Osp.App.Application.terminating事件上(in t...
阅读全文
摘要:在看示例代码 testPlaybackHeadPositionIncrease 的时候,我们对 play 函数进行了研究。不过,当时对 Android 中声音竞争策略相关的内容,并没有详细分析。今天就以 AudioTrack 的播放为引子,来仔细看看 Anroid 中各种声音是以什么样的策略来竞争的。从 Java 侧类 AudioTrack 的 play 函数到函数 AudioFlinger::PlaybackThread::Track::start 之间的调用关系就不再叙述了。在看示例代码 testPlaybackHeadPositionIncrease 的时候已经说明过了。今天就从函数 A
阅读全文
摘要:今天来说说 native 中的代码是如何调用 java 侧代码的。在看 setEnabled 代码的时候,我们了解到,最终在函数 EffectHandle::setEnabled 中会调用 java 侧的函数,将状态改变的事件通知到 java 侧。今天就以 AudioEffect 中的 native 侧调用 java 函数作为例子,来说明 JNI 中的 callback 函数。#######################说明################################/*1、首先,在 JNI 中会有一个 init 函数,java 侧会首先调用该 init 函数来完成初始化
阅读全文
摘要:之前已经看过,通过接口getEnabled可以取得effect的enable状态。今天来看看如何来改变enable状态。*****************************************源码************************************************* //Test case 2.0: test setEnabled() and getEnabled() in valid state @LargeTest public void test2_0SetEnabledGetEnabled() throws Exception {...
阅读全文
摘要:今天来看看如何将AudioEffect与AudioTrack关联起来。*****************************************源码************************************************* //Test case 1.7: test auxiliary effect attachement on AudioTrack @LargeTest public void test1_7AuxiliaryOnAudioTrack() throws Exception { boolean result = f...
阅读全文
摘要:今天来看看AudioEffect中enable相关的接口。*****************************************源码************************************************* //Test case 1.3: test getEnabled() failure when called on released effect @LargeTest public void test1_3GetEnabledAfterRelease() throws Exception { boolean result...
阅读全文
摘要:今天来看看AudioEffect的构造,以及相关的一些函数。*****************************************源码************************************************* //Test case 1.0: test constructor from effect type and get effect ID @LargeTest public void test1_0ConstructorFromType() throws Exception { boolean result = true...
阅读全文
摘要:今天开始看看AudioEffect相关的接口。这个类,之前有看过。不过当时只是从类的定义出发,了解了一下基本的内容。这次从测试代码使用的接口出发,逐步撕开AudioEffect的面纱。*****************************************源码************************************************* //Test case 0.0: test queryEffects() and available effects @LargeTest public void test0_0QueryEffects() th...
阅读全文
摘要:之前我们看过get position,今天来看看set position。*****************************************源码************************************************* //Test case 3: setPlaybackHeadPosition() on paused track @LargeTest public void testSetPlaybackHeadPositionPaused() throws Exception { // constants for te...
阅读全文
摘要:今天来看看playback rate相关的接口。包括set和get。*****************************************源码************************************************* //Test case 6: setPlaybackRate() accepts values twice the output sample rate @LargeTest public void testSetPlaybackRateTwiceOutputSR() throws Exception { // ...
阅读全文
摘要:下面来看看音量设置相关的接口。*****************************************源码************************************************* //Test case 1: setStereoVolume() with max volume returns SUCCESS @LargeTest public void testSetStereoVolumeMax() throws Exception { // constants for test final String TE...
阅读全文
摘要:play, stop, flush这几个函数,今天来看看pause函数。*****************************************源码************************************************* //Test case 4: getPlaybackHeadPosition() is > 0 after play(); pause(); @LargeTest public void testPlaybackHeadPositionAfterPause() throws Exception { // co...
阅读全文
摘要:上次看到的testPlaybackHeadPositionIncrease函数中,先play了一会,然后获取position。今天看个复杂点的,先play,然后stop,之后在flush,此时再获取position会是什么情况呢?*****************************************源码************************************************* //Test case 3: getPlaybackHeadPosition() is 0 after flush(); @LargeTest public void...
阅读全文
摘要:继续啃AudioTrack的测试代码。*****************************************源码*************************************************//Test case 2: getPlaybackHeadPosition() increases after play() @LargeTest public void testPlaybackHeadPositionIncrease() throws Exception { // constants for test final ...
阅读全文
摘要:打算以测试代码中所使用的接口为点,以接口间调用关系为线,逐步撕开Android中Audio的面纱。*****************************************源码************************************************* public void testPlaybackHeadPositionAfterInit() throws Exception { // constants for test final String TEST_NAME = "testPlaybackHeadPositionAf...
阅读全文
摘要:前几天在看stream type的时候,调用函数AudioSystem::getOutput的地方并没有继续往下看。今天深入看看。*****************************************源码*************************************************status_t AudioTrack::set( int streamType, uint32_t sampleRate, int format, int channels, int frameCount, ...
阅读全文
摘要:在看音频数据是怎么写的时候,在MixerThread的threadloop函数中,有以下代码完成了往硬件写数据:int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize);mOutput来历:函数AudioFlinger::openOutput中创建了一个MixerThread对象,并将前面调用mAudioHardware->openOutputStream得到的output作为参数传入。MixerThread继承自PlaybackThread,在PlaybackThread的构造函数中将传入的output赋值
阅读全文
摘要:在看AudioTrack的write函数的时候,了解到,音频数据最终都写到了audio_track_cblk_t的结构体中。这个结构体是在AudioFlinger中创建的。AudioFlinger是如何来使用这些数据的呢?今天就来学习学习。我们写数据的时候,调用了audio_track_cblk_t::framesAvailable_l函数,来判断是否有可用的空间,以供写用。类audio_track_cblk_t中还有另外一个函数framesReady,看名字,应该是告诉我们已经准备好了多少东东。看样子,AudioFlinger在使用音频数据的时候,应该是先调用了framesReady函数,来
阅读全文
摘要:在最初的代码testWriteByte中,创建完AudioTrack对象后,调用了AudioTrack对象的write函数实现播放。今天就来看看write函数的实现。*****************************************源码************************************************* public int write(byte[] audioData,int offsetInBytes, int sizeInBytes) { if ((mDataLoadMode == MODE_STATIC) ...
阅读全文
摘要:发现以前写的东西,对调用函数的展开放在了函数的前面,导致不方便找到原来代码及设置的函数参数。以后打算稍作改动,把对被调函数的展开放在原代码的后面,这样看起来应该方便些。闲言少叙,跳入代码。前两天看AudioTrack创建的时候,我们看到了AudioHardwareALSA::openOutputStream,并没有继续往下看。今天就看看函数AudioHardwareALSA::openOutputStream的实现。*****************************************源码***********************************************
阅读全文
摘要:在看AudioTrack代码的时候,我们看到,要创建一个AudioTrack对象,需要指定一个StreamType。今天我们只把stream type相关的代码抽取出来,详细看看stream type相关的东东。java层的代码就不看了。从函数android_media_AudioTrack_native_setup开始说起。static int
android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_this, jint streamType, jint sampleRateI...
阅读全文