2013-02-18 85 views
6

Bất kỳ ai cũng có thể giúp tôi cách chuyển đổi các tệp .mid sang bất kỳ định dạng âm thanh nào theo định dạng .wav hoặc .mp3 theo cách lập trình.Chuyển đổi tệp .mid sang bất kỳ định dạng âm thanh nào dưới dạng tệp .wav hoặc .mp3 trong android?

+0

đã làm bạn đã thử các lớp MediaPlayer? nó có thể chơi các tập tin midi, có thể bạn có thể chặn bộ đệm đầu ra và lưu nó dưới dạng sóng. – lelloman

+0

Có, tôi đã sử dụng nó để phát tệp midi nhưng tôi không biết cách lưu nó? bạn còn ý kiến ​​nào không? – sandeep

+0

bạn có thể đăng đoạn mã bạn viết để chơi midi không? – lelloman

Trả lời

5

Tôi nghĩ rằng có thể sử dụng AudioRecorder để ghi trực tiếp từ MediaPlayer, đặt Mediaplayer làm nguồn âm thanh của máy ghi âm, nhưng có vẻ như có no way để thực hiện điều đó. Vì vậy, tôi nghĩ hai cách thực sự không sạch sẽ:

1- Hầu hết các thiết bị đều có giắc cắm 3,5 mm với 3 kênh, 2 cho đầu ra âm thanh nổi và một cho đầu vào micrô. Những gì bạn cần, là một cáp chia ba tín hiệu để bạn có thể kết nối đầu ra âm thanh stereo với đầu vào, trong một loại ngắn mạch và ghi lại midi từ đầu vào micrô. Tôi đã sử dụng nó để chuyển nguồn âm thanh vào điện thoại, xây dựng nó và sau đó gửi nó đến một thiết bị thứ ba. Dây tôi đang nói về là rất giống với kết nối RCA với âm thanh stereo + video, tôi biết nó âm thanh điên, nhưng nó phụ thuộc vào những gì bạn đang làm.

2- Giả sử bạn không cần ghi âm midi khi đang chơi nó, bạn có thể đọc tập tin midi và sau đó tổng hợp âm thanh cho chính mình. Điều này thực sự khó khăn, đặc biệt khi phải đối phó với âm thanh của các nhạc cụ khác nhau (dây, trống, vv), sử dụng mẫu có thể làm giảm công việc, có thể.

Tôi biết đây không phải là câu trả lời mong đợi nhưng tốt hơn là không có gì, nếu bạn quá tuyệt vọng để thử một trong những phương pháp này tôi có thể cung cấp một số mã mẫu và liên kết.

EDIT:

ok, điều đó thật điên rồ. Tôi đã tìm thấy một cách khác, sử dụng lớp học Visualizer. Mục đích của visualizer không phải là để có được PCM để ghi lại nó, nhưng (đáng ngạc nhiên) để hình dung sóng âm thanh, do đó, có thể có một số vấn đề chất lượng. Tuy nhiên, bạn có thể lưu định dạng PCM thành dạng sóng, để thực hiện, bạn phải thêm tiêu đề vào mảng PCM thô. Đối với định dạng tệp sóng, hãy xem here. Dưới đây là một ví dụ, nó chỉ cho thấy mảng byte nhận được từ MediaPlayer trong một TextView, nhưng có vẻ như nó hoạt động ...!

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

Xin chào, cảm ơn bạn đã trả lời một lần nữa.Chúng tôi có thể lưu đầu ra từ micrô nhưng không tốt để lưu trữ âm thanh từ mic vì trước hết nó sẽ thêm âm thanh mờ và thứ hai là, nếu chúng tôi nói điều gì đó khi chúng tôi đang lưu âm thanh từ micrô thì giọng nói của chúng tôi sẽ cũng hợp nhất với nó .. vì vậy tôi không sử dụng mic để lưu đầu ra. Cảm ơn rất nhiều lần nữa .. nếu bạn có bất cứ gợi ý nào, xin hãy giúp .. – sandeep

+0

@sandeep edit ...! – lelloman

+0

Xin chào, tôi chuyển đổi pcm (byte dữ liệu) thành định dạng wav nhưng đầu ra không hoàn hảo.Đó là tạo ra âm thanh mờ và một số âm nhạc của tập tin midi khi chúng tôi chơi nó.Thanks ... – sandeep

Các vấn đề liên quan