¿Convertir el archivo .mid a cualquier formato de audio como .wav o .mp3 en android?

¿Puede alguien ayudarme a convertir archivos .mid en cualquier formato de audio como formato .wav o .mp3 por programación.

Pensé que era posible utilizar un AudioRecorder para grabar directamente desde un MediaPlayer, la configuración de Mediaplayer como audiosource de la grabadora, pero parece que no hay manera de hacer eso. Por lo tanto, pensé dos formas realmente-no-limpias:

1- La mayoría de los dispositivos tienen un enchufe de 3,5 mm con 3 canales, 2 para salida estéreo y uno para entrada de micrófono. Lo que usted necesita, es un cable que divide las tres señales para que pueda conectar la salida estéreo a la entrada, en una especie de cortocircuito, y grabar el midi desde la entrada del micrófono. Lo usé para pasar una fuente de flujo de audio al teléfono, elaborarlo y luego enviarlo a un tercer dispositivo. El cable que estoy hablando es muy similar a los conectores RCA con audio estéreo + video, sé que suena loco, pero depende de lo que estás haciendo.

2- Suponiendo que no necesita grabar el midi mientras lo está reproduciendo, puede leer el archivo midi y luego sintetizar el sonido usted mismo. Esto es realmente difícil, especialmente cuando tienen que lidiar con sonidos de diferentes instrumentos (cuerdas, tambores, etc), utilizando muestras podría reducir el trabajo, tal vez.

Sé que esta no es la respuesta esperada, pero es mejor que nada, si usted está tan desesperado para probar uno de estos método que puedo proporcionar algunos código de ejemplo y enlaces.

EDITAR:

Ok, eso estaba loco. Encontré otra forma, usar la clase Visualizer . El propósito del visualizador no es obtener PCM para grabarlo, sino (sorprendentemente) visualizar la onda sonora, por lo que puede haber algunos problemas de calidad. Sin embargo, puede guardar PCM en formato de onda, para hacerlo, tiene que agregar un encabezado a la matriz de PCM sin procesar. Para el formato de archivo de onda, eche un vistazo aquí . Aquí un ejemplo, sólo muestra la matriz de bytes de MediaPlayer en un TextView, pero parece que funciona …!

 android.permission.RECORD_AUDIO android.permission.MODIFY_AUDIO_SETTINGS 

Activity_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Play" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pause" /> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ScrollView> 

MainActivity.java

 package com.example.midify; import java.util.Arrays; import android.media.MediaPlayer; import android.media.audiofx.Visualizer; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { MediaPlayer mp; TextView tv; Visualizer mVisualizer; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { tv.setText((String) msg.obj); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mp = MediaPlayer.create(this, R.raw.midi); Button btn = (Button) findViewById(R.id.btn); Button btn2 = (Button) findViewById(R.id.btn2); tv = (TextView) findViewById(R.id.textview); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (!mp.isPlaying()) { mp.start(); init_visualizer(); } } }); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (mp.isPlaying()) { mp.pause(); mVisualizer.release(); } } }); } @Override public void finish() { mp.release(); mVisualizer.release(); super.finish(); } private void PassData(byte[] data) { String txt = Arrays.toString(data); Message msg = handler.obtainMessage(); msg.obj = txt; handler.sendMessage(msg); } public void init_visualizer() { mVisualizer = new Visualizer(mp.getAudioSessionId()); mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() { @Override public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) { PassData(bytes); } @Override public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) { } }; mVisualizer.setDataCaptureListener(captureListener, Visualizer.getMaxCaptureRate(), true, false); mVisualizer.setEnabled(true); mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { mVisualizer.setEnabled(false); } }); } } 
  • Biblioteca Midi para Android
  • Mejorando el sonido del sintetizador MIDI en Android / Cargando fuentes de sonido
  • Conversión de archivos MIDI a audio sin procesar utilizando un sintetizador de software
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.