K歌引擎机型问题简述(坑爹啊!!!)

底层使用ffmpeg + lamemp3 使之能编码mp3.

1.当机器有点卡,导致播放的伴奏会卡。好了,这下就完蛋了,后面所有的都不同步了。

buffer调大就好了。

2.同时播放伴奏和录音,然后合成编码,发现不同步,录音偏慢。因为播放线程即audioTrack有个buffer,如果比较大的话,导致delay很明显。因为人是听到音乐然后开始跟着唱的,呵呵。

这时要让record线程休眠一段时间,这个时间就是填满player的buffer的时间。

3.绝大部分声音和伴奏同步,偶尔不同步,录音偏快,而且有延迟越来越大的趋势。这个是因为机器有点卡,或忙于做别的事情,这时record的buffer满了,而我们还没有来及取,就导致部分数据丢失,所以就导致人声越来越快。

record的buffer调大,整个线程优先级调高,呵呵。

4.moto me86等使用 tegra 2 的系列处理器点击会crash。

我操,这个超级坑爹!因为tegra2系统处理器虽然是arme-v7但是却不支持neon浮点运算库(这个是一个非常重要的可选项,绝大部分都支持)。。。尼玛。。。目前没有好的办法。。。只能单独为他发包了。。。

终于为开源做了点贡献

http://code.google.com/p/drum-practice/

用scala写了个android小游戏,练习架子鼓的,希望能对大家有些帮助。总算了了一桩心劫。呵呵。虽然没多少人会看到,但总归是做了,问心无愧了。呵呵。

scala with android!!! 终于成功了!!!我fuck!!!

 

相当的激动,哈哈,能用scala开发android了!!!哈哈。搞了两天啊!!!尼码。。。都怪android,每次tools更新ant都要改动,导致网上的2010年和2011年的文章都不能用。。。我fuck。。。还好找到一篇最近的。就是用最新的android tools作的! scala还是相当给力的!哈哈

原文在这里:

http://ricky.ez2.us/2012/04/25/%E4%BD%BF%E7%94%A8-scala-%E9%96%8B%E7%99%BC-android-%E7%9A%84%E7%92%B0%E5%A2%83%E5%BB%BA%E6%A7%8B/

非常给力!

 

自己做了一个更简单的,可以看俺的,原理跟上面一样,如下:

先在eclipse中新建android项目,加入scala的nature,然后下载这个文件,把文件夹afei_ant_android_scala中的所有东西解压到project根目录中,修改local.property文件,然后 ant debug 就行了!!!编译完的文件放在bin里头,给力!!!

 

 

android下多点触摸

一开始搞的想死,相当的莫名其妙,搞清楚了发现很强大,呵呵。

 

@Override
        public boolean onTouchEvent(MotionEvent event) {
            int action = event.getActionMasked();
            if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) {
                int i = event.getActionIndex();
                Point p = new Point((int) event.getX(i), (int) event.getY(i));
                for (int j = 0; j < mRect.length; j++) {
                    if (mRect[j].contains(p.x, p.y) ) {
                        click(j);
                    }
                }
            }

最关键的是这个MotionEvent  这个东西,半猜半试的。

每当有一个action时,都会触发一个event,这个时候拿 event.getAction() 时会是 他的code,为了区分是哪个pointer发生的这个event,会加上个mask 这里第一个手指按下,第二个手指点击时getAction = 261 就是0xff00 + 5,5是 action_pointer_down ,所有就要调用一个函数 event.getActionMasked() 得到这个action,然后判断这个action是不是我们想要的,如果是,就拿到event.getActionIndex(),然后根据此index去拿这个点的相关信息就可以了。

嘿嘿,搞定,收获还是很大的,哈哈

 

android mat

怀疑内存泄漏,使用了一个mat。。。原来木有怎么用过,呵呵

主要有一点,就是通过ddms 点击dump hprof时生成的hprof文件 mat 不认。。。我x。。。搜了一下,才发现要通过android tools里面的小工具转换一下才行,呵呵

如下:hprof-conv in.hprof out.hprof 这样就能打开了!呵呵。

mat下载在这里:http://www.eclipse.org/mat/downloads.php

被线程同步的问题搞死了都快。。。我X

android 控件

gallery 的默认child 都为 wrap_content

viewPager child的param 默认为 fill_parent

有疑问时仅供参考

无论你xml怎么设,他们默认都是这个param。。。

android程序使用gae

Google plugin for eclipse 这个插件很牛,使我们直接创建 android连接 gae的程序,他会建立两个project,一个是android,一个是webApp。

google 相关 doc在:https://developers.google.com/eclipse/docs/appengine_connected_android

教学视频在:http://www.youtube.com/watch?v=M7SxNNC429U

文本在:http://bradabrams.com/2011/05/google-io-session-overview-android-app-engine-a-developers-dream-combination/

理论中跟着教程走就ok,但是小弟发现有几个坑在里面,很奇怪。。。他是怎么演示成功的?fuck。。。

1.新建 App Engine Connected Android Project 时提示android-sdk-mac/tools/lib/proguard.cfg (not found), 这个很坑爹,绝对是插件问题。在其它的android项目中都有这个proguard.cfg,随便找一个拷贝到那里就ok了,否则很难搞。 继续阅读“android程序使用gae”

实现跟手的TabActivity效果

 

 author by afei

利用 android-support-v4 中的ViewPager可以轻松的实现跟手滑动。但是只支持 View 和 Fragment(也是利用view)。

 

之前也考虑过使用 ViewFliping 和 gallery ,但是都要将Activity转成View才可以。但是这样就会失去activity的特性。思来想后,还是改成Fragment靠谱点。

 

总体思路是这样:将本来放在TabActivity中的Activity们都改成 Fragment, 然后修改TabActivity,使其TabHost中content和width和height为0,然后把pager和tabHost关联起来。很trick。。。但是效果达到。

 

 

关键是如何修改activity至fragment,有没有这个可行性?

答案是必须应该可以的!万一有问题,也是可以商量的嘛。。。

1.将 extends Activity 改为 extends Fragment, 如果是 ListActivity 就改为 ListFragment。。。这明显就是为了修改方便啊。。。

2.一定会有XX出现,但是一定不多,fragment 的生命周期和 activity 很相似,包括onActivityResult() onStart() onPause() 等等。都有。

这里主要在onCreate()中,因为我们onCreate() 中会有 setContent(R.layout.layout_id) 恩,这里一定会报错,因为在fragment中单独抽出来了一个函数 onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState),把跟初始化view的相关代码都考到这个函数中就ok了,简单啊。将setContent 变为 inflater.inflate(R.layout.choose_accompany_layout, null) 然后return就ok。

3.最后一步,我们的代码中会有一些用到activity 和context 的地方,比如 getContentResolver() 和 其它的函数,这里只需要变为 getActivity() 就ok。因为fragment 中会和 外界的activity绑定起来。直接调用就可以。

修改完毕!!!

 

 

继承 FragmentTabsPager(代码在ChannelCommon中), 在onCreate()中调用 addTab(), 需要几个tab页就加入几次,然后这可以完美实现跟手滑动的tabActivity效果了!!!哇哈哈。

 

 

FragmentTabsPager 代码 : 继续阅读“实现跟手的TabActivity效果”