¿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.
- Implementar MIDI con Delphi en Android
- Reproducción de multiplataforma, móvil, MIDI en Python para Kivy - ¿es esto posible?
- ¿Es baja latencia de OSC / Midi (sin audio) posible en Android?
- Cómo mezclar archivos de audio y música del archivo midi en Android?
- Cómo jugar notas individuales de archivo midi en LibGDX?
- Reproducir notas Midi (no archivos) en android
- Una sencilla implementación MIDI gratuita en Java además de javax.sound.midi: ¿Hay alguna?
- Generación dinámica de Midi y reproducción en Android: ¿Posible?
- ¿Puede AudioTrack Android reproducir archivos MIDI?
- Uso de Fluidsynth para reproducir notas de SoundFonts en Android
- Enviar mensajes MIDI por USB en Android
- Android 6.0 (Marshmallow): Cómo jugar notas de midi?
- Android: Cargando archivos MIDI personalizados de DLS en Sonivox EAS
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); } }); } }
- ¿Definir un estilo de pintura, color, etc en XML?
- Android: Cómo actualizar los nuevos niveles de API en Eclipse