Access to opencore audio decoders from application layer.

by sandy8531 » Thu, 16 Jul 2009 07:24:44 GMT


Sponsored Links
 My application needs to extract a 10 second portion of a audio file in
PCM format and store it.

On other platforms I have been doing this in Java using Jlayer
decoder, but once I ported that to Android, it ran extremely slowly.
It takes almost 50 seconds to decode a 10 second sample !

Since the opencore libraries are already available, I would like to be
to use them as an alternative. I have been looking at it for a couple
of days now. I would like to understand what options are available to
me to be able to do this.

My first approach was to develop a JNI stub and try and make a call
out to the codec in the opencore shipped library, but it appears that
those interfaces are subject to change and there is no guaranty of
backward compatibility in a future release.

The other approach I can think of is to take the opencore source and
compile the codecs into a separate standalone jni library private to
my application, and that way I avoid the backward compatibility
issue.

Before I go too far down any path I would like to run this by the
experts and figure out what is the best approach.

One more question - I saw in the opencore code that the decoding
thread is run at a higher priority. Since my decoder would be running
at normal application priority am I going to see a significant
performance drop off ala Jlayer ?

-thanks,
Sandeep



--~--~---------~--~----~------------~-------~--~----~



Access to opencore audio decoders from application layer.

by sesha giri » Thu, 16 Jul 2009 08:36:27 GMT


 Hi Sandeep,

You can put the if condition in the parser to read only till 10 sec
and take the PCM samples from decoder output to a file

-Giri




________________________________
From: sandy8531 <mathur...@gmail.com>
To: android-framework <android-framework@googlegroups.com>
Sent: Thursday, 16 July, 2009 12:46:10 PM
Subject: Access to opencore audio decoders from application layer.


My application needs to extract a 10 second portion of a audio file in
PCM format and store it.

On other platforms I have been doing this in Java using Jlayer
decoder, but once I ported that to Android, it ran extremely slowly.
It takes almost 50 seconds to decode a 10 second sample !

Since the opencore libraries are already available, I would like to be
to use them as an alternative. I have been looking at it for a couple
of days now. I would like to understand what options are available to
me to be able to do this.

My first approach was to develop a JNI stub and try and make a call
out to the codec in the opencore shipped library, but it appears that
those interfaces are subject to change and there is no guaranty of
backward compatibility in a future release.

The other approach I can think of is to take the opencore source and
compile the codecs into a separate standalone jni library private to
my application, and that way I avoid the backward compatibility
issue.

Before I go too far down any path I would like to run this by the
experts and figure out what is the best approach.

One more question - I saw in the opencore code that the decoding
thread is run at a higher priority. Since my decoder would be running
at normal application priority am I going to see a significant
performance drop off ala Jlayer ?

-thanks,
Sandeep





      See the Web&#39;s breaking stories, chosen by people like you. Check out 
Yahoo! Buzz.  http://in.buzz.yahoo.com/ 
--~--~---------~--~----~------------~-------~--~----~


Sponsored Links


Access to opencore audio decoders from application layer.

by Jean-Baptiste Queru » Thu, 16 Jul 2009 12:26:33 GMT


 Can you be more precise about what your application does? On quite a
few devices (and especially on the Dream/G1) Android fits tightly with
little room to spare, so it's unclear that we'd be accepting
contributions for entirely new applications.

JBQ






-- 
Jean-Baptiste M. "JBQ" Queru
Android Engineer, Google.

Questions sent directly to me that have no reason for being private
will likely get ignored or forwarded to a public forum with no further
warning.

--~--~---------~--~----~------------~-------~--~----~



Access to opencore audio decoders from application layer.

by Freepine » Thu, 16 Jul 2009 12:53:04 GMT


 You might want to take a look at SoundPool class and its corresponding
implementation in native layer, which could be a good reference if the class
itself doesn't satisfy your needs:)
 http://developer.android.com/reference/android/media/SoundPool.html 





--~--~---------~--~----~------------~-------~--~----~



Access to opencore audio decoders from application layer.

by sandy8531 » Thu, 16 Jul 2009 17:03:39 GMT


 Freepine,

I have looked at Soundpool, it does not solve my problem. To further
clarify, I need to implement the following (pseudo code) api for my
application. I do not need to play the sound.

public short[] getPcmData(String audioFilename, int
seekPositionInSeconds, int durationInSeconds);

Where for example:
   audioFileName = "/sdcard/somefile.mp3" ; // If I can implement this
for mp3 files only that would be a good start, but if i can also do
the same for AAC and other formats that would be great
   seekPositionInSeconds = 15 ; // The offset inside the audio file to
start decoding
   durationInSeconds = 5;           //  Number of seconds of audio
data starting at seekPosition to return the data for

What I need is a way to invoke the opencore decoder code from my
application and get the raw PCM data back.

-thanks,
Sandeep




--~--~---------~--~----~------------~-------~--~----~



Access to opencore audio decoders from application layer.

by Freepine » Fri, 17 Jul 2009 10:10:20 GMT


 andeep,
SoundPool leverages MediaPlayer service to decode the compressed audio into
a raw 16-bit PCM stream, which I thought you could refer to its
implementation.
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=media/jni/soundpool/SoundPool.cpp;h=02731825e08794a17132caed973b6f46486e632a;hb=8ecb36eec61f119f500a805b82438aadb3396a19
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=media/libmediaplayerservice/MediaPlayerService.cpp;h=8ef0dc6c42c43735d7778874f4b8cfcbc502e79b;hb=8ecb36eec61f119f500a805b82438aadb3396a19#l837

Besides, based on your requirements, I don't think it can be achieved by
calling Opencore decoder node directly. You'll need to to call the file
parser first, then feed the decoder node with parsed frames, and if you want
to support more codecs other than mp3, you'll need to call file recognizers
by yourself, too. That is going to be a lot of work:)

-Freepine

On Fri, Jul 17, 2009 at 1:03 AM, sandy8531 <mathur...@gmail.com> wrote:


--~--~---------~--~----~------------~-------~--~----~



Other Threads

1. SPP Bluetooth and interrupting a blocking read operation

Hello All,

I am currently developing an application using RfComm in Bluetooth and
have everything working except for the following.

I am wrapping the InputStream I obtain from the Bluetooth socket in a
BufferedReader and calling readLine() which blocks if there is no
data.

So far I have found no way of interrupting the readLine in a way which
leaves the Bluetooth stack in a working state.

Closing the underlying socket will interrupt the readLine() but
following this the Bluetooth adapter is not usable anymore until I
stop and start Bluetooth on the phone. This is possibly and bug.

Anyone have any ideas?

Thanks,
Serge

-- 

2. GMail Mailbox Selection Screen

In my app, I'm trying to open the Gmail account selection screen that
you see when you choose the "Accounts" option in the Gmail app.  The
same screen is displayed when you've received new email notifications
on more than one Gmail account.  Using the the logcat utilities, I've
learned the name of the Intent that is called but when I attempt to
launch that activity, I get a "Permission Denial" warning from the
ActivityManager right before my startActivity call causes an uncaught
exception force close. Following is the relevant log entry.

04-09 14:13:31.497: WARN/ActivityManager(1033): Permission Denial:
starting Intent
{ cmp=com.google.android.gm/.MailboxSelectionActivity } from
ProcessRecord{44a3feb0 1608:com.brandongoodman.gmailswitcher/10125}
(pid=1608, uid=10125) requires null

I'm guessing the issue lies in the permissions google has set on this
activity.  I see the "requires null" at the end of the warning.  Am I
correct in assuming this means there are permissions set on that
activity that I do not hold?  Is there way to determine and obtain the
required permission?

I do realize that not all builds of android have the gmail app and of
those that do, not all support multiple accounts.  I still intend to
pursue this functionality for the benefit of those that can support
it.  Thanks in advance for any insight.

-- 

3. Contacts thumbnail image location?

4. Error installing the sdk in eclipse

5. Android animation clipping when going between layouts

6. Launch timeout has expired

7. camera.setparameters are not having any effect in android 1.6 any one succeeded ????