<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-369154383558266271</id><updated>2012-01-31T17:28:16.113-08:00</updated><category term='Blackberry'/><category term='Android'/><category term='Iphone'/><title type='text'>mobile device programming</title><subtitle type='html'>it's All about mobile programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default?start-index=101&amp;max-results=100'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>137</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-1424965656546872807</id><published>2012-01-31T17:28:00.000-08:00</published><updated>2012-01-31T17:28:16.128-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Shake Animation Example</title><content type='html'>This example let you shake or animation your view on some event described.&lt;br /&gt;&lt;br /&gt;Algorithm:&lt;br /&gt;&lt;br /&gt;1.) Create a new project by File-&gt; New -&gt; Android Project name it ShakeAnimationExample.&lt;br /&gt;&lt;br /&gt;2.) You will see some default code into your main.xml, strings.xml and android manifest file.&lt;br /&gt;&lt;br /&gt;3.) Write following into main.xml file:&lt;br /&gt;&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="vertical"   android:padding="10dip"   android:layout_width="fill_parent"   android:layout_height="wrap_content"&gt;&lt;br /&gt;   &lt;br /&gt;    &lt;TextView       android:layout_width="fill_parent"       android:layout_height="wrap_content"       android:layout_marginBottom="10dip"       android:text="Please enter your password:"   /&gt;&lt;br /&gt;   &lt;br /&gt;    &lt;EditText android:id="@+id/pw"       android:layout_width="fill_parent"       android:layout_height="wrap_content"       android:clickable="true"       android:singleLine="true"       android:password="true"   /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;Button android:id="@+id/login"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="Login"   /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/LinearLayout&gt;&lt;br /&gt;&lt;br /&gt;4.) Create and Write following into anim/shake.xml:&lt;br /&gt;&lt;translate xmlns:android="http://schemas.android.com/apk/res/android"        android:fromXDelta="0" android:toXDelta="10" android:duration="1000"        android:interpolator="@anim/cycle_7" /&gt;&lt;br /&gt;&lt;br /&gt;5.) Create and Write following into anim/cycle_7.xml:&lt;br /&gt;&lt;cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="7" /&gt;&lt;br /&gt;&lt;br /&gt;Steps:&lt;br /&gt;&lt;br /&gt;1.) Create a project named ShakeAnimationExample and set the information as stated in the image.&lt;br /&gt;&lt;br /&gt;Build Target: Android 1.6&lt;br /&gt;Application Name: ShakeAnimationExample&lt;br /&gt;Package Name: com.example. ShakeAnimation&lt;br /&gt;Activity Name: ShakeAnimationExample&lt;br /&gt;Min SDK Version: 4&lt;br /&gt;&lt;br /&gt;2.) Open ShakeAnimationExample.java file and write following code there:&lt;br /&gt;package com.example.ShakeAnimation;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.animation.Animation;&lt;br /&gt;import android.view.animation.AnimationUtils;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class ShakeAnimation extends Activity implements View.OnClickListener {&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt;        View loginButton = findViewById(R.id.login);&lt;br /&gt;        loginButton.setOnClickListener(this);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void onClick(View v) {&lt;br /&gt;        Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);&lt;br /&gt;        findViewById(R.id.pw).startAnimation(shake);&lt;br /&gt;        Toast.makeText(this, "Wrong Password", Toast.LENGTH_SHORT).show();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;3.) Compile and build the project.&lt;br /&gt;&lt;br /&gt;4.) Run on 1.6 simulator for the output.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-1424965656546872807?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/1424965656546872807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/shake-animation-example.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1424965656546872807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1424965656546872807'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/shake-animation-example.html' title='Shake Animation Example'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-3844965545408346299</id><published>2012-01-31T17:27:00.000-08:00</published><updated>2012-01-31T17:27:24.596-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Email Intent Demo</title><content type='html'>This example will show you how to open email composer through your application. &lt;br /&gt;Algorithm:&lt;br /&gt;1.) Create a new project by File-&amp;gt; New -&amp;gt; Android Project name it EmailIntentDemo.&lt;br /&gt;2.) You will see some default code into your main.xml, strings.xml and android manifest file.&lt;br /&gt;3.) Now add 1 buttons into your main.xml or write following into main.xml file:&lt;br /&gt;&lt;div class="codesnip-container"&gt;&lt;div class="xml codesnip" style="font-family: monospace;"&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&lt;linearlayout&lt; span=""&gt; &lt;span class="re0"&gt;xmlns:android&lt;/span&gt;=&lt;span class="st0"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;&lt;/linearlayout&lt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt; &amp;nbsp; &amp;nbsp;&lt;span class="re0"&gt;android:orientation&lt;/span&gt;=&lt;span class="st0"&gt;"vertical"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt; &amp;nbsp; &amp;nbsp;&lt;span class="re0"&gt;android:layout_width&lt;/span&gt;=&lt;span class="st0"&gt;"fill_parent"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt; &amp;nbsp; &amp;nbsp;&lt;span class="re0"&gt;android:layout_height&lt;/span&gt;=&lt;span class="st0"&gt;"fill_parent"&lt;/span&gt; &lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&lt;button&lt; span=""&gt; &lt;span class="re0"&gt;android:text&lt;/span&gt;=&lt;span class="st0"&gt;"Share"&lt;/span&gt; &lt;span class="re0"&gt;android:id&lt;/span&gt;=&lt;span class="st0"&gt;"@+id/button1"&lt;/span&gt;&lt;/button&lt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;android:layout_width&lt;/span&gt;=&lt;span class="st0"&gt;"wrap_content"&lt;/span&gt; &lt;span class="re0"&gt;android:layout_height&lt;/span&gt;=&lt;span class="st0"&gt;"wrap_content"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="re1"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;4.) Your launcher activity EmailIntentDemo will have one default functions OnCreate().&lt;br /&gt;5.) You must have to configure any email onto your device or simulator to get the output on this demo.&lt;br /&gt;6.)	To configure email goto applications and select “Email”, now follow  the instructions given and configure your email onto device or  simulator.&lt;br /&gt;Steps:&lt;br /&gt;1.) Create a project named EmailIntentDemo and set the information as stated in the image.&lt;br /&gt;Build Target: Android 1.6&lt;br /&gt;Application Name: EmailIntentDemo&lt;br /&gt;Package Name: com.example. EmailIntentDemo&lt;br /&gt;Activity Name: EmailIntentDemo&lt;br /&gt;Min SDK Version: 4&lt;br /&gt;&lt;a href="http://www.edumobile.org/android/wp-content/uploads/2011/09/emailintent_newproj.png"&gt;&lt;img alt="" class="alignnone size-medium wp-image-1319" height="212" src="http://www.edumobile.org/android/wp-content/uploads/2011/09/emailintent_newproj-300x212.png" title="emailintent_newproj" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;2.) Open EmailIntentDemo.java file and write following code there:&lt;br /&gt;&lt;div class="codesnip-container"&gt;&lt;div class="java codesnip" style="font-family: monospace;"&gt;&lt;span class="kw1"&gt;package&lt;/span&gt; &lt;span class="co2"&gt;com.example.EmailIntentDemo&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;java.util.List&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;android.app.Activity&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;android.content.Intent&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;android.content.pm.PackageManager&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;android.content.pm.ResolveInfo&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;android.os.Bundle&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;android.view.View&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;android.view.View.OnClickListener&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="co2"&gt;android.widget.Button&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;class&lt;/span&gt; EmailIntentDemo &lt;span class="kw1"&gt;extends&lt;/span&gt; Activity &lt;span class="br0"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; onCreate&lt;span class="br0"&gt;(&lt;/span&gt;Bundle savedInstanceState&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;super&lt;/span&gt;.&lt;span class="me1"&gt;onCreate&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;savedInstanceState&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView&lt;span class="br0"&gt;(&lt;/span&gt;R.&lt;span class="me1"&gt;layout&lt;/span&gt;.&lt;span class="me1"&gt;main&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=allinurl%3Abutton+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky"&gt;&lt;span class="kw3"&gt;Button&lt;/span&gt;&lt;/a&gt; shareButton &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="br0"&gt;(&lt;/span&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=allinurl%3Abutton+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky"&gt;&lt;span class="kw3"&gt;Button&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;)&lt;/span&gt; findViewById&lt;span class="br0"&gt;(&lt;/span&gt;R.&lt;span class="me1"&gt;id&lt;/span&gt;.&lt;span class="me1"&gt;button1&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shareButton.&lt;span class="me1"&gt;setOnClickListener&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="kw1"&gt;new&lt;/span&gt; OnClickListener&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; onClick&lt;span class="br0"&gt;(&lt;/span&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=allinurl%3Aview+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky"&gt;&lt;span class="kw3"&gt;View&lt;/span&gt;&lt;/a&gt; arg0&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Intent emailIntent &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw1"&gt;new&lt;/span&gt; Intent&lt;span class="br0"&gt;(&lt;/span&gt;android.&lt;span class="me1"&gt;content&lt;/span&gt;.&lt;span class="me1"&gt;Intent&lt;/span&gt;.&lt;span class="me1"&gt;ACTION_SEND&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; emailIntent.&lt;span class="me1"&gt;setType&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;"text/plain"&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; emailIntent.&lt;span class="me1"&gt;putExtra&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;android.&lt;span class="me1"&gt;content&lt;/span&gt;.&lt;span class="me1"&gt;Intent&lt;/span&gt;.&lt;span class="me1"&gt;EXTRA_SUBJECT&lt;/span&gt;,&lt;span class="st0"&gt;"Email Intent Example"&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; emailIntent.&lt;span class="me1"&gt;putExtra&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;android.&lt;span class="me1"&gt;content&lt;/span&gt;.&lt;span class="me1"&gt;Intent&lt;/span&gt;.&lt;span class="me1"&gt;EXTRA_TEXT&lt;/span&gt;, &lt;span class="st0"&gt;"This is email is generated using EmailIntent Demo application to sow how we can directly compose a mail from our application."&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;final&lt;/span&gt; PackageManager pm &lt;span class="sy0"&gt;=&lt;/span&gt; getPackageManager&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @SuppressWarnings&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;"static-access"&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;final&lt;/span&gt; List&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;ResolveInfo&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt; matches &lt;span class="sy0"&gt;=&lt;/span&gt; pm.&lt;span class="me1"&gt;queryIntentActivities&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;emailIntent, pm.&lt;span class="me1"&gt;MATCH_DEFAULT_ONLY&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ResolveInfo best &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw2"&gt;null&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="kw1"&gt;final&lt;/span&gt; ResolveInfo info &lt;span class="sy0"&gt;:&lt;/span&gt; matches&lt;span class="br0"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;(&lt;/span&gt;info.&lt;span class="me1"&gt;activityInfo&lt;/span&gt;.&lt;span class="me1"&gt;name&lt;/span&gt;.&lt;span class="me1"&gt;toLowerCase&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;.&lt;span class="me1"&gt;contains&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;"mail"&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; best &lt;span class="sy0"&gt;=&lt;/span&gt; info&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;(&lt;/span&gt;best &lt;span class="sy0"&gt;!=&lt;/span&gt; &lt;span class="kw2"&gt;null&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; emailIntent.&lt;span class="me1"&gt;setClassName&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;best.&lt;span class="me1"&gt;activityInfo&lt;/span&gt;.&lt;span class="me1"&gt;packageName&lt;/span&gt;, best.&lt;span class="me1"&gt;activityInfo&lt;/span&gt;.&lt;span class="me1"&gt;name&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; startActivity&lt;span class="br0"&gt;(&lt;/span&gt;emailIntent&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;3.) Compile and build the project.&lt;br /&gt;4.) Run on 1.6 simulator for the output.&lt;br /&gt;&lt;a href="http://www.edumobile.org/android/wp-content/uploads/2011/09/emailintent_1.png"&gt;&lt;img alt="" class="alignnone size-medium wp-image-1316" height="275" src="http://www.edumobile.org/android/wp-content/uploads/2011/09/emailintent_1-300x275.png" title="emailintent_1" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.edumobile.org/android/wp-content/uploads/2011/09/emailintent_2.png"&gt;&lt;img alt="" class="alignnone size-medium wp-image-1317" height="275" src="http://www.edumobile.org/android/wp-content/uploads/2011/09/emailintent_2-300x275.png" title="emailintent_2" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.edumobile.org/android/wp-content/uploads/2011/09/emailintent_3.png"&gt;&lt;img alt="" class="alignnone size-medium wp-image-1318" height="275" src="http://www.edumobile.org/android/wp-content/uploads/2011/09/emailintent_3-300x275.png" title="emailintent_3" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="sociable_tagline"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-3844965545408346299?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/3844965545408346299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/email-intent-demo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/3844965545408346299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/3844965545408346299'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/email-intent-demo.html' title='Email Intent Demo'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-1920642097132774587</id><published>2012-01-30T17:58:00.001-08:00</published><updated>2012-01-30T17:58:53.531-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Simple Sqlite Database Interaction Using FMDB</title><content type='html'>&lt;h4&gt;Introduction&lt;/h4&gt;In the age where Core Data is king, the database that started it all  is often overlooked.  I’m talking of course about sqlite.  As you may or  may not know, prior to core data, sqlite was the preferred method of  storing relational data on iOS devices.&lt;br /&gt;Although, most developers don’t interact with sqlite directly, they  still use it under the hood as the primary data store for core data.   This is great and all, but there are often times when raw sqlite is  still the preferred storage method.&lt;br /&gt;A few of these might include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Caching&lt;/li&gt;&lt;li&gt;Preferences&lt;/li&gt;&lt;li&gt;Simple objects&lt;/li&gt;&lt;li&gt;Portability&lt;/li&gt;&lt;li&gt;Cross platform applications&lt;/li&gt;&lt;/ul&gt;Recently, I have had to make heave use of raw sqlite as a caching  strategy in a new project that I’m working on.  Being that we are  developing a framework for other developers to include in their  projects, we can’t always assume that they have their environment set up  to use core data.  When I was but a n00b iOS developer I did all of the  crazy sqlite management by hand. See &lt;a href="http://www.icodeblog.com/2008/08/19/iphone-programming-tutorial-creating-a-todo-list-using-sqlite-part-1/"&gt;This post series&lt;/a&gt;, but don’t spend too much time there because it’s embarrassing.&lt;br /&gt;Gross right? Now, there is a much easier way to manage and interact  with your sqlite databases.  This library has been around for quite some  time and I wish I had known about it earyly on.&lt;br /&gt;&lt;h4&gt;FMDB&lt;/h4&gt;FMDB stands for Flying Meat Database.  What a great name… This project aims to be a fully featured wrapper for sqlite.&lt;br /&gt;You can clone their repository on &lt;a href="https://github.com/ccgus/fmdb"&gt;their github&lt;/a&gt;.&lt;br /&gt;This tutorial will give you a brief introduction to using FMDB to  create a database, create a table, insert, fetch, and delete data.&lt;br /&gt;&lt;h4&gt;Project Set Up&lt;/h4&gt;The first step is to download/clone fmdb from the url above.  Once  downloaded drag everything inside of the src folder into your project &lt;strong&gt;except&lt;/strong&gt; fmdb.m.  That file contains unit tests and a main, which will cause some conflicts in your project.&lt;br /&gt;The next step is to link in the sqlite library.  To do this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Click your project in the left column of XCode&lt;/li&gt;&lt;li&gt;Click the main target in the middle column. In our case it’s “FMDBTest”&lt;/li&gt;&lt;li&gt;Click the “Build Phases” tab in the third column&lt;/li&gt;&lt;li&gt;Expand the arrow next to “Link Binary With Libraries”&lt;/li&gt;&lt;li&gt;Click the “+” button&lt;/li&gt;&lt;li&gt;Search for libsqlite3.0.dylib and double click it&lt;/li&gt;&lt;/ol&gt;When you are all done, it should look like this:&lt;br /&gt;&lt;img alt="Screenshot" src="http://www.icodeblog.com/wp-content/uploads/2011/11/Screen-Shot-2011-11-04-at-12.48.10-PM.png" title="" /&gt;&lt;br /&gt;Now, that we have the library in place, let’s write some code.&lt;br /&gt;&lt;h4&gt;Creating A Database&lt;/h4&gt;Obviously &lt;em&gt;where&lt;/em&gt; you create your database is up to you, but we are going to do it in the appDelegate.&lt;br /&gt;In addition to working with existing databases, fmdb can &lt;em&gt;easily&lt;/em&gt;  create any number of databases for you on the fly.  After importing  FMDatabase.h in our AppDelegate.m file, we can add the following code to  the &lt;code&gt;application:didFinishLaunching&lt;/code&gt; method.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #400080;"&gt;NSArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;paths &lt;span style="color: #002200;"&gt;=&lt;/span&gt; NSSearchPathForDirectoriesInDomains&lt;span style="color: #002200;"&gt;(&lt;/span&gt;NSDocumentDirectory, NSUserDomainMask, &lt;span style="color: #a61390;"&gt;YES&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;docsPath &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;paths objectAtIndex&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;path &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;docsPath stringByAppendingPathComponent&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"database.sqlite"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;FMDatabase &lt;span style="color: #002200;"&gt;*&lt;/span&gt;database &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;FMDatabase databaseWithPath&lt;span style="color: #002200;"&gt;:&lt;/span&gt;path&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;First, we resolve the path to the documents directory. Be careful, if you don’t &lt;em&gt;need&lt;/em&gt;  your database to be backed up, use the cache directory instead.  When  you send a path to the databaseWithPath method of fmdb, it first checks  if the database exists, and if not, it creates it.  Similarly, we could  copy an existing database to the documents directory and source it the  exact same way.&lt;br /&gt;&lt;h4&gt;Opening The Database And Creating Tables&lt;/h4&gt;In order to perform any action on the database, it must first be  opened.  Here is the code to open the database and create a users table.  Don’t worry about closing it right now, we will do that when we are all  done.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;database open&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;database executeUpdate&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"create table user(name text primary key, age int)"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;Here we first call the open method of the database to open it.  Next,  we use the executeUpdate method to create the table. Make sure you use  this method and &lt;strong&gt;not&lt;/strong&gt; executeQuery when creating a table.  This is a common error.  The database should look like this after our update:&lt;br /&gt;&lt;img alt="Screenshot" src="http://www.icodeblog.com/wp-content/uploads/2011/11/Screen-Shot-2011-11-04-at-1.05.12-PM.png" title="" width="550" /&gt;&lt;br /&gt;After we are all done here we close the database.&lt;br /&gt;&lt;h4&gt;Inserting And Deleting Data&lt;/h4&gt;Inserting data using sqlite is very straight forward.  You can either  build your strings and pass them in directly OR use the sqlite format  using “?’s” and letting fmdb do the work.  Below is an example of each:&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Building the string ourself&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;query &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"insert into user values ('%@', %d)"&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"brandontreb"&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;25&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;database executeUpdate&lt;span style="color: #002200;"&gt;:&lt;/span&gt;query&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Let fmdb do the work&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;database executeUpdate&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"insert into user(name, age) values(?,?)"&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"cruffenach"&lt;/span&gt;,&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSNumber&lt;/span&gt; numberWithInt&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;25&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;,&lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;Generally, the second route is preferred as fmdb will do some of the sanitizing for your (such as add slashes to single quotes).&lt;br /&gt;Now that we have some data in our database, let’s delete it.  The following code will delete all users with an age of 25:&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;database executeUpdate&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"delete from user where age = 25"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;And that should remove both of the records that we inserted.&lt;br /&gt;&lt;h4&gt;Querying The Database&lt;/h4&gt;Querying the database is a bit more tricky than inserting and  deleting.  FMDB has some great utility methods for helping us out in  certain circumstances, but for this tutorial, we will assume the don’t  exist and show you how to fetch data out.  If you are following along in  a sample application, put this code before your delete code (so that we  actually have some data to work with).&lt;br /&gt;Below is an example of fetching all users from the database:&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;FMResultSet &lt;span style="color: #002200;"&gt;*&lt;/span&gt;results &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;database executeQuery&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"select * from user"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;while&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;results next&lt;span style="color: #002200;"&gt;]&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;name &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;results stringForColumn&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"name"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    NSInteger age  &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;results intForColumn&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"age"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;        &lt;br /&gt;    NSLog&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"User: %@ - %d"&lt;/span&gt;,name, age&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;database close&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;We first query the database using the &lt;code&gt;executeQuery&lt;/code&gt;  method.  This returns to us an FMResultsSet.  Next we start a while loop  that continues while there are results to be retrieved and fetch out  each of our data points.  Finally, we just print out each user. &lt;br /&gt;And finally, our database gets close…&lt;br /&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;This concludes our sqlite using fmdb tutorial.  As always, if you have any questions, please leave them here or &lt;a href="http://twitter.com/brandontreb"&gt;write me on twitter&lt;/a&gt;.  &lt;br /&gt;You can download the source for this tutorial &lt;a href="http://www.icodeblog.com/?attachment_id=3599"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-1920642097132774587?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/1920642097132774587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/simple-sqlite-database-interaction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1920642097132774587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1920642097132774587'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/simple-sqlite-database-interaction.html' title='Simple Sqlite Database Interaction Using FMDB'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-8293089123675986973</id><published>2012-01-30T17:57:00.001-08:00</published><updated>2012-01-30T17:57:44.631-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Making UITableViews look not so plain</title><content type='html'>As most of you probably know, UITableView’s are incredibly useful and versatile views to be using in your applications.&lt;br /&gt;If you have ever tried to customize a UITableView though, you know that  as soon as you start adding lots of UIViews, UILabels, and UImageViews  to a cells ContentView, that these tableviews start to scroll slower and  slower, and become choppier and choppier.&lt;br /&gt;What we are going to explore today is how to remedy that situation.&lt;br /&gt;To download the entire XCode project, you can find it at:  &lt;a href="http://github.com/elc/ICB_PrettyTableView"&gt;http://github.com/elc/ICB_PrettyTableView&lt;/a&gt;&lt;br /&gt;We are going to build a simple contact viewer, that will display the  phones contacts. For each contact, if they have a first name, last name,  email and phone number, they will be displayed within one cell, with  different colors. The reason this is useful is because it provides the  basics for customizing UITableViewCells that can really start to make  your application look nice, and still scroll well.&lt;br /&gt;If you don’t want to have simulated data inside the simulator, check out  this post for copying data from your device to the simulator: &lt;a href="http://www.icodeblog.com/2011/11/09/how-to-import-contacts-into-the-iphone-simulator/"&gt;How to import contacts into the iphone simulator&lt;/a&gt;&lt;br /&gt;In this example, we have a standard UITableViewController. We are going to have a couple class variables defined in the header&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #6e371a;"&gt;#import &lt;uikit uikit.h=""&gt;&lt;/uikit&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6e371a;"&gt;#import &lt;addressbook addressbook.h=""&gt;&lt;/addressbook&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@interface&lt;/span&gt; ICBTableViewController &lt;span style="color: #002200;"&gt;:&lt;/span&gt; UITableViewController&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    ABAddressBookRef _addressBook;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;contacts;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;ABAddressBookRef _addressBook is defined in our header, so that we  don’t have to release it until we dealloc. And the contacts is so that  we can hold on to the data for our tableView.&lt;br /&gt;In the main table view controller file we are going to override the –  (void)viewDidLoad to provide some initial configuration of the  tableView, as well as loading or generating our data. (We will generate  fake data for devices or the simulator that don’t have address book  data)&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;viewDidLoad&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;super viewDidLoad&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.tableView.backgroundColor &lt;span style="color: #002200;"&gt;=&lt;/span&gt; UIColor.blackColor;&lt;br /&gt;    self.tableView.separatorStyle &lt;span style="color: #002200;"&gt;=&lt;/span&gt; UITableViewCellSeparatorStyleNone;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    ABAddressBookRef addressBook &lt;span style="color: #002200;"&gt;=&lt;/span&gt; ABAddressBookCreate&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #400080;"&gt;NSArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;tempArray &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABAddressBookCopyArrayOfAllPeople&lt;span style="color: #002200;"&gt;(&lt;/span&gt;addressBook&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    tempArray &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;tempArray sortedArrayUsingComparator&lt;span style="color: #002200;"&gt;:^&lt;/span&gt;NSComparisonResult&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;id&lt;/span&gt; obj1, &lt;span style="color: #a61390;"&gt;id&lt;/span&gt; obj2&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;name1 &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABRecordCopyCompositeName&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;obj1&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;name2 &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABRecordCopyCompositeName&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;obj2&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #a61390;"&gt;return&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;name1 compare&lt;span style="color: #002200;"&gt;:&lt;/span&gt;name2&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;tempArray count&lt;span style="color: #002200;"&gt;]&lt;/span&gt; &amp;gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        self.contacts &lt;span style="color: #002200;"&gt;=&lt;/span&gt; tempArray;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #400080;"&gt;NSMutableArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;tempMutableArray &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSMutableArray&lt;/span&gt; arrayWithCapacity&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;100&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #a61390;"&gt;for&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;int&lt;/span&gt; i &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style="color: #2400d9;"&gt;100&lt;/span&gt;; &lt;span style="color: #002200;"&gt;++&lt;/span&gt;i&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #400080;"&gt;NSMutableDictionary&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;dict &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSMutableDictionary&lt;/span&gt; dictionary&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;9&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;!=&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict setObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"FirstName%d"&lt;/span&gt;, i&lt;span style="color: #002200;"&gt;]&lt;/span&gt; forKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"firstName"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;3&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict setObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"LastName%d"&lt;/span&gt;, i&lt;span style="color: #002200;"&gt;]&lt;/span&gt; forKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"lastName"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;3&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt; &lt;span style="color: #002200;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict setObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"emailTest%d@test%d.com"&lt;/span&gt;, i, i&lt;span style="color: #002200;"&gt;]&lt;/span&gt; forKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"email"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;7&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #a61390;"&gt;string&lt;/span&gt; &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"%d"&lt;/span&gt;, i&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;                &lt;span style="color: #a61390;"&gt;while&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #a61390;"&gt;string&lt;/span&gt; length&lt;span style="color: #002200;"&gt;]&lt;/span&gt; &amp;lt; &lt;span style="color: #2400d9;"&gt;10&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #a61390;"&gt;string&lt;/span&gt; &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #a61390;"&gt;string&lt;/span&gt; stringByAppendingFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"%@"&lt;/span&gt;, &lt;span style="color: #a61390;"&gt;string&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict setObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #a61390;"&gt;string&lt;/span&gt; forKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"phone"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;[&lt;/span&gt;tempMutableArray addObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;dict&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;        self.contacts &lt;span style="color: #002200;"&gt;=&lt;/span&gt; tempMutableArray;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;As you can see here we have a couple of self.tableView methods we  have called to setup the background color, and also the cell separator  style.&lt;br /&gt;If you are running this application on a device, or simulator that has  contacts, this method will also make a copy of the address book as the  data to display. If there is no data in the address book, we create some  fake test data just for displaying.&lt;br /&gt;Also don’t forget to include our – (void)dealloc method for releasing our _addressBook variable.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;dealloc&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    CFRelease&lt;span style="color: #002200;"&gt;(&lt;/span&gt;_addressBook&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;_contacts release&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    _contacts &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;We have to supply the tableView with our number of rows&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;NSInteger&lt;span style="color: #002200;"&gt;)&lt;/span&gt;tableView&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;UITableView &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;tableView numberOfRowsInSection&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;NSInteger&lt;span style="color: #002200;"&gt;)&lt;/span&gt;section&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;return&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.contacts count&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;The next portion we have to override is the – (UITableViewCell  *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath so that we can supply the tableView with our cells.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Customize the appearance of table view cells.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;UITableViewCell &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;tableView&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;UITableView &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;tableView cellForRowAtIndexPath&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSIndexPath&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;indexPath&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;   &lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;static&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;CellIdentifier &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"ICBTableViewCellIdentifier"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    ICBTableViewCell &lt;span style="color: #002200;"&gt;*&lt;/span&gt;cell &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;ICBTableViewCell&lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;tableView dequeueReusableCellWithIdentifier&lt;span style="color: #002200;"&gt;:&lt;/span&gt;CellIdentifier&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;cell &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        cell &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;ICBTableViewCell alloc&lt;span style="color: #002200;"&gt;]&lt;/span&gt; initWithStyle&lt;span style="color: #002200;"&gt;:&lt;/span&gt;UITableViewCellStyleDefault reuseIdentifier&lt;span style="color: #002200;"&gt;:&lt;/span&gt;CellIdentifier&lt;span style="color: #002200;"&gt;]&lt;/span&gt; autorelease&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        cell.textLabel.textColor &lt;span style="color: #002200;"&gt;=&lt;/span&gt; UIColor.whiteColor;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;    cell.tag &lt;span style="color: #002200;"&gt;=&lt;/span&gt; indexPath.row;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #400080;"&gt;NSObject&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;object &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.contacts objectAtIndex&lt;span style="color: #002200;"&gt;:&lt;/span&gt;indexPath.row&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;object isKindOfClass&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSDictionary&lt;/span&gt;.class&lt;span style="color: #002200;"&gt;]&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;cell setDictionary&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSDictionary&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;object&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;cell setRecord&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;object&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;return&lt;/span&gt; cell;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;We are checking each object coming out of our array so that we can  determine if we need to call the setDictionary, or setRecord method  calls.&lt;br /&gt;Now the meat of this tutorial, extending a UITableViewCell.&lt;br /&gt;In our header we are going to define a bunch of strings that we want to display&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #6e371a;"&gt;#import &lt;uikit uikit.h=""&gt;&lt;/uikit&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6e371a;"&gt;#import &lt;addressbook addressbook.h=""&gt;&lt;/addressbook&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@interface&lt;/span&gt; ICBTableViewCell &lt;span style="color: #002200;"&gt;:&lt;/span&gt; UITableViewCell&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;firstName;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;lastName;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;email;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;phone;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;address;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;setRecord&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;record;&lt;br /&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;setDictionary&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSDictionary&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;dict;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;And then our two set methods:&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;setRecord&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;record&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    self.firstName &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABRecordCopyValue&lt;span style="color: #002200;"&gt;(&lt;/span&gt;record, kABPersonFirstNameProperty&lt;span style="color: #002200;"&gt;)&lt;/span&gt; autorelease&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.lastName &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABRecordCopyValue&lt;span style="color: #002200;"&gt;(&lt;/span&gt;record, kABPersonLastNameProperty&lt;span style="color: #002200;"&gt;)&lt;/span&gt; autorelease&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.email &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self getFirstEmail&lt;span style="color: #002200;"&gt;:&lt;/span&gt;record&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.phone &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self getFirstPhone&lt;span style="color: #002200;"&gt;:&lt;/span&gt;record&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self setNeedsDisplay&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;setDictionary&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSDictionary&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;dict&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    self.firstName &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict objectForKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"firstName"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.lastName &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict objectForKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"lastName"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.email &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict objectForKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"email"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.phone &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict objectForKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"phone"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self setNeedsDisplay&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;Some tutorials will have you put this next part into a separate  UIView subclass, and add that class as the contentView of this  UITableViewCell, but I prefer to override the drawRect of the  UITableViewCell, and do all my drawing there.&lt;br /&gt;The first thing I am doing is getting the current graphics context so  that we can draw to the screen, clipping to the rect that is passed in  drawRect:(CGRect)rect, and then depending on whether this cell is even, I  am filling the entire rect with an almost black color, or slightly  lighter.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;drawRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;rect&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    CGContextRef ctx &lt;span style="color: #002200;"&gt;=&lt;/span&gt; UIGraphicsGetCurrentContext&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    CGContextClipToRect&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ctx, rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #11740a; font-style: italic;"&gt;//If even&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;self.tag &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        CGContextSetFillColorWithColor&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ctx, &lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor colorWithWhite&lt;span style="color: #002200;"&gt;:&lt;/span&gt;0.1f alpha&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;1&lt;/span&gt;.f&lt;span style="color: #002200;"&gt;]&lt;/span&gt;.CGColor&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        CGContextSetFillColorWithColor&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ctx, &lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor colorWithWhite&lt;span style="color: #002200;"&gt;:&lt;/span&gt;0.15f alpha&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;1&lt;/span&gt;.f&lt;span style="color: #002200;"&gt;]&lt;/span&gt;.CGColor&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    CGContextFillRect&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ctx, rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;The next thing I am going to figure out is whether I want this text  to be centered in the cell, and I am determining this based off whether  there is an email field or not.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;//Vertically center our text, if no email&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;BOOL&lt;/span&gt; isCentered &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;self.email &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;And now for the meat of the drawRect method. We calculate the size of  firstName, draw it offset from the left by 5, and then draw lastName  right after it. We also change the color we are drawing between those  two.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;CGRect tempRect;&lt;br /&gt;    CGFloat midY &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectGetMidY&lt;span style="color: #002200;"&gt;(&lt;/span&gt;rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor whiteColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt; set&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    UIFont &lt;span style="color: #002200;"&gt;*&lt;/span&gt;defaultFont &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIFont systemFontOfSize&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;16&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    CGSize size &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.firstName sizeWithFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;isCentered &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;NO&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, midY &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.height&lt;span style="color: #002200;"&gt;/&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.firstName drawInRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;tempRect withFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor lightGrayColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt; set&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    size &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.lastName sizeWithFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;isCentered &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;NO&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;tempRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;+&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;tempRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;+&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, midY &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.height&lt;span style="color: #002200;"&gt;/&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.lastName drawInRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;tempRect withFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;Next we find out if phone actually exists, and if so set the color to  red, and draw it to the right of lastName. We also have to make sure we  aren’t drawing this outside our boundaries, so we check to see where  the end is, and if it is outside, we crop it to 5 pixels from the end.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;self.phone &lt;span style="color: #002200;"&gt;!=&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor redColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt; set&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        size &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.phone sizeWithFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        CGFloat end &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;tempRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;+&lt;/span&gt; size.width;&lt;br /&gt;        &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;end &amp;gt; rect.size.width&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;            size.width &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;-&lt;/span&gt; CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;tempRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;10&lt;/span&gt;; &lt;span style="color: #11740a; font-style: italic;"&gt;//-10 so that we get 5 from the end of last name, and 5 from the end of rect&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;isCentered &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;NO&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;            tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.width &lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;            tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.width &lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, midY &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.height&lt;span style="color: #002200;"&gt;/&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.phone drawInRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;tempRect withFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont lineBreakMode&lt;span style="color: #002200;"&gt;:&lt;/span&gt;UILineBreakModeTailTruncation&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;And finally if our email actually exists draw it on the bottom left.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;self.email &lt;span style="color: #002200;"&gt;!=&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor blueColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt; set&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        size &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.email sizeWithFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, midY, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.email drawInRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;tempRect withFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;I hope this helps you in configuring UITableViewCells for your own  project, and hopefully will let you start to think about the  possibilities.&lt;br /&gt;To download the entire XCode project, you can find it at:  &lt;a href="http://github.com/elc/ICB_PrettyTableView"&gt;http://github.com/elc/ICB_PrettyTableView&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-8293089123675986973?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/8293089123675986973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/making-uitableviews-look-not-so-plain.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/8293089123675986973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/8293089123675986973'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/making-uitableviews-look-not-so-plain.html' title='Making UITableViews look not so plain'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-5433012826837367219</id><published>2012-01-30T17:56:00.001-08:00</published><updated>2012-01-30T17:56:58.996-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>ELCImageGrabber</title><content type='html'>As I was working on the &lt;a href="https://github.com/elc/ELCImagePickerController"&gt;ELCImagePickerController&lt;/a&gt;,  bringing it up to speed for iOS 5, I needed to get some images inside  my iOS simulator. I did some googling and came up with the handy method  of dragging and dropping images onto the simulator and using Safari to  save them to a photo album. This is all well and good for four or five  photos, but it starts to really slow down after that. Also, if you ever  run into a situation where you need to reset the simulator you’re stuck  with doing it all over again. For the love of all that is automation,  and of course any excuse to start new project in iOS 5, I knew it was  time for a utility to handle this task for me.&lt;br /&gt;With that, I give you &lt;a href="https://github.com/elc/ELCImageGrabber"&gt;ELCImageGrabber&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://www.icodeblog.com/2011/11/29/elcimagegrabber/ios-simulator-screen-shot-oct-17-2011-12-03-16-pm-2/" rel="attachment wp-att-3560"&gt;&lt;img alt="" class="alignnone size-full wp-image-3560" height="480" src="http://www.icodeblog.com/wp-content/uploads/2011/10/iOS-Simulator-Screen-shot-Oct-17-2011-12.03.16-PM1.png" style="float: none;" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;This was a quick project, so it’s not the prettiest interface, but it  sure gets the job done. Tell it how many photos you want and watch as  the previews go by and get stored in your photo library. The 64 images  at a time limit is imposed by the Google image API for a single request,  but there are plenty of ways around it. Also, I’ve hardcoded the search  term in the source code, but perhaps you want rainbows and unicorns  instead? I hope people find this useful and change it up to fit their  needs as well. I’d love to see pull requests for any useful features  that you lovely readers might add!&lt;br /&gt;Get the code &lt;a href="https://github.com/elc/ELCImagePickerController"&gt;here&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-5433012826837367219?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/5433012826837367219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/elcimagegrabber.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/5433012826837367219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/5433012826837367219'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2012/01/elcimagegrabber.html' title='ELCImageGrabber'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-1400736275637456410</id><published>2011-12-23T14:50:00.000-08:00</published><updated>2011-12-23T14:50:05.097-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Import contacts into the iPhone Simulator</title><content type='html'>If you’re working with AddressBook.framework chances are you’ll want  to import your own data to test against when you’re in the simulator.  Without being able to sync with iTunes or iCloud you may think you’re  stuck entering in addresses manually; not only is that a huge pain, but  there are probably lots of edge cases already in your address book you  wouldn’t necessarily think of.&lt;br /&gt;&lt;br /&gt;Fortunately there’s another option, with a tool called &lt;a href="http://supercrazyawesome.com/"&gt;iPhone Backup Extractor&lt;/a&gt;.  Download it, run it and click Read Backups (note that you’ll need to  back up to iTunes, not iCloud). Select your device, and you should see a  list of apps included in your backup. Choose the last item on the list,  iOS Files, and extract it to your desktop. When it’s done take a look  in the folder it created. You should find two files in the folder &lt;strong&gt;iOS Files/Library/AddressBook&lt;/strong&gt;, &lt;strong&gt;AddressBook.sqlitedb&lt;/strong&gt; and &lt;strong&gt;AddressBookImages.sqlitedb&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Next, open the simulator’s Application Support folder (in the Finder menu, choose &lt;strong&gt;Go&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Go to Folder…&lt;/strong&gt;, enter &lt;strong&gt;~/Library/Application Support/iPhone Simulator&lt;/strong&gt;, and choose the SDK you’re working with) and drill down to &lt;strong&gt;Library/AddressBook&lt;/strong&gt;.  Quit the simulator if it’s open, delete everything in this directory,  then copy the two files noted above from your backup. That’s it! If  everything went well the next time you launch the simulator you should  see all your contacts.&lt;br /&gt;&lt;br /&gt;Pretty easy, really. If address book data is a major feature of your  app, you might even want to have a few trusted beta testers send you  their backups so you can test with their contacts. My experience is that  there are a lot of unusual or invalid contacts floating around on  people’s phones, and the more opportunity you have to test the better  you’ll do once you release your app.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-1400736275637456410?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/1400736275637456410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2011/12/import-contacts-into-iphone-simulator.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1400736275637456410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1400736275637456410'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2011/12/import-contacts-into-iphone-simulator.html' title='Import contacts into the iPhone Simulator'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-1601375896463533270</id><published>2011-12-23T14:48:00.000-08:00</published><updated>2011-12-23T14:48:39.137-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Making UITableViews look not so plain</title><content type='html'>As most of you probably know, UITableView’s are incredibly useful and versatile views to be using in your applications.&lt;br /&gt;If you have ever tried to customize a UITableView though, you know that  as soon as you start adding lots of UIViews, UILabels, and UImageViews  to a cells ContentView, that these tableviews start to scroll slower and  slower, and become choppier and choppier.&lt;br /&gt;What we are going to explore today is how to remedy that situation.&lt;br /&gt;To download the entire XCode project, you can find it at:  &lt;a href="http://github.com/elc/ICB_PrettyTableView"&gt;http://github.com/elc/ICB_PrettyTableView&lt;/a&gt;&lt;br /&gt;We are going to build a simple contact viewer, that will display the  phones contacts. For each contact, if they have a first name, last name,  email and phone number, they will be displayed within one cell, with  different colors. The reason this is useful is because it provides the  basics for customizing UITableViewCells that can really start to make  your application look nice, and still scroll well.&lt;br /&gt;If you don’t want to have simulated data inside the simulator, check out  this post for copying data from your device to the simulator: &lt;a href="http://www.icodeblog.com/2011/11/09/how-to-import-contacts-into-the-iphone-simulator/"&gt;How to import contacts into the iphone simulator&lt;/a&gt;&lt;br /&gt;In this example, we have a standard UITableViewController. We are going to have a couple class variables defined in the header&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #6e371a;"&gt;#import &lt;uikit uikit.h=""&gt;&lt;/uikit&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6e371a;"&gt;#import &lt;addressbook addressbook.h=""&gt;&lt;/addressbook&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@interface&lt;/span&gt; ICBTableViewController &lt;span style="color: #002200;"&gt;:&lt;/span&gt; UITableViewController&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    ABAddressBookRef _addressBook;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;contacts;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;ABAddressBookRef _addressBook is defined in our header, so that we  don’t have to release it until we dealloc. And the contacts is so that  we can hold on to the data for our tableView.&lt;br /&gt;In the main table view controller file we are going to override the –  (void)viewDidLoad to provide some initial configuration of the  tableView, as well as loading or generating our data. (We will generate  fake data for devices or the simulator that don’t have address book  data)&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;viewDidLoad&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;super viewDidLoad&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.tableView.backgroundColor &lt;span style="color: #002200;"&gt;=&lt;/span&gt; UIColor.blackColor;&lt;br /&gt;    self.tableView.separatorStyle &lt;span style="color: #002200;"&gt;=&lt;/span&gt; UITableViewCellSeparatorStyleNone;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    ABAddressBookRef addressBook &lt;span style="color: #002200;"&gt;=&lt;/span&gt; ABAddressBookCreate&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #400080;"&gt;NSArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;tempArray &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABAddressBookCopyArrayOfAllPeople&lt;span style="color: #002200;"&gt;(&lt;/span&gt;addressBook&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    tempArray &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;tempArray sortedArrayUsingComparator&lt;span style="color: #002200;"&gt;:^&lt;/span&gt;NSComparisonResult&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;id&lt;/span&gt; obj1, &lt;span style="color: #a61390;"&gt;id&lt;/span&gt; obj2&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;name1 &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABRecordCopyCompositeName&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;obj1&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;name2 &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABRecordCopyCompositeName&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;obj2&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #a61390;"&gt;return&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;name1 compare&lt;span style="color: #002200;"&gt;:&lt;/span&gt;name2&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;tempArray count&lt;span style="color: #002200;"&gt;]&lt;/span&gt; &amp;gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        self.contacts &lt;span style="color: #002200;"&gt;=&lt;/span&gt; tempArray;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #400080;"&gt;NSMutableArray&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;tempMutableArray &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSMutableArray&lt;/span&gt; arrayWithCapacity&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;100&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #a61390;"&gt;for&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;int&lt;/span&gt; i &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style="color: #2400d9;"&gt;100&lt;/span&gt;; &lt;span style="color: #002200;"&gt;++&lt;/span&gt;i&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #400080;"&gt;NSMutableDictionary&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;dict &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSMutableDictionary&lt;/span&gt; dictionary&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;9&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;!=&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict setObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"FirstName%d"&lt;/span&gt;, i&lt;span style="color: #002200;"&gt;]&lt;/span&gt; forKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"firstName"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;3&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict setObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"LastName%d"&lt;/span&gt;, i&lt;span style="color: #002200;"&gt;]&lt;/span&gt; forKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"lastName"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;3&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt; &lt;span style="color: #002200;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict setObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"emailTest%d@test%d.com"&lt;/span&gt;, i, i&lt;span style="color: #002200;"&gt;]&lt;/span&gt; forKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"email"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;i &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;7&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #a61390;"&gt;string&lt;/span&gt; &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; stringWithFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"%d"&lt;/span&gt;, i&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;                &lt;span style="color: #a61390;"&gt;while&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #a61390;"&gt;string&lt;/span&gt; length&lt;span style="color: #002200;"&gt;]&lt;/span&gt; &amp;lt; &lt;span style="color: #2400d9;"&gt;10&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #a61390;"&gt;string&lt;/span&gt; &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #a61390;"&gt;string&lt;/span&gt; stringByAppendingFormat&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"%@"&lt;/span&gt;, &lt;span style="color: #a61390;"&gt;string&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict setObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #a61390;"&gt;string&lt;/span&gt; forKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"phone"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #002200;"&gt;[&lt;/span&gt;tempMutableArray addObject&lt;span style="color: #002200;"&gt;:&lt;/span&gt;dict&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;        self.contacts &lt;span style="color: #002200;"&gt;=&lt;/span&gt; tempMutableArray;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;As you can see here we have a couple of self.tableView methods we  have called to setup the background color, and also the cell separator  style.&lt;br /&gt;If you are running this application on a device, or simulator that has  contacts, this method will also make a copy of the address book as the  data to display. If there is no data in the address book, we create some  fake test data just for displaying.&lt;br /&gt;Also don’t forget to include our – (void)dealloc method for releasing our _addressBook variable.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;dealloc&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    CFRelease&lt;span style="color: #002200;"&gt;(&lt;/span&gt;_addressBook&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;_contacts release&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    _contacts &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;We have to supply the tableView with our number of rows&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;NSInteger&lt;span style="color: #002200;"&gt;)&lt;/span&gt;tableView&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;UITableView &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;tableView numberOfRowsInSection&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;NSInteger&lt;span style="color: #002200;"&gt;)&lt;/span&gt;section&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;return&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.contacts count&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;The next portion we have to override is the – (UITableViewCell  *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath so that we can supply the tableView with our cells.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Customize the appearance of table view cells.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;UITableViewCell &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;tableView&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;UITableView &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;tableView cellForRowAtIndexPath&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSIndexPath&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;indexPath&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;   &lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;static&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;CellIdentifier &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"ICBTableViewCellIdentifier"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    ICBTableViewCell &lt;span style="color: #002200;"&gt;*&lt;/span&gt;cell &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;ICBTableViewCell&lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;tableView dequeueReusableCellWithIdentifier&lt;span style="color: #002200;"&gt;:&lt;/span&gt;CellIdentifier&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;cell &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        cell &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;ICBTableViewCell alloc&lt;span style="color: #002200;"&gt;]&lt;/span&gt; initWithStyle&lt;span style="color: #002200;"&gt;:&lt;/span&gt;UITableViewCellStyleDefault reuseIdentifier&lt;span style="color: #002200;"&gt;:&lt;/span&gt;CellIdentifier&lt;span style="color: #002200;"&gt;]&lt;/span&gt; autorelease&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        cell.textLabel.textColor &lt;span style="color: #002200;"&gt;=&lt;/span&gt; UIColor.whiteColor;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;    cell.tag &lt;span style="color: #002200;"&gt;=&lt;/span&gt; indexPath.row;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #400080;"&gt;NSObject&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;object &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.contacts objectAtIndex&lt;span style="color: #002200;"&gt;:&lt;/span&gt;indexPath.row&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;object isKindOfClass&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSDictionary&lt;/span&gt;.class&lt;span style="color: #002200;"&gt;]&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;cell setDictionary&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSDictionary&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;object&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;cell setRecord&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;object&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;return&lt;/span&gt; cell;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;We are checking each object coming out of our array so that we can  determine if we need to call the setDictionary, or setRecord method  calls.&lt;br /&gt;Now the meat of this tutorial, extending a UITableViewCell.&lt;br /&gt;In our header we are going to define a bunch of strings that we want to display&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #6e371a;"&gt;#import &lt;uikit uikit.h=""&gt;&lt;/uikit&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6e371a;"&gt;#import &lt;addressbook addressbook.h=""&gt;&lt;/addressbook&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@interface&lt;/span&gt; ICBTableViewCell &lt;span style="color: #002200;"&gt;:&lt;/span&gt; UITableViewCell&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;firstName;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;lastName;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;email;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;phone;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@property&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;nonatomic, retain&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;address;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;setRecord&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;record;&lt;br /&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;setDictionary&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSDictionary&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;dict;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #a61390;"&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;And then our two set methods:&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;setRecord&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ABRecordRef&lt;span style="color: #002200;"&gt;)&lt;/span&gt;record&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    self.firstName &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABRecordCopyValue&lt;span style="color: #002200;"&gt;(&lt;/span&gt;record, kABPersonFirstNameProperty&lt;span style="color: #002200;"&gt;)&lt;/span&gt; autorelease&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.lastName &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;ABRecordCopyValue&lt;span style="color: #002200;"&gt;(&lt;/span&gt;record, kABPersonLastNameProperty&lt;span style="color: #002200;"&gt;)&lt;/span&gt; autorelease&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.email &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self getFirstEmail&lt;span style="color: #002200;"&gt;:&lt;/span&gt;record&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.phone &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self getFirstPhone&lt;span style="color: #002200;"&gt;:&lt;/span&gt;record&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self setNeedsDisplay&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;setDictionary&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSDictionary&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;dict&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    self.firstName &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict objectForKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"firstName"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.lastName &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict objectForKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"lastName"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.email &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict objectForKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"email"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    self.phone &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;dict objectForKey&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"phone"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self setNeedsDisplay&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;Some tutorials will have you put this next part into a separate  UIView subclass, and add that class as the contentView of this  UITableViewCell, but I prefer to override the drawRect of the  UITableViewCell, and do all my drawing there.&lt;br /&gt;The first thing I am doing is getting the current graphics context so  that we can draw to the screen, clipping to the rect that is passed in  drawRect:(CGRect)rect, and then depending on whether this cell is even, I  am filling the entire rect with an almost black color, or slightly  lighter.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #a61390;"&gt;void&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;drawRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;rect&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;    CGContextRef ctx &lt;span style="color: #002200;"&gt;=&lt;/span&gt; UIGraphicsGetCurrentContext&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    CGContextClipToRect&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ctx, rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #11740a; font-style: italic;"&gt;//If even&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;self.tag &lt;span style="color: #002200;"&gt;%&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        CGContextSetFillColorWithColor&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ctx, &lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor colorWithWhite&lt;span style="color: #002200;"&gt;:&lt;/span&gt;0.1f alpha&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;1&lt;/span&gt;.f&lt;span style="color: #002200;"&gt;]&lt;/span&gt;.CGColor&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        CGContextSetFillColorWithColor&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ctx, &lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor colorWithWhite&lt;span style="color: #002200;"&gt;:&lt;/span&gt;0.15f alpha&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;1&lt;/span&gt;.f&lt;span style="color: #002200;"&gt;]&lt;/span&gt;.CGColor&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    CGContextFillRect&lt;span style="color: #002200;"&gt;(&lt;/span&gt;ctx, rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;The next thing I am going to figure out is whether I want this text  to be centered in the cell, and I am determining this based off whether  there is an email field or not.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;//Vertically center our text, if no email&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;BOOL&lt;/span&gt; isCentered &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;self.email &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;And now for the meat of the drawRect method. We calculate the size of  firstName, draw it offset from the left by 5, and then draw lastName  right after it. We also change the color we are drawing between those  two.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;CGRect tempRect;&lt;br /&gt;    CGFloat midY &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectGetMidY&lt;span style="color: #002200;"&gt;(&lt;/span&gt;rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor whiteColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt; set&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    UIFont &lt;span style="color: #002200;"&gt;*&lt;/span&gt;defaultFont &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIFont systemFontOfSize&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;16&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    CGSize size &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.firstName sizeWithFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;isCentered &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;NO&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, midY &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.height&lt;span style="color: #002200;"&gt;/&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.firstName drawInRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;tempRect withFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor lightGrayColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt; set&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    size &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.lastName sizeWithFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;isCentered &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;NO&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;tempRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;+&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;tempRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;+&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, midY &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.height&lt;span style="color: #002200;"&gt;/&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.lastName drawInRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;tempRect withFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;Next we find out if phone actually exists, and if so set the color to  red, and draw it to the right of lastName. We also have to make sure we  aren’t drawing this outside our boundaries, so we check to see where  the end is, and if it is outside, we crop it to 5 pixels from the end.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;self.phone &lt;span style="color: #002200;"&gt;!=&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor redColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt; set&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        size &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.phone sizeWithFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        CGFloat end &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;tempRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;+&lt;/span&gt; size.width;&lt;br /&gt;        &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;end &amp;gt; rect.size.width&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;            size.width &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;-&lt;/span&gt; CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;tempRect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;10&lt;/span&gt;; &lt;span style="color: #11740a; font-style: italic;"&gt;//-10 so that we get 5 from the end of last name, and 5 from the end of rect&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;isCentered &lt;span style="color: #002200;"&gt;==&lt;/span&gt; &lt;span style="color: #a61390;"&gt;NO&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;            tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.width &lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;}&lt;/span&gt; &lt;span style="color: #a61390;"&gt;else&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;            tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;CGRectGetMaxX&lt;span style="color: #002200;"&gt;(&lt;/span&gt;rect&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.width &lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, midY &lt;span style="color: #002200;"&gt;-&lt;/span&gt; size.height&lt;span style="color: #002200;"&gt;/&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;2&lt;/span&gt;, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.phone drawInRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;tempRect withFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont lineBreakMode&lt;span style="color: #002200;"&gt;:&lt;/span&gt;UILineBreakModeTailTruncation&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;And finally if our email actually exists draw it on the bottom left.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #a61390;"&gt;if&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;self.email &lt;span style="color: #002200;"&gt;!=&lt;/span&gt; &lt;span style="color: #a61390;"&gt;nil&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt; &lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor blueColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt; set&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        size &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.email sizeWithFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;        tempRect &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;5&lt;/span&gt;, midY, size.width, size.height&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.email drawInRect&lt;span style="color: #002200;"&gt;:&lt;/span&gt;tempRect withFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;defaultFont&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;I hope this helps you in configuring UITableViewCells for your own  project, and hopefully will let you start to think about the  possibilities.&lt;br /&gt;To download the entire XCode project, you can find it at:  &lt;a href="http://github.com/elc/ICB_PrettyTableView"&gt;http://github.com/elc/ICB_PrettyTableView&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-1601375896463533270?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/1601375896463533270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2011/12/making-uitableviews-look-not-so-plain.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1601375896463533270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1601375896463533270'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2011/12/making-uitableviews-look-not-so-plain.html' title='Making UITableViews look not so plain'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-5610214218216015720</id><published>2011-12-23T14:46:00.000-08:00</published><updated>2011-12-23T14:46:27.711-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>ELCImageGrabber</title><content type='html'>As I was working on the ELCImagePickerController,  bringing it up to speed for iOS 5, I needed to get some images inside  my iOS simulator. I did some googling and came up with the handy method  of dragging and dropping images onto the simulator and using Safari to  save them to a photo album. This is all well and good for four or five  photos, but it starts to really slow down after that. Also, if you ever  run into a situation where you need to reset the simulator you’re stuck  with doing it all over again. For the love of all that is automation,  and of course any excuse to start new project in iOS 5, I knew it was  time for a utility to handle this task for me.&lt;br /&gt;&lt;br /&gt;With that, I give you ELCImageGrabber.&lt;br /&gt;&lt;a href="http://www.icodeblog.com/2011/11/29/elcimagegrabber/ios-simulator-screen-shot-oct-17-2011-12-03-16-pm-2/" rel="attachment wp-att-3560"&gt;&lt;img alt="" class="alignnone size-full wp-image-3560" height="480" src="http://www.icodeblog.com/wp-content/uploads/2011/10/iOS-Simulator-Screen-shot-Oct-17-2011-12.03.16-PM1.png" style="float: none;" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;This was a quick project, so it’s not the prettiest interface, but it  sure gets the job done. Tell it how many photos you want and watch as  the previews go by and get stored in your photo library. The 64 images  at a time limit is imposed by the Google image API for a single request,  but there are plenty of ways around it. Also, I’ve hardcoded the search  term in the source code, but perhaps you want rainbows and unicorns  instead? I hope people find this useful and change it up to fit their  needs as well. I’d love to see pull requests for any useful features  that you lovely readers might add!&lt;br /&gt;Get the code &lt;a href="https://github.com/elc/ELCImagePickerController"&gt;here&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-5610214218216015720?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/5610214218216015720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2011/12/elcimagegrabber.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/5610214218216015720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/5610214218216015720'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2011/12/elcimagegrabber.html' title='ELCImageGrabber'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-6615780289204166377</id><published>2011-12-18T17:35:00.001-08:00</published><updated>2011-12-18T17:35:41.951-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>40 Beautiful Android Application Interfaces and Icons</title><content type='html'>&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.google.android.apps.androidify"&gt;Androidify&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Androidify" class="size-full wp-image-2371 alignright" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/androidify.png" width="128" /&gt;Google surprised everyone last month with an application no one was really expecting from them. &lt;a href="http://android.appstorm.net/how-to/customization/how-to-androidify-yourself/"&gt;Androidify&lt;/a&gt;  lets you create your own personal Android and use it any way you like.  With a beautiful, usable interface and two tons of customization  options, Androidify sets a new standard for mobile application design.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2418" style="width: 630px;"&gt;&lt;img alt="Androidify" class="size-full wp-image-2418" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/androidify-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Androidify&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.wsl.calorific"&gt;Calorific&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Calorific" class="alignright size-full wp-image-2373" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/calorific.png" width="128" /&gt;Counting  calories made fun and beautiful, that was my first impression of  Calorific. The applications lets you record what you eat with a couple  of clicks and provides feedback on your food habits. The interface is  colorful and full of life, just what the doctor ordered, one would say.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2419" style="width: 630px;"&gt;&lt;img alt="Calorific" class="size-full wp-image-2419" height="462" src="http://android.appstorm.net/wp-content/uploads/2011/03/calorific-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Calorific&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=vStudio.Android.GPhotoPaid"&gt;Camera360&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Camera360" class="alignright size-full wp-image-2374" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/camera360.png" width="128" /&gt;We have already &lt;a href="http://android.appstorm.net/reviews/supercharge-your-android-camera-with-camera360/" title="Supercharge Your Android Camera with Camera360"&gt;spoken&lt;/a&gt;  tons about this Swiss army knife of Android camera applications.  Camera360 provides virtually every feature you would ask for in a mobile  phone camera and does it in a beautiful, intuitive interface that is  invisible when you don’t need it, yet always there at the tap of a  button.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2420" style="width: 630px;"&gt;&lt;img alt="Camera360" class="size-full wp-image-2420" height="217" src="http://android.appstorm.net/wp-content/uploads/2011/03/camer360-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Camera360&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.chomp.android"&gt;Chomp&lt;/a&gt;&lt;/h3&gt;&lt;img alt="chomp" class="alignright size-full wp-image-2375" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/chomp.png" width="128" /&gt;The  new web-based Android Market is a big leap from the virtually  non-existent entity before, but there’s still a lot of room for  alternatives to make a mark. Chomp is a new entrant that starts on the  right foot with a stunning look &amp;amp; feel. The visual design, interface  and user experience is top-notch, coupled with a very smart search  engine that provides way better results than the official market itself.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2421" style="width: 630px;"&gt;&lt;img alt="chomp" class="size-full wp-image-2421" height="544" src="http://android.appstorm.net/wp-content/uploads/2011/03/chomp-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;chomp&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.cherryCode.daltonismo"&gt;Color Blindness Test&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Color Blindness Test" class="alignright size-full wp-image-2376" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/colorblindness.png" width="128" /&gt;Nearly  8% of all men in the world are color blind in some way (as against only  0.5% women, incidentally). The Color Blindness Test application lets  you check if you’re one of them with a simple but visually attractive  interface and a clever set of questions that should leave little doubt  about the results.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2422" style="width: 630px;"&gt;&lt;img alt="Color Blindness Test" class="size-full wp-image-2422" height="462" src="http://android.appstorm.net/wp-content/uploads/2011/03/colorblindness-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Color Blindness Test&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.doubleTwist.androidPlayer"&gt;DoubleTwist Player&lt;/a&gt;&lt;/h3&gt;&lt;img alt="DoubleTwist Player" class="alignright size-full wp-image-2377" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/doubletwist.png" width="128" /&gt;There is no dearth of &lt;a href="http://android.appstorm.net/roundups/music-roundups/round-up-great-android-music-players/"&gt;alternative music players&lt;/a&gt;  on the Android Market, most of them competing wildly for the ‘most  beautiful’ title (as we will see further down). DoubleTwist does little  wrong in the race. The excellent icon is coupled with a dark, sleek  interface that makes browsing and listening to your music a pleasure.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2423" style="width: 630px;"&gt;&lt;img alt="DoubleTwist Player" class="size-full wp-image-2423" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/doubletwist-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;DoubleTwist Player&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.epicurious"&gt;Epicurious&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Epicurious" class="alignright size-full wp-image-2378" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/epicurious.jpg" width="128" /&gt;Wondering  what to cook for dinner tonight? The Epicurious Recipe App is probably  one of the best looking applications of its kind on the Android Market.  From the browsing experience to the recipe details, everything is neatly  laid out and blends beautifully with the red branding of the epicurious  website.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2424" style="width: 630px;"&gt;&lt;img alt="Epicurious" class="size-full wp-image-2424" height="462" src="http://android.appstorm.net/wp-content/uploads/2011/03/epicurious-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Epicurious&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.fima.episodes"&gt;Episodes&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Episodes" class="alignright size-full wp-image-2379" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/episodes.png" width="128" /&gt;Episodes  is one of the few Android applications with a beautiful and  self-explanatory icon. The retro television set icon establishes clearly  that this is an application about TV shows and the interface does the  rest. Check out all the current shows on TV, review their episodes, save  favorites and more.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2425" style="width: 630px;"&gt;&lt;img alt="Episodes" class="size-full wp-image-2425" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/episodes-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Episodes&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.mobiata.flightboard"&gt;FlightBoard&lt;/a&gt;&lt;/h3&gt;&lt;img alt="FlightBoard" class="alignright size-full wp-image-2380" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/flightboard.png" width="128" /&gt;A  checkered grid of colorful LEDs is the basic premise of this  application’s interface as well as its icon. FlightBoard turns your  phone into the Arrivals &amp;amp; Departure board for any airport, and does a  neat job of replicating the real world through good use of metaphor and  a neat, clean UI.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2426" style="width: 630px;"&gt;&lt;img alt="FlightBoard" class="size-full wp-image-2426" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/flightboard-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;FlightBoard&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=gbis.gbandroid"&gt;GasBuddy&lt;/a&gt;&lt;/h3&gt;&lt;img alt="GasBuddy" class="alignright size-full wp-image-2381" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/gasbuddy.jpg" width="128" /&gt;The  premise of the GasBuddy application is simple: it helps you find gas  stations around you with the cheapest gas. The application uses GPS to  overlay the nearest gas stations on a map along with a list view to  compare gas prices in your vicinity.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2427" style="width: 630px;"&gt;&lt;img alt="GasBuddy" class="size-full wp-image-2427" height="463" src="http://android.appstorm.net/wp-content/uploads/2011/03/gasbuddy-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;GasBuddy&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.glympse.android.glympse"&gt;Glympse&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Glympse" class="alignright size-full wp-image-2382" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/glympse.jpg" width="128" /&gt;Glympse  is one of many applications for Android that let you share your  location with friends. What sets it apart is the clean and simple  interface, the excellent UI and an equally impressive icon. This is  another one of very few beautiful Android application icons on the  market today.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2428" style="width: 630px;"&gt;&lt;img alt="Glympse" class="size-full wp-image-2428" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/glympse-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Glympse&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.gau.go.launcherex"&gt;Go Launcher Ex&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Go Launcher Ex" class="alignright size-full wp-image-2383" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/golauncher.png" width="128" /&gt;There  are a ton of home screen launchers on the Android Market, each with a  unique set of features. Go Launcher is a recent entrant, but has already  made a splash with an extremely active development cycle, a neat  combination of features and themes that actually look good out of the  box.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2429" style="width: 630px;"&gt;&lt;img alt="Go Launcher Ex" class="size-full wp-image-2429" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/golauncher-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Go Launcher Ex&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.jb.mms"&gt;Go SMS&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Go SMS" class="alignright size-full wp-image-2385" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/gosms.png" width="128" /&gt;Another  beautiful application from the makers of Go Launcher. Go SMS replaces  the stock android SMS application with a better interface, more  features, a beautiful widget and stellar support for themes. There are  already a bunch of themes available in the market, with more coming out  pretty regularly.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2431" style="width: 630px;"&gt;&lt;img alt="Go SMS" class="size-full wp-image-2431" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/gosms-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Go SMS&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.google.android.apps.maps"&gt;Google Maps&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Google Maps" class="alignright size-full wp-image-2384" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/googlemaps.png" width="128" /&gt;The  Google Maps stock application has been improving in leaps and bounds  over the last year or so. The latest incarnation with navigation is a  hard one to beat on the platform. With a new 3D compass view, GPS based  navigation, places and integration with Latitude, the application is a  nice combination of eye-candy and utility.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2430" style="width: 630px;"&gt;&lt;img alt="Google Maps" class="size-full wp-image-2430" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/googlemaps-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Google Maps&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.graphicly"&gt;Graphic.ly Comics&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Graphic.ly" class="alignright size-full wp-image-2386" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/graphicly.png" width="128" /&gt;If  you love comics, things don’t get better on the Android platform than  the recently released Graphic.ly comic reader. The application combines a  humongous collection of free and paid comics with a nice user interface  that makes reading the comics a pleasure, even on smaller screens.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2432" style="width: 630px;"&gt;&lt;img alt="Graphic.ly Comics" class="size-full wp-image-2432" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/graphicly-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Graphic.ly Comics&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.grooveshark.android.v1"&gt;Grooveshark&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Grooveshark" class="alignright size-full wp-image-2387" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/grooveshark.png" width="128" /&gt;The  Grooveshark web app has been known for its neat design and simplicity,  and the official Android application does that reputation no harm. The  online streaming music player is just as beautiful and as usable,  allowing you to easily search for songs, create playlists and listen to  your favorite music on the go.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2433" style="width: 630px;"&gt;&lt;img alt="Grooveshark" class="size-full wp-image-2433" height="463" src="http://android.appstorm.net/wp-content/uploads/2011/03/grooveshark-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Grooveshark&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.mobiata.hotelpal"&gt;HotelPal&lt;/a&gt;&lt;/h3&gt;&lt;img alt="HotelPal" class="alignright size-full wp-image-2389" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/hotelpal.jpg" width="128" /&gt;The  HotelPal application provides ready access to over 100,000 hotels  worldwide, allowing you to check out their facilities, see  high-resolution photos and make bookings on the go. The icon is pretty  unique, coupled with a neat clean interface and good use of maps to help  locate hotels around your area of interest.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2434" style="width: 630px;"&gt;&lt;img alt="HotelPal" class="size-full wp-image-2434" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/hotelpal-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;HotelPal&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.kobobooks.android"&gt;Kobo eBooks&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Kobo eBooks" class="alignright size-full wp-image-2390" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/kobo.jpg" width="128" /&gt;You  may have never heard of the Kobo eReader, which trails behind the  Kindle and the Nook by quite a margin. Like its counterparts, the Kobo  reader is also available for a number of device platforms, including  Android. And although it is not the most feature-packed of the  applications, it is visually one of the best.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2435" style="width: 630px;"&gt;&lt;img alt="Kobo eBooks" class="size-full wp-image-2435" height="463" src="http://android.appstorm.net/wp-content/uploads/2011/03/kobo-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Kobo eBooks&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.cooliris.app.liveshare"&gt;LiveShare&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Liveshare" class="alignright size-full wp-image-2391" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/liveshare.png" width="128" /&gt;In  case you don’t know, the stock gallery application on most Android  phones is powered by Cooliris. Liveshare, an official Cooliris app,  takes the next step by providing an gorgeous interface for not only  viewing your photos and videos, but also providing an easy and seamless  way to share them with family and friends.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2436" style="width: 630px;"&gt;&lt;img alt="LiveShare" class="size-full wp-image-2436" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/liveshare-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;LiveShare&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.mint"&gt;Mint&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Mint.com" class="alignright size-full wp-image-2392" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/mint.png" width="128" /&gt;When  it comes to managing your finances online, few applications come close  to the features and functionality of mint.com. The Android application  helps you keep track of and update your finances on the go, and provides  ready access to critical financial information, complete with graphs  and alerts.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2437" style="width: 630px;"&gt;&lt;img alt="Mint.com" class="size-full wp-image-2437" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/mint-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Mint&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.mobisleapps.notespro"&gt;Mobisle Notes&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Mobisle Notes" class="alignright size-full wp-image-2393" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/mobislenotes.png" width="128" /&gt;A  lot of mobile applications try to use the visual metaphor of a notepad,  but few are able to nail it and strike a balance between usefulness and  visual overload. Mobisle Notes is one application that succeeds at  this. The interface is pretty yet minimalistic, with a focus on getting  in and jotting things down quickly.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2438" style="width: 630px;"&gt;&lt;img alt="Mobisle Notes" class="size-full wp-image-2438" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/mobislenotes-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Mobisle Notes&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.capigami.outofmilk"&gt;Out of Milk&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Out of Milk" class="alignright size-full wp-image-2394" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/outofmilk.png" width="128" /&gt;Out  of Milk combines a shopping list, pantry list and to-do list in one  small, intuitive and easy-to-use package. The interface uses a real-life  notebook metaphor for lists, allowing you to create multiple lists in  each category. An added advantage is the ability to scan bar codes to  automatically add items to your list without having to write everything  down manually.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2439" style="width: 630px;"&gt;&lt;img alt="Out of Milk" class="size-full wp-image-2439" height="463" src="http://android.appstorm.net/wp-content/uploads/2011/03/outofmilk-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Out of Milk&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.sleekbit.ovuview"&gt;OvuView&lt;/a&gt;&lt;/h3&gt;&lt;img alt="OvuView" class="alignright size-full wp-image-2395" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/ovuview.png" width="128" /&gt;This  one is purely for the women, and everything about the application  shouts that. OvuView is an advanced fertility tracker that helps women  track periods, ovulation and fertility. Although the pink and lavender  interface clearly states its target audience, the information  visualization is worth a look for anyone interested in beautiful UI  design.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2440" style="width: 630px;"&gt;&lt;img alt="OvuView" class="size-full wp-image-2440" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/ovuview-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;OvuView&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.adobe.psmobile"&gt;Photoshop Express&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Adobe Photoshop Express" class="alignright size-full wp-image-2396" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/photoshop.png" width="128" /&gt;When  it comes to image editing, Adobe reigns supreme, with Photoshop being  the king of the hill on the desktop. On the mobile platform as well, the  mini version of Photoshop sets itself apart with a nice, simple user  interface and a just-right set of features for editing photos on the  mobile phone. Take a look at our &lt;a href="http://android.appstorm.net/reviews/graphics/photoshop-express-edit-and-share-anywhere/"&gt;full review&lt;/a&gt;.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2441" style="width: 630px;"&gt;&lt;img alt="Photoshop Express" class="size-full wp-image-2441" height="463" src="http://android.appstorm.net/wp-content/uploads/2011/03/photoshop-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Photoshop Express&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.picplz.rangefinder"&gt;picplz&lt;/a&gt;&lt;/h3&gt;&lt;img alt="picplz" class="alignright size-full wp-image-2397" height="127" src="http://android.appstorm.net/wp-content/uploads/2011/03/picplz.png" width="128" /&gt;picplz  tries to re-create the magic of instagram (an iOS photo sharing  phenomenon) on the Android platform. The idea is to click images, apply  interesting effects and share them with the world. The picplz  application is minimalistic, and acts as a simple client to share snaps  on their more full-featured web application.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2442" style="width: 630px;"&gt;&lt;img alt="picplz" class="size-full wp-image-2442" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/picplz-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;picplz&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.levelup.touiteur"&gt;Plume for Twitter&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Plume" class="alignright size-full wp-image-2398" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/plume.png" width="128" /&gt;The  official Twitter application for Android is pretty full-featured now,  but that doesn’t stop other clients from offering even more. Plume is  one such alternative with a beautiful and highly customizable interface.  From colorizing your twitter stream to geotagging and inline  conversations, it offers a heavy dose of functionality in a sleek design  and with another cute blue bird for an icon.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2443" style="width: 630px;"&gt;&lt;img alt="Plume" class="size-full wp-image-2443" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/plume-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Plume&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.maxmpz.audioplayer"&gt;PowerAmp&lt;/a&gt;&lt;/h3&gt;&lt;img alt="PowerAmp" class="alignright size-full wp-image-2399" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/poweramp.png" width="128" /&gt;PowerAmp is one of the better known &lt;a href="http://android.appstorm.net/roundups/music-roundups/round-up-great-android-music-players/"&gt;alternative music applications&lt;/a&gt;  that go head-to-head with the stock Android music player. The sleek,  skinnable application interface packs a lot of advanced features  together to an extent that might feel a bit overwhelming for a new user.  Once you get used to it, though, it is hard to go back.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2444" style="width: 630px;"&gt;&lt;img alt="PowerAmp" class="size-full wp-image-2444" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/poweramp-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;PowerAmp&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.rdio.android.ui"&gt;Rdio&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Rdio" class="alignright size-full wp-image-2400" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/rdio.png" width="128" /&gt;Rdio  is a newish social music subscription service that allows you to search  for and play from a huge collection of music, while also following  other users and subscribing to what they are listening to. The minimal  interface provides just the right balance of eye-candy and utility, and  makes discovering new music easy and fun.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2445" style="width: 630px;"&gt;&lt;img alt="Rdio" class="size-full wp-image-2445" height="463" src="http://android.appstorm.net/wp-content/uploads/2011/03/rdio-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Rdio&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.real.RealPlayer"&gt;RealPlayer&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Real Player" class="alignright size-full wp-image-2401" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/realplayer.png" width="128" /&gt;After  a dismal few years and a few controversial products, RealNetworks is  making a comeback with a kick-ass music application. The application  lets you easily organize and play your media collection, including  videos (something a lot of other players don’t do very well).&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2446" style="width: 630px;"&gt;&lt;img alt="Real Player" class="size-full wp-image-2446" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/realplayer-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;RealPlayer&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=org.urbian.android.tools.vintagecam.payed"&gt;Retro Camera&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Retro Camera" class="alignright size-full wp-image-2402" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/retrocamera.jpg" width="128" /&gt;Taking  pictures on the android camera is fun, but what’s even more fun is  making it look like a camera of the past (and I mean real long past).  Retro camera converts the stock camera interface into one of five  classic cameras, complete with antique viewfinders and matching photo  effects.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2447" style="width: 630px;"&gt;&lt;img alt="Retro Camera" class="size-full wp-image-2447" height="216" src="http://android.appstorm.net/wp-content/uploads/2011/03/retrocamera-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Retro Camera&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.sketchbook"&gt;SketchBook Mobile&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Sketchbook Mobile" class="alignright size-full wp-image-2403" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/sketchbook.jpg" width="128" /&gt;With  phone screen sizes touching upwards of 4 inches, you don’t need to saw  off your fingertips to be able to draw on them anymore (sure, the take  on a certain comment from a certain Mr. Jobs is intended). SketchBook  Mobile is a miniature, touch-friendly version of the immensely popular  Sketchbook Pro application from Autodesk and does a pretty neat job of  bringing the sketchbook feel to your Android phone.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2448" style="width: 630px;"&gt;&lt;img alt="SketchBook Mobile" class="size-full wp-image-2448" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/sketchbook-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;SketchBook Mobile&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.soundcloud.android"&gt;SoundCloud&lt;/a&gt;&lt;/h3&gt;&lt;img alt="SoundCloud" class="alignright size-full wp-image-2405" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/soundcloud.png" width="128" /&gt;Android  comes with a built-in sound recorder application, but like with most  stock applications, it is quite barebones. Enter SoundCloud, a  full-featured sound recording, editing and sharing application which  makes it a breeze to record a sound around you and save it in the cloud.  It also comes with some rudimentary editing features and built-in  social integration.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2450" style="width: 630px;"&gt;&lt;img alt="SoundCloud" class="size-full wp-image-2450" height="463" src="http://android.appstorm.net/wp-content/uploads/2011/03/soundcloud-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;SoundCloud&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.melodis.midomiMusicIdentifier"&gt;SoundHound&lt;/a&gt;&lt;/h3&gt;&lt;img alt="SoundHound" class="alignright size-full wp-image-2406" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/soundhound.png" width="128" /&gt;Listening  to a song you just need to have? Got a tune stuck in your head but  can’t seem to place it? SoundHound boasts of the world’s fastest music  recognition engine that can identify music by simply listening to it.  The interface, though minimalistic, makes it easy to search for songs,  find lyrics and artist info or even buy the identified song directly  from the Amazon music store. &lt;a href="http://android.appstorm.net/how-to/music/how-to-identify-music-with-your-phone/"&gt;Check out our guide to identifying music&lt;/a&gt;.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2451" style="width: 630px;"&gt;&lt;img alt="SoundHound" class="size-full wp-image-2451" height="545" src="http://android.appstorm.net/wp-content/uploads/2011/03/soundhound-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;SoundHound&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.songbirdnest.mediaplayer"&gt;Songbird&lt;/a&gt;&lt;/h3&gt;&lt;img alt="SongBird" class="alignright size-full wp-image-2404" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/songbird.png" width="128" /&gt;Okay,  last of the audio applications, this time an open source Mozilla  project. Songbird is still in Beta, but is already shaping up to be a  veritable foe to all the other commercial applications out there. The  feature set is robust, the interface unique and usable, and the  community support is growing by the day. Watch out for this one in the  days to come.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2449" style="width: 630px;"&gt;&lt;img alt="SongBird" class="size-full wp-image-2449" height="462" src="http://android.appstorm.net/wp-content/uploads/2011/03/songbird-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Songbird&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.codesector.speedview.free"&gt;SpeedView&lt;/a&gt;&lt;/h3&gt;&lt;img alt="SpeedView" class="alignright size-full wp-image-2407" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/speedview.png" width="128" /&gt;SpeedView  is an advanced speedometer application for your Android phone that uses  the phone’s GPS to accurately tell your current, maximum, and average  speeds, as well as total distance and time traveled. The interface  features a cool leather background texture and a car dashboard-like UI.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2454" style="width: 630px;"&gt;&lt;img alt="SpeedView" class="size-full wp-image-2454" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/speedview-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;SpeedView&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.sportstracklive.android.ui.activity.pro"&gt;Sports Track Live&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Sports Track Live" class="alignright size-full wp-image-2408" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/sportstracker.png" width="128" /&gt;Sports  Track Live is the mobile companion for the SportsTrack web application,  which allows you to log your fitness routine on the go. All information  gets synced with your account online. The application uses the phone’s  GPS to accurately track your outdoor trips and provides instant  analytics to help review your progress then and there.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2455" style="width: 630px;"&gt;&lt;img alt="Sports Track Live" class="size-full wp-image-2455" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/sportstracker-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Sports Track Live&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.mobiata.stayhip"&gt;StayHIP&lt;/a&gt;&lt;/h3&gt;&lt;img alt="StayHIP" class="alignright size-full wp-image-2409" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/stayhip.jpg" width="128" /&gt;If  you are looking for the finest boutique hotels in the world, the search  ends at StayHIP. The application lets you browse, evaluate and book at  some of the best hotels, all online and through a fittingly sleek  interface that has ‘premium’ written all over it.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2456" style="width: 630px;"&gt;&lt;img alt="StayHIP" class="size-full wp-image-2456" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/stayhip-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;StayHIP&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.touchtype.swiftkey"&gt;SwiftKey&lt;/a&gt;&lt;/h3&gt;&lt;img alt="SwiftKey" class="alignright size-full wp-image-2410" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/swiftkey.jpg" width="128" /&gt;&lt;a href="http://android.appstorm.net/roundups/productivity-roundups/15-awesome-keyboards-for-android/"&gt;Alternative Android keyboards&lt;/a&gt;  are a bit of an overkill on the market, and finding one that works best  can be quite a task. Although the Swype keyboard provides a unique and  in many ways better typing experience, few keyboard applications come  close to the visual quality of the SiwftKey keyboard. That it also has  the best text prediction engine is icing on the cake.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2457" style="width: 630px;"&gt;&lt;img alt="SwiftKey" class="size-full wp-image-2457" height="462" src="http://android.appstorm.net/wp-content/uploads/2011/03/swiftkey-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;SwiftKey&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.taazza.go"&gt;Taazzago&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Taazzago" class="alignright size-full wp-image-2411" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/taazzago.png" width="128" /&gt;There  are very few India-focused applications on the Android Market, in spite  of the huge and growing user base in the country. Taazzago tries to  fill that space with a beautiful local news application that provides  news, weather, classifieds and deals, all in a compact user interface  with surprising accuracy.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2458" style="width: 630px;"&gt;&lt;img alt="Taazzago" class="size-full wp-image-2458" height="462" src="http://android.appstorm.net/wp-content/uploads/2011/03/taazzago-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Taazzago&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=net.dinglisch.android.taskerm"&gt;Tasker&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Tasker" class="alignright size-full wp-image-2412" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/tasker.png" width="128" /&gt;Tasker  is a multi-purpose automation application for your phone that can  automate everything from settings to photos, and SMS to speech. It works  by letting you apply actions to triggers, with an overwhelming number  of choices for each. The power of the application needs to be seen to be  believed, although the interface makes setting tasks pretty simple once  you understand the basics.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2459" style="width: 630px;"&gt;&lt;img alt="Tasker" class="size-full wp-image-2459" height="462" src="http://android.appstorm.net/wp-content/uploads/2011/03/tasker-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Tasker&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.citc.wallet"&gt;Wallet&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Wallet" class="alignright size-full wp-image-2413" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/wallet.png" width="128" /&gt;If  paranoia over information security sounds familiar, Wallet is just the  tool for you. The application lets you save critical information – like  bank details, passwords and important numbers – in an encrypted file on  your phone. This file can then be synchronized with Dropbox for anytime  access. The interface is minimal but beautifully done with subtle  textures and icons.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2460" style="width: 630px;"&gt;&lt;img alt="Wallet" class="size-full wp-image-2460" height="512" src="http://android.appstorm.net/wp-content/uploads/2011/03/wallet-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Wallet&lt;/div&gt;&lt;/div&gt;&lt;h3&gt;&lt;a href="https://market.android.com/details?id=com.aws.android"&gt;Weatherbug&lt;/a&gt;&lt;/h3&gt;&lt;img alt="Weatherbug" class="alignright size-full wp-image-2414" height="128" src="http://android.appstorm.net/wp-content/uploads/2011/03/weatherbug.png" width="128" /&gt;What  sets the Weatherbug application apart from other similar ones is the  depth of the information it provides in a small package, as well as the  intuitive and clean visual design of the application. Everything from  topographic maps to weather conditions and forecasts are available at a  tap of an icon, with more details readily available for when you need  them.&lt;br /&gt;&lt;div class="wp-caption aligncenter" id="attachment_2461" style="width: 630px;"&gt;&lt;img alt="Weatherbug" class="size-full wp-image-2461" height="544" src="http://android.appstorm.net/wp-content/uploads/2011/03/weatherbug-sc.jpg" width="620" /&gt;&lt;div class="wp-caption-text"&gt;Weatherbug&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;In Conclusion&lt;/h2&gt;These applications are a very small sampling of what’s on the market.  New applications are coming up every day – so much so that I actually  continued to add them to the list till the last minute (Chomp was  actually released just a few days ago). With such a broad growing  collection, there should be very little to complain about the lack of  aesthetics on the Android applications front any more.&lt;br /&gt;Got a few favorites of your own that are not here? Let’s hear about them in the comments below.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-6615780289204166377?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/6615780289204166377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2011/12/40-beautiful-android-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/6615780289204166377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/6615780289204166377'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2011/12/40-beautiful-android-application.html' title='40 Beautiful Android Application Interfaces and Icons'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-1828111805930575573</id><published>2010-12-28T00:36:00.001-08:00</published><updated>2010-12-28T00:36:54.047-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Touch or Untouch a File in Xcode</title><content type='html'>For example, if you edit and save a file, the time stamp will be  updated and Xcode will recompile the file on the next build cycle.&lt;br /&gt;If you ever need to force a recompile of a file, you can do a &lt;strong&gt;Clean&lt;/strong&gt; of the project (see the &lt;strong&gt;Build&lt;/strong&gt;  menu in Xcode). Clean will delete all intermediate files such as  precompiled headers, so on the next build Xcode will recreate the  current target’s precompiled header files and all other files as needed.  Depending on the size of your project, this may be a time consuming  process.&lt;br /&gt;Should you have a need to recompile a select file or two, a better option is to &lt;strong&gt;touch&lt;/strong&gt; only those specific files. For those unfamiliar with &lt;strong&gt;touch&lt;/strong&gt;,  this refers to a unix utility of the same name that changes file access  and modification times. From within Xcode you can touch a file by right  clicking on a file in the Groups and Files window and choosing &lt;strong&gt;Touch&lt;/strong&gt; from the drop-down menu:&lt;br /&gt;&lt;img alt="" height="334" src="http://iphonedevelopertips.com/wp-content/uploads/2010/12/touch.png" width="200" /&gt;&lt;br /&gt;Notice there is also an &lt;strong&gt;Untouch&lt;/strong&gt; option in the menu, which will mark the file state as up-to-date, thus averting a compile of that file, on the next build.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-1828111805930575573?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/1828111805930575573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/12/touch-or-untouch-file-in-xcode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1828111805930575573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1828111805930575573'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/12/touch-or-untouch-file-in-xcode.html' title='Touch or Untouch a File in Xcode'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-7911441318634680881</id><published>2010-12-07T14:58:00.001-08:00</published><updated>2010-12-07T14:58:18.993-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Create a Universally Unique Identifier (UUID)</title><content type='html'>UUID’s are 128-bit values which are guaranteed to be unique –  typically the value is based on a machines ethernet address combined  with the current time since October 15, 1582.&lt;br /&gt;UUID’s are string values separated by hyphens, for example, here is how a UUID may look: 13222F23-C76A-7781-0C12-0293E3B34398. &lt;br /&gt;The method below creates a UUID and returns a string representation of the same:&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Create UUID&lt;/h5&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #002200;"&gt;-&lt;/span&gt; &lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;createUUID&lt;br /&gt;&lt;span style="color: #002200;"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;// Create universally unique identifier (object)&lt;/span&gt;&lt;br /&gt;  CFUUIDRef uuidObject &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CFUUIDCreate&lt;span style="color: #002200;"&gt;(&lt;/span&gt;kCFAllocatorDefault&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;// Get the string representation of CFUUID object.&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;uuidStr &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #400080;"&gt;NSString&lt;/span&gt; &lt;span style="color: #002200;"&gt;*&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;CFUUIDCreateString&lt;span style="color: #002200;"&gt;(&lt;/span&gt;kCFAllocatorDefault, uuidObject&lt;span style="color: #002200;"&gt;)&lt;/span&gt; autorelease&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;// If needed, here is how to get a representation in bytes, returned as a structure&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;// typedef struct {&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;//   UInt8 byte0;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;//   UInt8 byte1;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;//   ...&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;//   UInt8 byte15;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #11740a; font-style: italic;"&gt;// } CFUUIDBytes;&lt;/span&gt;&lt;br /&gt;  CFUUIDBytes bytes &lt;span style="color: #002200;"&gt;=&lt;/span&gt; CFUUIDGetUUIDBytes&lt;span style="color: #002200;"&gt;(&lt;/span&gt;uuidObject&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  CFRelease&lt;span style="color: #002200;"&gt;(&lt;/span&gt;uuidObject&lt;span style="color: #002200;"&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  &lt;span style="color: #a61390;"&gt;return&lt;/span&gt; uuidStr;&lt;br /&gt;&lt;span style="color: #002200;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="sociable_tagline"&gt; &lt;h5&gt;&lt;br /&gt;&lt;/h5&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-7911441318634680881?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/7911441318634680881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/12/create-universally-unique-identifier.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/7911441318634680881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/7911441318634680881'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/12/create-universally-unique-identifier.html' title='Create a Universally Unique Identifier (UUID)'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-4345248343147517164</id><published>2010-12-07T14:57:00.000-08:00</published><updated>2010-12-07T14:57:04.211-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Get UDID from iTunes</title><content type='html'>The following tips runs you through the steps to quickly look up the UDID number for a device from with iTunes.&lt;br /&gt;Begin by plugging in the device and starting iTunes. Choose your  device in the DEVICES section on the left side of iTunes. At this point  you should see the iPhone stats (name, capacity, software version, etc)  similar to the figure below. By default the serial number will be shown  on the second line from the bottom:&lt;br /&gt;&lt;img alt="" height="211" src="http://iphonedevelopertips.com/wp-content/uploads/2010/11/itunes2.png" width="469" /&gt;&lt;br /&gt;If you click the Serial Number, the content of that row will change to show the UDID:&lt;br /&gt;&lt;img alt="" height="208" src="http://iphonedevelopertips.com/wp-content/uploads/2010/11/itunes12.png" width="471" /&gt;&lt;br /&gt;To copy the UDID to the clipboard, from the Edit menu inside iTunes,  choose Copy. You can now paste the UDID as needed into an email,  document…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-4345248343147517164?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/4345248343147517164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/12/get-udid-from-itunes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/4345248343147517164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/4345248343147517164'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/12/get-udid-from-itunes.html' title='Get UDID from iTunes'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-1887920825492856553</id><published>2010-11-23T02:44:00.001-08:00</published><updated>2010-11-23T02:44:53.235-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Creating Clickable Hyperlinks from a URL, Phone Number or Address</title><content type='html'>The following tips shows a quick way to create clickable hyperlinks using a UITextView. The trick is to set the &lt;strong&gt;dataDetectorTypes&lt;/strong&gt;  property to specify the data type you are after, from there, upon a tap  the link will launch the appropriate application, namely Safari, Phone  Dialer or Maps.&lt;br /&gt;&lt;img alt="" height="152" src="http://iphonedevelopertips.com/wp-content/uploads/2010/11/links.png" width="346" /&gt;&lt;br /&gt;&lt;h5&gt;Clickable URL&lt;/h5&gt;&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Create textview, centering horizontally&lt;/span&gt;&lt;br /&gt;UITextView &lt;span style="color: #002200;"&gt;*&lt;/span&gt;textView &lt;span style="color: #002200;"&gt;=&lt;/span&gt; &lt;span style="color: #002200;"&gt;[&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UITextView alloc&lt;span style="color: #002200;"&gt;]&lt;/span&gt; initWithFrame&lt;span style="color: #002200;"&gt;:&lt;/span&gt;CGRectMake&lt;span style="color: #002200;"&gt;(&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;0&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;10&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;320&lt;/span&gt;, &lt;span style="color: #2400d9;"&gt;50&lt;/span&gt;&lt;span style="color: #002200;"&gt;)&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Set font, background and alignment&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setFont&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIFont boldSystemFontOfSize&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #2400d9;"&gt;16&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setBackgroundColor&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;UIColor blackColor&lt;span style="color: #002200;"&gt;]&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setTextAlignment&lt;span style="color: #002200;"&gt;:&lt;/span&gt;UITextAlignmentCenter&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Unfortunately the link will show as blue even with this setting&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;//  [textView setTextColor:[UIColor greenColor]];&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Edit and scrolling off  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setEditable&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #a61390;"&gt;NO&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setScrollEnabled&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #a61390;"&gt;NO&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Set data type to specify URL/link&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setDataDetectorTypes&lt;span style="color: #002200;"&gt;:&lt;/span&gt;UIDataDetectorTypeLink&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Set text as URL&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setText&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"iOSDeveloperTips.com"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;  &lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;self.view addSubview&lt;span style="color: #002200;"&gt;:&lt;/span&gt;textView&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h5&gt;Clickable Phone Number&lt;/h5&gt;To change up the code to support a clickable phone number, replace lines 16-21 with the following:&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Set data type to phone number&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setDataDetectorTypes&lt;span style="color: #002200;"&gt;:&lt;/span&gt;UIDataDetectorTypePhoneNumber&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Set text as phone number&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setText&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"800-555-1212"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;h5&gt;Clickable Address&lt;/h5&gt;With the release of iOS 4.0, you can now create a clickable address. Tapping on the link will launch the Maps application.&lt;br /&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="objc" style="font-family: monospace;"&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Set data type to address&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setDataDetectorTypes&lt;span style="color: #002200;"&gt;:&lt;/span&gt;UIDataDetectorTypeAddress&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #11740a; font-style: italic;"&gt;// Set text as phone number&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #002200;"&gt;[&lt;/span&gt;textView setText&lt;span style="color: #002200;"&gt;:&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;@&lt;/span&gt;&lt;span style="color: #bf1d1a;"&gt;"1 Infinite Loop, Cupertino, CA 95014"&lt;/span&gt;&lt;span style="color: #002200;"&gt;]&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-1887920825492856553?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/1887920825492856553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/11/creating-clickable-hyperlinks-from-url.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1887920825492856553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/1887920825492856553'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/11/creating-clickable-hyperlinks-from-url.html' title='Creating Clickable Hyperlinks from a URL, Phone Number or Address'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-5580787924325727123</id><published>2010-10-30T18:27:00.000-07:00</published><updated>2010-10-30T18:27:53.286-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Iphone'/><title type='text'>Submitting iPhone Apps To The Apple App Store – A Step by Step Guide</title><content type='html'>&lt;div class="post-excerpt"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_etG65zi4dXs/TMzGDA_T29I/AAAAAAAAAEI/aNDPc1dejjM/s1600/app-store-iphone-app-submission-guide.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_etG65zi4dXs/TMzGDA_T29I/AAAAAAAAAEI/aNDPc1dejjM/s1600/app-store-iphone-app-submission-guide.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here’s a quick step  by step guideline that you can print and keep hand, to use when your app  is ready for submission. I am assuming that the reader of this article  has an iPhone Developer License.&lt;br /&gt;&lt;/div&gt;Here’s a quick step by step guideline  that you can print and keep hand, to use when your app is ready for  submission. I am assuming that the reader of this article has an iPhone  Developer License.&lt;br /&gt;&lt;strong&gt;====== &lt;/strong&gt;&lt;strong&gt;Step 1 &lt;/strong&gt;&lt;strong&gt;======&lt;/strong&gt;&lt;br /&gt;Certificate is an essential element to submit or test an application  on iphone. It comes with code sign(Signatures) which would verified when  an application is submitted on apple store or when tested on iphone.&lt;br /&gt;&lt;em&gt;One can bypass these if an application is installed on jail-break  iphone or&amp;nbsp; when submitted on Cydia but this is not possible when one  wants submit it to Appstore.&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;One has to through 2 step procedure to create a certificate from  developer portal. I simply copied those two from “iphone developer  portal”&lt;br /&gt;&lt;strong&gt;[1]&lt;/strong&gt; Generating Certificate Signing Request&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; Submitting a Certificate Signing Request for Approval&lt;br /&gt;&lt;strong&gt;Generating a Certificate Signing Request&lt;/strong&gt;:&lt;br /&gt;&lt;strong&gt;[3] &lt;/strong&gt;Open the Utilities folder and launch Keychain Access from the Applications folder.&lt;br /&gt;&lt;strong&gt;[4]&lt;/strong&gt; Set the value of Online Certificate Status  Protocol (OCSP) and Certificate Revocation List (CRL) to “off” in the  Preferences Menu.&lt;br /&gt;&lt;strong&gt;[5]&lt;/strong&gt; Select Keychain Access -&amp;gt; Certificate Assistant -&amp;gt; Request a Certificate from a Certificate Authority.&lt;br /&gt;&lt;strong&gt;[6]&lt;/strong&gt; Fill in your email address in User Email Address  Field. Confirm that this email address is same as provided at the time  of registering as iPhone developer.&lt;br /&gt;&lt;strong&gt;[7]&lt;/strong&gt; Fill in your name in the Common Name field.  Confirm that this name is same as provided at the time of registering as  iPhone developer.&lt;br /&gt;&lt;strong&gt;[8]&lt;/strong&gt; It is not necessary to have an Certificate  Authority (CA). The ‘Required’ message would be eliminated after  finishing the following step.&lt;br /&gt;&lt;strong&gt;[9] &lt;/strong&gt;Click the ‘save to disk’ radio button if prompted, choose ‘Let me specify key pair information’ and proceed.&lt;br /&gt;&lt;strong&gt;[10] &lt;/strong&gt;If&amp;nbsp; you choose ‘Let me specify key pair’ option  then one has provide a file name and click ‘Save’. Select ‘2048 bits’  for Key Size and ‘RSA’ for the algorithm in next screen and proceed.&lt;br /&gt;&lt;strong&gt;[11]&lt;/strong&gt; CSR file would created on the desktop by Certificate Authority.&lt;br /&gt;&lt;strong&gt;Submitting a Certificate Signing Request for Approval:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;[1] &lt;/strong&gt;Once CSR file is created log in to the iPhone  developer program portal and go to ‘Certificates’&amp;gt; ‘Development’ and  select ‘Add Certificate’.&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; Click the ‘Choose file’ button, select your CSR  and click ‘Submit’. The portal will reject the CSR if Key Size is not  set to 2048 bit at the time of CSR creation.&lt;br /&gt;&lt;strong&gt;[3] &lt;/strong&gt;This will followed by notification to Team Admins by email of the certificate request.&lt;br /&gt;&lt;strong&gt;[4] &lt;/strong&gt;The change in the certificate status would informed by email on approval or rejection of the CSR by Team Admin.&lt;br /&gt;&lt;strong&gt;Download/Installing Certificate on your machine&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;[5]&lt;/strong&gt; Once the CSR is approved the Team Members and  Team Admins can download their certificates via the ‘Certification’  section of the Program Portal.&amp;nbsp; Choose ‘Download’ next to the  certificate name to download your iPhone development certificate to your  local machine.&lt;br /&gt;&lt;strong&gt;[6] &lt;/strong&gt;Once this is done double-click the &lt;em&gt;.cer&lt;/em&gt; file to launch Keychain Access and install your certificate.&lt;br /&gt;On installation of certificate on your MAC the next step is to create an App ID.&lt;br /&gt;&lt;em&gt;Note: You have to follow this step only once and late you don’t have to make certificates for your other applications.&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;====== Step 2 &lt;/strong&gt;&lt;strong&gt;======&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Follow the following steps to create an App ID:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;[1] &lt;/strong&gt;Go to ‘App IDs’ and click ‘App ID’ after logging in to iPhone developer program portal.&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; Populate the ‘App Id Name’ field with your application name (that is – iPhone app) and in ‘App Id’ enter something like &lt;em&gt;com.yourdomain.applicationname&lt;/em&gt; (i.e &lt;em&gt;com.edumobile.iphoneapp&lt;/em&gt;) and click submit.&lt;br /&gt;&lt;strong&gt;[3] &lt;/strong&gt;Please do note down the “App Id” as this would be utilized in Info.plist, bundle identifier tag.&lt;br /&gt;&lt;strong&gt;&lt;strong&gt;====== &lt;/strong&gt;Step 3&lt;strong&gt; &lt;/strong&gt;&lt;strong&gt;======&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Next step would be to create a Provisioning file for our  Xcode and is the last step for creating binary which would submit it to  Appstore.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;[1] &lt;/strong&gt;After you navigate to ‘Provisioning’&amp;gt; ‘Distribution’ click ‘Add Profile’ in iphone developer program portal.&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; Choose “App Store” in “Distribution Method”.&lt;br /&gt;&lt;strong&gt;[3] &lt;/strong&gt;In “Profile Name” enter your application name (i.e iphoneapp) which will be your provisioning profile name as well.&lt;br /&gt;&lt;strong&gt;[4] &lt;/strong&gt;In “App ID” select the app name(i.e. iphoneapp) which you created in Step 2.&lt;br /&gt;&lt;strong&gt;[5] &lt;/strong&gt;After downloading the Provisioning profile copy it to your/YourUserName/Library/MobileDevice/Provisioning Profile.&lt;br /&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;====== &lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;Step 4 &lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;strong&gt;======&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;Now everything is step up, open your project in Xcode&lt;br /&gt;&lt;strong&gt;[1] &lt;/strong&gt;Click “i” Info button after selecting your project from “Group &amp;amp; File” in left side bar.&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; Navigate to “Configuration” tab and select “Release”. Click the “Duplicate” button from bottom, name is “iphoneDistribution”.&lt;br /&gt;&lt;strong&gt;[3]&lt;/strong&gt; Click on “Build” tab and choose  “iphoneDistribution” and enter in “Search in Build Settings” filed ‘Base  SDK’ and select the current selected Device and&amp;nbsp; change to what gadget  your application is targeting (&lt;em&gt;I prefer “Device-iPhone OS 2.0&lt;/em&gt;)&lt;br /&gt;&lt;strong&gt;[4]&lt;/strong&gt; Now in “Search in build setting” field enter  “code signing identity” and choose the provisioning profile created  earlier in Step 3. Apply the same to the child property “Any iPhone OS  Device”.&lt;br /&gt;&lt;strong&gt;[5]&lt;/strong&gt; Once this done close the Info screen and select  the “Target”&amp;gt; “Your App” from “Group &amp;amp; File” in left side bar and  click on “Info” button again from Xcode.&lt;br /&gt;&lt;strong&gt;[6] &lt;/strong&gt;To be on the safer side repeat step 3 and 4.&lt;br /&gt;&lt;strong&gt;[7]&lt;/strong&gt; With the Info screen still open click on “Properties” tab and enter “App Id”(&lt;em&gt;i.e. com.edumobile.iphoneapp&lt;/em&gt;) in Identifier field.&lt;br /&gt;&lt;strong&gt;[8]&lt;/strong&gt; Now that all is done, click on “Build” (cmd+B) from Xcode&amp;gt;Build.&lt;br /&gt;&lt;strong&gt;[9]&lt;/strong&gt; You will find your binary file created on right  clicking on “Product”&amp;gt; “YourApp” and selecting “Reveal in Finder”.  Zip this file.&lt;br /&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;====== &lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;Step 5&lt;strong&gt;&lt;strong&gt;&lt;strong&gt; ======&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;The next step is to submit the binary file created to itunesconnect.&lt;br /&gt;&lt;strong&gt;[1]&lt;/strong&gt; In your browser type &lt;em&gt;https://itunesconnect.apple.com/&lt;/em&gt; (this website is very slow over https) and login using your iPhone developer account.&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; Click on “Manage Your Account” &amp;gt; “Add Application”&lt;br /&gt;&lt;strong&gt;[3]&lt;/strong&gt; On replying to a simple question from apple you  can sumbit your application to app store. You also need few things in  your system before you submit your application.&lt;br /&gt;&lt;strong&gt;a)&lt;/strong&gt; Application Name (must be unique)&lt;br /&gt;&lt;strong&gt;b)&lt;/strong&gt; Application description&lt;br /&gt;&lt;strong&gt;c) &lt;/strong&gt;Application Category&lt;br /&gt;&lt;strong&gt;d)&lt;/strong&gt; URL for your application feedback.&lt;br /&gt;&lt;strong&gt;e) &lt;/strong&gt;Icon of your application in 512 x 512 size.&lt;br /&gt;&lt;strong&gt;f)&lt;/strong&gt; Main picture of your application in 320 x 480 or  320 x 460 size. (You have option to submit up to 4&amp;nbsp; more pictures of  your application).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-5580787924325727123?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/5580787924325727123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/10/submitting-iphone-apps-to-apple-app.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/5580787924325727123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/5580787924325727123'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/10/submitting-iphone-apps-to-apple-app.html' title='Submitting iPhone Apps To The Apple App Store – A Step by Step Guide'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_etG65zi4dXs/TMzGDA_T29I/AAAAAAAAAEI/aNDPc1dejjM/s72-c/app-store-iphone-app-submission-guide.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-3265219033406987268</id><published>2010-10-18T17:54:00.001-07:00</published><updated>2010-10-18T17:54:55.084-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>How to build libmad on android</title><content type='html'>download libmad from here:&amp;nbsp;http://www.underbit.com/products/mad/ &lt;br /&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;unzip, then run&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;./configure  --enable-speed --disable-debugging --host=arm-eabi CC=arm-eabi-gcc  CPPFLAGS="-I$NDK/build/platforms/android-8/arch-arm/usr/include/"  CFLAGS="-nostdlib"  LDFLAGS="-Wl,-rpath-link=$NDK/build/platforms/android-8/arch-arm/usr/lib/  -L$NDK/build/platforms/android-8/arch-arm/usr/lib/" LIBS="-lc "&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;You will have config.h. Note to set path to arm-eabi-gcc&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-----------------------------------------&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;So  i was porting all the decoders i had build for the onset detection  tutorial to C++, using libmad as the mp3 decoder of choice. After  getting that to work on the desktop properly i had to make it work on  Android too. Now, there’s no build of libmad in the NDK for obvious  reasons, so i had to build that myself. As the autotools configure  script of libmad is not useable with the NDK toolchain i used the  config.h file from&amp;nbsp;&lt;a href="http://gitorious.org/rowboat/external-libmad/blobs/raw/master/android/config.h" style="border-width: 0px; color: #0000cc; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;"&gt;http://gitorious.org/rowboat/external-libmad/blobs/raw/master/android/config.h&lt;/a&gt;,  which has all the settings needed for building libmad on Android.  Compiling libmad is then a simple matter of creating a proper Android.mk  and Application.mk file. The Android.mk file looks like this:&lt;/div&gt;&lt;div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1.5em; outline-width: 0px; overflow-x: auto; overflow-y: hidden; padding: 0px; vertical-align: baseline; width: 500px;"&gt; &lt;div class="code" style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 2px 4px; vertical-align: top;"&gt; &lt;pre class="c" style="clear: none; float: none; font-family: monospace; font-size: 12px; font-style: inherit; font-weight: inherit; line-height: 1.333; margin: 0px; outline-width: 0px; overflow: visible; padding: 0px; vertical-align: baseline; white-space: pre; width: auto;"&gt;LOCAL_PATH &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;:=&lt;/span&gt; $&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;call my&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;dir&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;include $&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;CLEAR_VARS&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;LOCAL_MODULE    &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;:=&lt;/span&gt; audio&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;tools&lt;br /&gt;LOCAL_ARM_MODE &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;:=&lt;/span&gt; arm&lt;br /&gt;LOCAL_SRC_FILES &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;:=&lt;/span&gt; NativeWaveDecoder.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;cpp&lt;/span&gt; NativeMP3Decoder.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;cpp&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;bit.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;decoder.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;fixed.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;frame.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;huffman.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;layer12.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;layer3.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;synth.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;timer.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt; mad&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt;version.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;c&lt;/span&gt;&lt;br /&gt;LOCAL_CFLAGS &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;:=&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;DHAVE_CONFIG_H &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;DFPM_ARM &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;ffast&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;math &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;O3&lt;br /&gt;&amp;nbsp;&lt;br /&gt;include $&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;BUILD_SHARED_LIBRARY&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;Now  there’s a couple of things that initially bogged down the performance  of this. I tested it with the song “Schism” by tool which is a 6:47min  long song, encoded at 192kbps. The file weights in at 9.31mb, pretty big  for an mp3 imo. NativeMP3Decoder is just a libmad based implementation  of the MP3Decoder in the onset detection tutorial framework. So it has a  simple&lt;em style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: italic; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;NativeMP3Decoder.readSamples&lt;/em&gt;  method which will fill a float array with as many samples as there are  elements in the float array. If the input file is in stereo the channels  get mixed down to mono by averaging. The&lt;em style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: italic; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;NativeMP3Decoder.readSamples()&lt;/em&gt;  method internally calls a native method with a similar signature.  Instead of a float array i pass in a direct ByteBuffer that has enough  storage to hold all the samples requested. The native wrapper then  writes the samples to this direct buffer which in turn then gets copied  to the float array passed into the&amp;nbsp;&lt;em style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: italic; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;NativeMP3Decoder.readSamples()&lt;/em&gt; method. It looks something like this:&lt;/div&gt;&lt;div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1.5em; outline-width: 0px; overflow-x: auto; overflow-y: hidden; padding: 0px; vertical-align: baseline; width: 500px;"&gt; &lt;div class="code" style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 2px 4px; vertical-align: top;"&gt; &lt;pre class="java" style="clear: none; float: none; font-family: monospace; font-size: 12px; font-style: inherit; font-weight: inherit; line-height: 1.333; margin: 0px; outline-width: 0px; overflow: visible; padding: 0px; vertical-align: baseline; white-space: pre; width: auto;"&gt;&lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;public&lt;/span&gt; &lt;span style="border-width: 0px; color: #000066; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; readSamples&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #000066; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;float&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; samples&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt; &lt;br /&gt;   &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; buffer &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #000066; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;null&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;||&lt;/span&gt; buffer.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;capacity&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;!=&lt;/span&gt; samples.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;length&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;      ByteBuffer byteBuffer &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; ByteBuffer.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;allocateDirect&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; samples.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;length&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; &lt;span style="border-width: 0px; color: #003399; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;Float&lt;/span&gt;.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;SIZE&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt; &lt;span style="border-width: 0px; color: #cc66cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;8&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;      byteBuffer.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;order&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;ByteOrder.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;nativeOrder&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;      buffer &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; byteBuffer.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;asFloatBuffer&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #000066; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; readSamples &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; readSamples&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; handle, buffer, samples.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;length&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; readSamples &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #cc66cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;      closeFile&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; handle &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #cc66cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   buffer.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;position&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #cc66cc; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   buffer.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;get&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; samples &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; samples.&lt;span style="border-width: 0px; color: #006633; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;length&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;The call to&amp;nbsp;&lt;em style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: italic; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;buffer.get( samples )&lt;/em&gt;  kills it all. Without any optimizations (thumb code, -O0, -DFPM_DEFAULT  == standard fixed point math in libmad, no arm assembler optimized fp  math) decoding the complete files takes 184 seconds on my Milestone.  Holy shit, batman! If i eliminate the&amp;nbsp;&lt;em style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: italic; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;buffer.get( samples )&lt;/em&gt;  call that gets down to 44 seconds! Incredible. Now i still thought that  is way to slow so i started adding optimizations. The first thing i did  was compiling to straight arm instead of thumb code. You can tell the  NDK toolchain to do so by placing this in the Android.mk file:&lt;/div&gt;&lt;div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1.5em; outline-width: 0px; overflow-x: auto; overflow-y: hidden; padding: 0px; vertical-align: baseline; width: 500px;"&gt; &lt;div class="code" style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 2px 4px; vertical-align: top;"&gt; &lt;pre class="c" style="clear: none; float: none; font-family: monospace; font-size: 12px; font-style: inherit; font-weight: inherit; line-height: 1.333; margin: 0px; outline-width: 0px; overflow: visible; padding: 0px; vertical-align: baseline; white-space: pre; width: auto;"&gt;LOCAL_ARM_MODE &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;:=&lt;/span&gt; arm&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;With  this enabled decoding takes 36 seconds. The next thing i did was  agressive optimization via -O3 as a CFLAG. That shaved off only 2 more  seconds, so nothing to write home about. The last optimization is libmad  specific. The config.h file i linked to above does not define the fixed  point math mode libmad should use. Now, when you have a look at fixed.h  of libmad you can see quiet some options for fixed point math there.  There’s also a dedicated option for arm processors that uses some nice  little arm assembler code to do the heavy lifting. You can enable this  by passing -DFPM_ARM as a CFLAG. Now that did wonders! i’m now down to  20 seconds for decoding 407 seconds of mp3 encoded audio. That’s roughly  20x real-time which is totally ok with me. The song i chose is at the  extreme end of the song length spectrum i will have to handle in my next  audio game project. A song a user uses will be processed once and  waiting for that 20 seconds is ok in my book.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;I’m  afraid i won’t release the source of the ported audio framework as it’s  a bit of a mess and would need some work to clean up. What i can give  you is the plain source for the native side of the NativeMP3Decoder  class if you guarantee me not to laugh. My C days are long over so  there’s probably a shitload of don’ts in there. The “handle” system is  also kind of creative but good enough for my needs. I learned how to use  the low level libmad api by looking at the code&amp;nbsp;&lt;a href="http://www.bsd-dk.dk/%7Eelrond/audio/madlld/" style="border-width: 0px; color: #0000cc; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;"&gt;here&lt;/a&gt;.  I actually like doing it this way more than with the shitty callback  high-level API. Your mileage may vary. So here it is, be afraid:&lt;/div&gt;&lt;div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1.5em; outline-width: 0px; overflow-x: auto; overflow-y: hidden; padding: 0px; vertical-align: baseline; width: 500px;"&gt; &lt;div class="code" style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 2px 4px; vertical-align: top;"&gt; &lt;pre class="c" style="clear: none; float: none; font-family: monospace; font-size: 12px; font-style: inherit; font-weight: inherit; line-height: 1.333; margin: 0px; outline-width: 0px; overflow: visible; padding: 0px; vertical-align: baseline; white-space: pre; width: auto;"&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;#include "NativeMP3Decoder.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;#include "mad/mad.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;#include &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;#include &lt;string.h&gt;&lt;/string.h&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;#define SHRT_MAX (32767)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;#define INPUT_BUFFER_SIZE (5*8192)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;#define OUTPUT_BUFFER_SIZE 8192 /* Must be an integer multiple of 4. */&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="border-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/**&lt;br /&gt; * Struct holding the pointer to a wave file.&lt;br /&gt; */&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;struct&lt;/span&gt; MP3FileHandle&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; size&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; FILE&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; file&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_stream stream&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_frame frame&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_synth synth&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_timer_t timer&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; leftSamples&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; offset&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;unsigned&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;char&lt;/span&gt; inputBuffer&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;INPUT_BUFFER_SIZE&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="border-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/** static WaveFileHandle array **/&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;static&lt;/span&gt; MP3FileHandle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; handles&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;100&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="border-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/**&lt;br /&gt; * Seeks a free handle in the handles array and returns its index or -1 if no handle could be found&lt;br /&gt; */&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;static&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; findFreeHandle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;for&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; i &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt; i &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;100&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt; i&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;++&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; handles&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;i&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; i&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;static&lt;/span&gt; &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;inline&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;void&lt;/span&gt; closeHandle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; MP3FileHandle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; handle &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; fclose&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;file &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_synth_finish&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_frame_finish&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;frame&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_stream_finish&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; delete handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;static&lt;/span&gt; &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;inline&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;signed&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;short&lt;/span&gt; fixedToShort&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;mad_fixed_t Fixed&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;Fixed&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;=&lt;/span&gt;MAD_F_ONE&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;SHRT_MAX&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;Fixed&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;=-&lt;/span&gt;MAD_F_ONE&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;SHRT_MAX&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; Fixed&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;Fixed&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;MAD_F_FRACBITS&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;15&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;signed&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;short&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;Fixed&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;JNIEXPORT jint JNICALL Java_com_badlogic_audio_io_NativeMP3Decoder_openFile&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;JNIEnv &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;env&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jobject obj&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jstring file&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; index &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; findFreeHandle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; index &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;const&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;char&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; fileString &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; env&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;GetStringUTFChars&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;file&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; NULL&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; FILE&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; fileHandle &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; fopen&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; fileString&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span style="border-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;"rb"&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; env&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;ReleaseStringUTFChars&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;file&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; fileString&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; fileHandle &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; MP3FileHandle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; mp3Handle &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; new MP3FileHandle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mp3Handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;file &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; fileHandle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; fseek&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; fileHandle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; SEEK_END&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mp3Handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;size &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; ftell&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; fileHandle &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; rewind&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; fileHandle &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; mad_stream_init&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3Handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_frame_init&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3Handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;frame&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_synth_init&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3Handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_timer_reset&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3Handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;timer&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; handles&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;index&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; mp3Handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; index&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;static&lt;/span&gt; &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;inline&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; readNextFrame&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; MP3FileHandle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; mp3 &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;do&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;buffer&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;||&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;error&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; MAD_ERROR_BUFLEN &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; inputBufferSize &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;next_frame&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;!=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; leftOver &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;bufend&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;next_frame&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;for&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; i &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt; i &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt; leftOver&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt; i&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;++&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;     mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;inputBuffer&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;i&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;next_frame&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;i&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; readBytes &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; fread&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;inputBuffer &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;+&lt;/span&gt; leftOver&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; INPUT_BUFFER_SIZE &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt; leftOver&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;file &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; readBytes &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;    inputBufferSize &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; leftOver &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;+&lt;/span&gt; readBytes&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;else&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; readBytes &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; fread&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;inputBuffer&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; INPUT_BUFFER_SIZE&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;file &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; readBytes &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;    inputBufferSize &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; readBytes&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   mad_stream_buffer&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;inputBuffer&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; inputBufferSize &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;error&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; MAD_ERROR_NONE&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mad_frame_decode&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;frame&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;error&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; MAD_ERROR_BUFLEN &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;||&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;MAD_RECOVERABLE&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;stream.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;error&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;continue&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;else&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;else&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;break&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;while&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: black; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;true&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; mad_timer_add&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;timer&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;frame.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;header&lt;/span&gt;.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;duration&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mad_synth_frame&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;frame &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;leftSamples &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;pcm&lt;/span&gt;.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;length&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;JNIEXPORT jint JNICALL Java_com_badlogic_audio_io_NativeMP3Decoder_readSamples__ILjava_nio_FloatBuffer_2I&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;JNIEnv &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;env&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jobject obj&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jint handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jobject buffer&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jint size&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; MP3FileHandle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; mp3 &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; handles&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;handle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;float&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; target &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;float&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;env&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;GetDirectBufferAddress&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;buffer&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; idx &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;while&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; idx &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;!=&lt;/span&gt; size &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;leftSamples &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;for&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt; idx &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt; size &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;pcm&lt;/span&gt;.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;length&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;leftSamples&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;--,&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;++&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; value &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; fixedToShort&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;pcm&lt;/span&gt;.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;samples&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; MAD_NCHANNELS&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;frame.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;header&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;2&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;     value &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;+=&lt;/span&gt; fixedToShort&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;pcm&lt;/span&gt;.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;samples&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;     value &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;2&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    target&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;idx&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;++&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; value &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;float&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;SHRT_MAX&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;else&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; result &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; readNextFrame&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3 &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; result &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; idx &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;&lt;/span&gt; size &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; size&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;JNIEXPORT jint JNICALL Java_com_badlogic_audio_io_NativeMP3Decoder_readSamples__ILjava_nio_ShortBuffer_2I&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;JNIEnv &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;env&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jobject obj&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jint handle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jobject buffer&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jint size&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; MP3FileHandle&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; mp3 &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; handles&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;handle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;short&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; target &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;short&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;env&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;GetDirectBufferAddress&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;buffer&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; idx &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;while&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; idx &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;!=&lt;/span&gt; size &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;leftSamples &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;for&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt; idx &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt; size &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;pcm&lt;/span&gt;.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;length&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;leftSamples&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;--,&lt;/span&gt; mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;++&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; value &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; fixedToShort&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;pcm&lt;/span&gt;.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;samples&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; MAD_NCHANNELS&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;amp;&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;frame.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;header&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;2&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;     value &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;+=&lt;/span&gt; fixedToShort&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;synth.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;pcm&lt;/span&gt;.&lt;span style="border-width: 0px; color: #202020; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;samples&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;&lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;1&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;mp3&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;-&amp;gt;&lt;/span&gt;offset&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;     value &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;/=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;2&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    target&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;idx&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;++&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; value&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;else&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt; result &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; readNextFrame&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; mp3 &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; result &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;==&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; idx &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;&lt;/span&gt; size &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;return&lt;/span&gt; size&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;JNIEXPORT &lt;span style="border-width: 0px; color: #993333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;void&lt;/span&gt; JNICALL Java_com_badlogic_audio_io_NativeMP3Decoder_closeFile&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;JNIEnv &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;env&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jobject obj&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; jint handle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #b1b100; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; handles&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;handle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;!=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;br /&gt;  closeHandle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt; handles&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;handle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt;  handles&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;[&lt;/span&gt;handle&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;]&lt;/span&gt; &lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span style="border-width: 0px; color: #0000dd; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="border-width: 0px; color: #339933; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="border-width: 0px; color: #009900; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin: 0px; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;To  compile that for Android all you have to do is download libmad and put  the source files into your Android project’s jni folder along with the  code above. Then use the Android.mk from above et voila you got yourself  a native mp3 decoder for Android. You can use it in combination with  the AndroidAudioDevice class of the last post. If you feel adventureous  you could even extend it to return stereo data.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin: 0px 0px 1em; outline-width: 0px; padding: 0px; vertical-align: baseline;"&gt;Source:&amp;nbsp;http://www.badlogicgames.com/wordpress/?p=231&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-3265219033406987268?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/3265219033406987268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/10/how-to-build-libmad-on-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/3265219033406987268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/3265219033406987268'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/10/how-to-build-libmad-on-android.html' title='How to build libmad on android'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-7999067897430461245</id><published>2010-10-18T17:53:00.001-07:00</published><updated>2010-10-18T17:53:49.997-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Fun with Android AudioTrack</title><content type='html'>AudioTrack is available since Android 1.5 (API level 3) and offers an extremely  simple way to send PCM data directly to the device’s audio hardware. You can use  it in two modes: static and streaming. I will only look at the streaming mode here.  Streaming mode means that you permanentley write new PCM data to the hardware, the  framework will queue it in a buffer and play it back for you. AudioTrack supports  various sampling rates and 2 PCM encodings, 8-bit and signed 16-bit PCM. An AudioTrack  instance can either be in mono or stereo mode. Here’s a small class that can be  used similar to the &lt;a href="http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/io/AudioDevice.java" target="_blank"&gt; AudioDevice&lt;/a&gt; class of the onset detection tutorial:&lt;br /&gt;&lt;div class="wp_syntax"&gt;  &lt;div class="code"&gt;   &lt;pre class="java" style="font-family: monospace;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: black; font-weight: bold;"&gt;class&lt;/span&gt; AndroidAudioDevice&lt;br /&gt;&lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;   AudioTrack track&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #000066; font-weight: bold;"&gt;short&lt;/span&gt;&lt;span style="color: #009900;"&gt;[]&lt;/span&gt; buffer &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;short&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1024&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;   &lt;span style="color: black; font-weight: bold;"&gt;public&lt;/span&gt; AndroidAudioDevice&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; minSize &lt;span style="color: #339933;"&gt;=&lt;/span&gt;AudioTrack.&lt;span style="color: #006633;"&gt;getMinBufferSize&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;44100&lt;/span&gt;, &lt;span style="color: #003399;"&gt;AudioFormat&lt;/span&gt;.&lt;span style="color: #006633;"&gt;CHANNEL_CONFIGURATION_MONO&lt;/span&gt;, &lt;span style="color: #003399;"&gt;AudioFormat&lt;/span&gt;.&lt;span style="color: #006633;"&gt;ENCODING_PCM_16BIT&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;        &lt;br /&gt;      track &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt; AudioTrack&lt;span style="color: #009900;"&gt;(&lt;/span&gt; AudioManager.&lt;span style="color: #006633;"&gt;STREAM_MUSIC&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;44100&lt;/span&gt;, &lt;br /&gt;                                        &lt;span style="color: #003399;"&gt;AudioFormat&lt;/span&gt;.&lt;span style="color: #006633;"&gt;CHANNEL_CONFIGURATION_MONO&lt;/span&gt;, &lt;span style="color: #003399;"&gt;AudioFormat&lt;/span&gt;.&lt;span style="color: #006633;"&gt;ENCODING_PCM_16BIT&lt;/span&gt;, &lt;br /&gt;                                        minSize, AudioTrack.&lt;span style="color: #006633;"&gt;MODE_STREAM&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      track.&lt;span style="color: #006633;"&gt;play&lt;/span&gt;&lt;span style="color: #009900;"&gt;()&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;        &lt;br /&gt;   &lt;span style="color: #009900;"&gt;}&lt;/span&gt;    &lt;br /&gt; &lt;br /&gt;   &lt;span style="color: black; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; writeSamples&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt;&lt;span style="color: #009900;"&gt;[]&lt;/span&gt; samples&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;br /&gt;   &lt;span style="color: #009900;"&gt;{&lt;/span&gt; &lt;br /&gt;      fillBuffer&lt;span style="color: #009900;"&gt;(&lt;/span&gt; samples &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      track.&lt;span style="color: #006633;"&gt;write&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; buffer, &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;, samples.&lt;span style="color: #006633;"&gt;length&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;   &lt;span style="color: black; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; fillBuffer&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt;&lt;span style="color: #009900;"&gt;[]&lt;/span&gt; samples &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: black; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; buffer.&lt;span style="color: #006633;"&gt;length&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; samples.&lt;span style="color: #006633;"&gt;length&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;         buffer &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;short&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;samples.&lt;span style="color: #006633;"&gt;length&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      &lt;span style="color: black; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; i &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; samples.&lt;span style="color: #006633;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;         buffer&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;short&lt;/span&gt;&lt;span style="color: #009900;"&gt;)(&lt;/span&gt;samples&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;*&lt;/span&gt; &lt;span style="color: #003399;"&gt;Short&lt;/span&gt;.&lt;span style="color: #006633;"&gt;MAX_VALUE&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #009900;"&gt;}&lt;/span&gt;  &lt;br /&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;Pretty simple eh? Now let’s start with the constructor. The first thing we do  is to get the minimum buffer size for the AudioTrack instance we are going to create.  This is achieved by a call to &lt;em&gt;AudioTrack.getMinBufferSize()&lt;/em&gt;, passing in  the sampling rate, wheter we are mono or stereo and the PCM encoding, in this case  16-bit signed. This buffer size is used by the AudioTrack internally for a buffer  it stores all the samples in we’ll write to it. If the buffer is full it is flushed  to the audio hardware. Now, in the next line we instantiate an AudioTrack. The first  parameter dictates which audio stream our samples are going to be written to. There’s  a couple of audio streams in the Android system, we’ll almost always want to use  AudioManager.STREAM_MUSIC here. For the other stream types refer to the documentation.  The next three parameters say what sampling rate we want to have, wheter we want  the track to be mono or stereo and which PCM encoding we want to use. As with the  AudioDevice class from the onset detection tutorial we use 44100Hz, mono, 16-bit  signed PCM. The last parameter says wheter this AudioTrack is static or a streaming  one, we want it to be a streaming one. All that’s left is to call &lt;em&gt;AudioTrack.play()&lt;/em&gt;  and we are ready to write samples to the audio hardware.&lt;br /&gt;All the code in the onset detection tutorial worked with PCM data encoded as  floats in the range [-1,1]. We want to emulate this here so i wrote a little method  called &lt;em&gt;AndroidAudioDevice.writeSamples( )&lt;/em&gt; which takes a float array of  mono float PCM samples and writes it to the hardware. For this the float samples  have to be converted to 16-bit signed PCM which is done in the &lt;em&gt;AudioDevice.fillBuffer()&lt;/em&gt;  method, no rocket science here. Once we have the converted PCM we simply write it  to the AudioTrack via &lt;em&gt;AudioTrack.write()&lt;/em&gt; which takes a short array (our  PCM samples), an offset into the array and the number of samples to use from the  offset on. Extremely simple, even more than the equivalent Java Sound class SourceDataLine. &lt;br /&gt;Now there’s a couple of interesting things about AudioTrack. First off, if you  don’t write to it constantly it will pause itself to not hog any further system  resources. Upon the next write it will start playback again introducing a wake up  lag. Another not so nice thing is that due to the internal buffer of AudioTrack  which has to be filled up completely before it is send to the hardware there’s noticeable  lag between the time you write your first samples and when you hear them being played  back. The minimum buffer size i get on my Milestone for the configuration is 8192,  sadly the documentation doesn’t tell wheter that’s bytes or samples. If it’s bytes  we divide that by two and then by the sampling frequency to get the total lag introduced  by the internal buffer: 8192 / 2 / 44100 = 0,092 seconds, so nearly 100ms. That’s  noticeable. In case the minimum buffer size is in samples it get’s even worse. The  lag will be 200ms in that case. So that’S what you have to expect when using this  class. Writting a software mixer based on AudioTrack is possible as long as you  don’t need low latency. Synthesizing sounds each time the screen is touched for  example is a bad idea as the lag is more than noticeable. Another property of AudioTrack  is that the &lt;em&gt;AudioTrack.write()&lt;/em&gt; method blocks. If you want to use it in  a game you should do all your audio mixing in a seperate thread. &lt;br /&gt;Still, the class is pretty niffty and it makes it easy to port all the examples  from the onset detection tutorial to Android. I tested it with the WaveDecoder class  and it worked like a charm, not eating up to much system resources while doing its  thing. Here’s the sine wave generator sample ported to android:&lt;br /&gt;&lt;div class="wp_syntax"&gt;  &lt;div class="code"&gt;   &lt;pre class="java" style="font-family: monospace;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: black; font-weight: bold;"&gt;class&lt;/span&gt; AudioTest &lt;span style="color: black; font-weight: bold;"&gt;extends&lt;/span&gt; Activity&lt;br /&gt;&lt;span style="color: #009900;"&gt;{&lt;/span&gt;     &lt;br /&gt;   @Override&lt;br /&gt;   &lt;span style="color: black; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; onCreate&lt;span style="color: #009900;"&gt;(&lt;/span&gt;Bundle savedInstanceState&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;br /&gt;   &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: black; font-weight: bold;"&gt;super&lt;/span&gt;.&lt;span style="color: #006633;"&gt;onCreate&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;savedInstanceState&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;                      &lt;br /&gt; &lt;br /&gt;      &lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Thread&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;br /&gt;      &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span style="color: black; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;         &lt;span style="color: #009900;"&gt;{&lt;/span&gt;          &lt;br /&gt;            &lt;span style="color: black; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt; frequency &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;440&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt; increment &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt;&lt;span style="color: #009900;"&gt;)(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color: #339933;"&gt;*&lt;/span&gt;&lt;span style="color: #003399;"&gt;Math&lt;/span&gt;.&lt;span style="color: #006633;"&gt;PI&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;*&lt;/span&gt; frequency &lt;span style="color: #339933;"&gt;/&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;44100&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;// angular increment for each sample&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt; angle &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;            AudioDevice device &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt; AndroidAudioDevice&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt; samples&lt;span style="color: #009900;"&gt;[]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1024&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;            &lt;span style="color: black; font-weight: bold;"&gt;while&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;               &lt;span style="color: black; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; i &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; samples.&lt;span style="color: #006633;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;               &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;                  samples&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;float&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #003399;"&gt;Math&lt;/span&gt;.&lt;span style="color: #006633;"&gt;sin&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; angle &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;                  angle &lt;span style="color: #339933;"&gt;+=&lt;/span&gt; increment&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;               device.&lt;span style="color: #006633;"&gt;writeSamples&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; samples &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #009900;"&gt;}&lt;/span&gt;         &lt;br /&gt;         &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;start&lt;/span&gt;&lt;span style="color: #009900;"&gt;()&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;You can also try to use the decoders included in the tutorial framework, however,  the pure Java MP3 decoder will be to slow. Only the WaveDecoder works acceptably.  When i’m done porting all decoders to C++ i might put out a small Android audio  library so you can benefit from that a bit. Now go out and play :) &lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=228" target="_blank"&gt; apistudios&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/369154383558266271-7999067897430461245?l=mobiledeviceprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobiledeviceprogramming.blogspot.com/feeds/7999067897430461245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/10/fun-with-android-audiotrack_18.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/7999067897430461245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/369154383558266271/posts/default/7999067897430461245'/><link rel='alternate' type='text/html' href='http://mobiledeviceprogramming.blogspot.com/2010/10/fun-with-android-audiotrack_18.html' title='Fun with Android AudioTrack'/><author><name>virtue</name><uri>http://www.blogger.com/profile/05516052908690533503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-369154383558266271.post-3275973974521461354</id><published>2010-10-18T17:52:00.001-07:00</published><updated>2010-10-18T17:52:39.984-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>How to compile ffmpeg on Android</title><content type='html'>Create a new project, make jni folder, then download and extract ffmpeg, rename ffmpeg folder to ffmpeg.&lt;br /&gt;&lt;br /&gt;Make a new config.sh in ffmpeg, notice a bout&amp;nbsp;PREBUILT path and&amp;nbsp;PLATFORM:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;#&lt;/span&gt;!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PREBUILT=/home/abitno/Android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0&lt;br /&gt;PLATFORM=/home/abitno/Android/android-ndk-r4/build/platforms/android-8/arch-arm&lt;br /&gt;&lt;br /&gt;./configure --target-os=linux &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --arch=arm &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --enable-version3 &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --enable-gpl &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --enable-nonfree &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-stripping &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-ffmpeg &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-ffplay &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-ffserver &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-ffprobe &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-encoders &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-muxers &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-devices &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-protocols &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --enable-protocol=file &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --enable-avfilter &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-network &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-mpegaudio-hp &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-avdevice &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --enable-cross-compile &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --cc=&lt;span class="Variable" style="background-color: transparent; border-width: 0px; color: #7587a6; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Variable" style="background-color: transparent; border-width: 0px; color: #7587a6; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$&lt;/span&gt;PREBUILT&lt;/span&gt;/bin/arm-eabi-gcc &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --cross-prefix=&lt;span class="Variable" style="background-color: transparent; border-width: 0px; color: #7587a6; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Variable" style="background-color: transparent; border-width: 0px; color: #7587a6; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$&lt;/span&gt;PREBUILT&lt;/span&gt;/bin/arm-eabi- &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --nm=&lt;span class="Variable" style="background-color: transparent; border-width: 0px; color: #7587a6; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Variable" style="background-color: transparent; border-width: 0px; color: #7587a6; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$&lt;/span&gt;PREBUILT&lt;/span&gt;/bin/arm-eabi-nm &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --extra-cflags=&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;"&lt;/span&gt;-fPIC -DANDROID&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --disable-asm &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --enable-neon &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --enable-armv5te &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; --extra-ldflags=&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;"&lt;/span&gt;-Wl,-T,&lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$&lt;/span&gt;PREBUILT&lt;/span&gt;/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=&lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$&lt;/span&gt;PLATFORM&lt;/span&gt;/usr/lib -L&lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$&lt;/span&gt;PLATFORM&lt;/span&gt;/usr/lib -nostdlib &lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$&lt;/span&gt;PREBUILT&lt;/span&gt;/lib/gcc/arm-eabi/4.4.0/crtbegin.o &lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="StringVariable" style="background-color: transparent; border-width: 0px; color: #8a9a95; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$&lt;/span&gt;PREBUILT&lt;/span&gt;/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Then change mode config.sh and run&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;chmod +x config.sh&lt;br /&gt;./config.sh&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When config is completed, open config.h, find:&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;#&lt;/span&gt;define restrict restrict&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;replace by&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;#&lt;/span&gt;define restrict&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Open&amp;nbsp;libavutil/libm.h, remove static keyword in all function declaration.&lt;br /&gt;Open Makefile in&amp;nbsp;libavcodec, libavfilter, libavformat, libavutil, libpostproc and libswscale and remove two lines:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;SUBDIR&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;../subdir.mak&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;SUBDIR&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;../config.mak&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;add new av.mk file in ffmpeg folder:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;#&lt;/span&gt; LOCAL_PATH is one of libavutil, libavcodec, libavformat, or libswscale&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;#&lt;/span&gt;include $(LOCAL_PATH)/../config-$(TARGET_ARCH).mak&lt;/span&gt;&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;LOCAL_PATH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;/../config.mak&lt;br /&gt;&lt;br /&gt;OBJS :=&lt;br /&gt;OBJS-yes :=&lt;br /&gt;MMX-OBJS-yes :=&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;LOCAL_PATH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;/Makefile&lt;br /&gt;&lt;br /&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="Comment" style="background-color: transparent; border-width: 0px; color: #5f5a60; font-size: 12px; font-style: italic; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;#&lt;/span&gt; collect objects&lt;/span&gt;&lt;br /&gt;OBJS-&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;HAVE_MMX&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt; += &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;MMX-OBJS-yes&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;OBJS += &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;OBJS-yes&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;FFNAME := lib&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;NAME&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;FFLIBS := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;foreach,NAME,&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;FFLIBS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;,lib&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;NAME&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;FFCFLAGS  = -DHAVE_AV_CONFIG_H -Wno-sign-compare -Wno-switch -Wno-pointer-sign&lt;br /&gt;FFCFLAGS += -DTARGET_CONFIG=&lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\"&lt;/span&gt;config-&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;TARGET_ARCH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;.h&lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ALL_S_FILES := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;wildcard &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;LOCAL_PATH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;/&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;TARGET_ARCH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;/*.S&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;ALL_S_FILES := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;addprefix &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;TARGET_ARCH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;/, &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;notdir &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;ALL_S_FILES&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ifneq (&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;ALL_S_FILES&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;,)&lt;br /&gt;ALL_S_OBJS := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;patsubst %.S,%.o,&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;ALL_S_FILES&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;C_OBJS := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;filter-out &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;ALL_S_OBJS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;,&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;OBJS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;S_OBJS := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;filter &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;ALL_S_OBJS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;,&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;OBJS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Keyword" style="background-color: transparent; border-width: 0px; color: #cda869; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;else&lt;/span&gt;&lt;br /&gt;C_OBJS := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;OBJS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;S_OBJS :=&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;C_FILES := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;patsubst %.o,%.c,&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;C_OBJS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;S_FILES := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;patsubst %.o,%.S,&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;S_OBJS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;FFFILES := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;sort &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;S_FILES&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;sort &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;C_FILES&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Create Android.mk in jni folder:&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;all-subdir-makefiles&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Create Android.mk in ffmpeg folder:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;LOCAL_PATH := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;call my-dir&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;CLEAR_VARS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale&lt;br /&gt;LOCAL_MODULE := ffmpeg&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;BUILD_SHARED_LIBRARY&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;call all-makefiles-under,&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;LOCAL_PATH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;libavformat/Android.mk&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;&lt;span style="line-height: 18px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;LOCAL_PATH := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;call my-dir&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;CLEAR_VARS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;LOCAL_PATH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;/../av.mk&lt;br /&gt;LOCAL_SRC_FILES := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;FFFILES&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;LOCAL_C_INCLUDES :=  &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;LOCAL_PATH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;  &lt;span class="Constant" style="background-color: transparent; border-width: 0px; color: #cf6a4c; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;\&lt;/span&gt;&lt;br /&gt; &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;LOCAL_PATH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;/..&lt;br /&gt;LOCAL_CFLAGS += &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;FFCFLAGS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;LOCAL_CFLAGS += -include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;"&lt;/span&gt;string.h&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;"&lt;/span&gt;&lt;/span&gt; -Dipv6mr_interface=ipv6mr_ifindex&lt;br /&gt;LOCAL_LDLIBS := -lz&lt;br /&gt;LOCAL_STATIC_LIBRARIES := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;FFLIBS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;LOCAL_MODULE := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;FFNAME&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;BUILD_STATIC_LIBRARY&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;libavcodec/Android.mk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="twilight" style="background-color: #141414; border-width: 0px; color: #f8f8f8; font-family: monospace; font-size: 12px; margin: 0px; opacity: 0.88; outline-width: 0px; padding: 5px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap;"&gt;LOCAL_PATH := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;call my-dir&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;CLEAR_VARS&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;include &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;$(&lt;/span&gt;LOCAL_PATH&lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/span&gt;/../av.mk&lt;br /&gt;LOCAL_SRC_FILES := &lt;span class="String" style="background-color: transparent; border-width: 0px; color: #8f9d6a; font-size: 12px; margin: 0px; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;span class="String" style=
