Android: Fusionar / concatenar dos archivos de audio cuelga la aplicación

Estoy agregando dos archivos de audio usando mp4parser. La adición se hace pero es muy lenta no sé cuál es el problema.

En este depurador de línea pegado para archivos de audio grandes por ejemplo aproximadamente 30 minutos archivo de audio.

Container out = new DefaultMp4Builder (). Build (resultado);

Aquí está el código.

Movie[] inMovies = null; inMovies = new Movie[]{ MovieCreator.build(fileOne), MovieCreator.build(fileTwo)}; List<Track> audioTracks = new LinkedList<Track>(); for (Movie m : inMovies) { for (Track t : m.getTracks()) { if (t.getHandler().equals("soun")) { audioTracks.add(t); } } } Movie result = new Movie(); if (audioTracks.size() > 0) { result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); } Container out = new DefaultMp4Builder().build(result); String fileName = getFilename(); FileChannel fc = new RandomAccessFile(String.format(fileName), "rw").getChannel(); out.writeContainer(fc); fc.close(); 

Manifestfile

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ehrlite" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:allowBackup="true" android:icon="@drawable/ehr_icon" android:label="@string/app_name" android:name="com.webservice.myApplication" android:theme="@style/AppTheme" > <activity android:name="com.ehrlite.LoginActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="stateVisible|adjustResize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.ehrlite.MasterActivity" android:screenOrientation="portrait"> </activity> <activity android:name="com.ehrlite.MainActivity" android:screenOrientation="portrait" > </activity> <activity android:name="com.ehrlite.PrevMemo" android:screenOrientation="portrait"> </activity> <activity android:name="com.webviewcall.WebViewActivity" android:screenOrientation="portrait"> </activity>`enter code here` <activity android:name="com.ehrlite.TranscribedActivity" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" android:windowSoftInputMode="adjustPan"> </activity> </application> </manifest> 

¿Puede alguien ayudarme a mejorar el rendimiento, gracias de antemano.

Encontré la solución para su respuesta. Me enfrenté problema anteriormente. Está utilizando RandomAccessfile . Necesitas usar FileOutputStream

 Container out = new DefaultMp4Builder().build(result); String outputFilePath = getfilename(); FileOutputStream fos = new FileOutputStream(new File(outputFilePath)); out.writeContainer(fos.getChannel()); fos.close(); 

Referencia:

¿Por qué java RandomAccessFile mucho más lento que FileOutputStream?

  • RecyclerView calling onCreateViewHolder y onBindViewHolder para todos los elementos a la vez
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.