2013-02-18 23 views
6

Herkes, .mid dosyalarını, program aracılığıyla bir ses biçiminde .wav veya .mp3 biçimine dönüştürmeme yardımcı olabilir..mid dosyasını .wav veya android olarak .mp3 dosyası olarak herhangi bir ses biçimine dönüştürün mü?

+0

Zaten mediaplayer sınıfını denedi mi? midi dosyalarını çalabilir, belki de çıktı arabelleğini kesip bir dalga olarak saklayabilirsiniz. – lelloman

+0

Evet, midi dosyasını oynatmak için kullandım ama nasıl kaydedeceğimi bilmiyorum? herhangi bir fikrin var mı? Midi oynamak için yazdığınız kodu – sandeep

+0

gönderebilir misiniz? – lelloman

cevap

5

Doğrudan bir MediaPlayer cihazından kayıt yapmak, Mediaplayer'ı kaydedicinin ses kaynağı olarak ayarlamak için bir AudioRecorder kullanmak mümkün olduğunu düşündüm, ancak bunun yapılması için no way görünüyor. Bu yüzden, iki gerçekten temiz olmayan yol olduğunu düşündüm:

1- Cihazların çoğunda 3 kanallı 3,5 jak giriş, stereo çıkış için 2 ve mikrofon girişi için bir tane var. İhtiyacınız olan şey, üç sinyali bölen, böylece stereo çıkışı girişe, bir tür kısa devreye bağlayabileceğiniz ve mikrofon girişinden midi kaydedebileceğiniz bir kablodur. Bir ses akışı kaynağını telefona iletmek, detaylandırmak ve üçüncü bir cihaza göndermek için kullandım. Konuştuğum tel, stereo ses + video içeren RCA konektörlerine çok benzer, kulağa çılgınca geldiğini biliyorum, ama yaptığınız şeye bağlı.

2- Aslında çalarken midi kaydetmenize gerek olmadığını varsayarak, midi dosyasını okuyabilir ve ardından sesi kendiniz sentezleyebilirsiniz. Bu gerçekten zor, özellikle farklı enstrümanların sesleri ile uğraşmak zorunda kaldığında (dizeler, davullar vb), örnekleri kullanarak işi azaltabilir, belki.

Bunun beklenen cevap olmadığını biliyorum ama hiçbir şeyden daha iyi değil, bu yöntemlerden birini denemek için çok çaresizseniz bazı örnek kodlar ve bağlantılar sağlayabiliyorum.

DÜZENLEME:

Tamam, o deliydi. Başka bir yol buldum, Visualizer sınıfını kullan. Görüntüleyicinin amacı kaydetmek için PCM almak değil, ses dalgasını görselleştirmek için (şaşırtıcı bir şekilde), bu yüzden bazı kalite sorunları olabilir. Ancak PCM'yi dalga biçimine kaydedebilirsiniz, bunu yapmak için ham PCM dizisine bir başlık eklemeniz gerekir. Dalga dosya formatı için here'a bakın. Burada bir örnek, sadece bir TextView'de MediaPlayer'dan aldığımız bayt dizisini gösteriyor, ama işe yarıyor ...!

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); 
      } 
     }); 
    } 
} 
+0

Merhaba, tekrar cevap verdiğiniz için teşekkürler.Çıktıyı mikrofondan kaydedebiliriz, ancak sesi mikrofondan saklamak iyi değildir çünkü önce bir miktar bulanıklık sesi ekleyecektir ve ikincisi, eğer sesi mikrofondan kaydederken bir şey konuşuyor olsaydık, sesimiz ayrıca onunla birleştirin ... bu yüzden çıkışı kaydetmek için mikrofon kullanmıyorum. Tekrar çok teşekkürler .. Eğer herhangi bir öneriniz varsa lütfen yardım edin .. – sandeep

+0

@sandeep edit ...! – lelloman

+0

Merhaba, ben pcm (bayt veri) wav biçimine dönüştürmek ama çıkış mükemmel değildir.O zaman biz çalma ve ses verir midi dosyası bazı müzik veriyor.Thanks ... – sandeep

İlgili konular