0

Code:

AssetManager am = ctx.getAssets();

        try {

            InputStream is = am.open("kalimba.mp3"); // use recorded file instead of getting file from assets folder.

            int length = is.available();
            Log.v("Length", ""+length);

            audio_data = new byte[length];
            int bytesRead=0;

            ByteArrayOutputStream output = new ByteArrayOutputStream();

            while (bytesRead  != length)

            {
                Log.v("BytesRead", ""+bytesRead);
                Log.v("Audio Data", ""+audio_data);
                output.write(audio_data,bytesRead,length-bytesRead);

            }

          inarry = output.toByteArray();

LogCat:

10-22 07:40:11.516: E/AndroidRuntime(3369): java.lang.OutOfMemoryError
10-22 07:40:11.516: E/AndroidRuntime(3369):     at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
10-22 07:40:11.516: E/AndroidRuntime(3369):     at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201) 
10-22 07:40:11.516: E/AndroidRuntime(3369):     at com.deepak.encydep.MainActivity.getAudioFile(MainActivity.java:149) ----> Error Line
10-22 07:40:11.516: E/AndroidRuntime(3369):     at com.deepak.encydep.MainActivity$1.onClick(MainActivity.java:56)
10-22 07:40:11.516: E/AndroidRuntime(3369):     at android.view.View.performClick(View.java:4240)
10-22 07:40:11.516: E/AndroidRuntime(3369):     at android.view.View$PerformClick.run(View.java:17721)
Jitesh Dalsaniya
  • 1,917
  • 3
  • 20
  • 36
Pandiri Deepak
  • 176
  • 3
  • 15

1 Answers1

0

Looks like you are not updating your bytesRead at all, and it always stays at 0. This way your while() runns forever(in your case - until OutOfMemory)
Also I did not notice you reading any data from is(your input stream) into buffer(audio_data)

Vladyslav Matviienko
  • 10,610
  • 4
  • 33
  • 52