2013-02-18 50 views
6

क्या कोई मुझे .mid फ़ाइलों को .wav या .mp3 प्रोग्रामेटिक रूप से प्रारूप के रूप में किसी भी ऑडियो प्रारूप में परिवर्तित करने में मदद कर सकता है।एंड्रॉइड में .wav या .mp3 फ़ाइल के रूप में किसी भी ऑडियो प्रारूप में .mid फ़ाइल कनवर्ट करें?

+0

आप पहले से ही मीडियाप्लेयर वर्ग की कोशिश की थी? यह midi फ़ाइलों को चला सकता है, शायद आप आउटपुट बफर को रोक सकते हैं और इसे एक लहर के रूप में स्टोर कर सकते हैं। – lelloman

+0

हां मैंने इसे मिडी फ़ाइल खेलने के लिए इस्तेमाल किया लेकिन मुझे नहीं पता कि इसे कैसे सहेजना है? क्या तुम्हारे पास कोई विचार है? – sandeep

+0

क्या आप मिडी खेलने के लिए लिखे गए कोड को पोस्ट कर सकते हैं? – lelloman

उत्तर

5

मैंने सोचा था कि मीडिया प्लेयर से सीधे रिकॉर्ड करने के लिए ऑडियो रिकॉर्डर का उपयोग करना संभव था, मेडिप्लेयर को रिकॉर्डर के ऑडिओसोर्स के रूप में सेट करना, लेकिन ऐसा लगता है कि ऐसा करने के लिए no way है। तो, मैंने सोचा कि दो वास्तव में साफ-सुथरे तरीके नहीं हैं:

1- अधिकांश उपकरणों में 3.5 चैनल जैक सॉकेट मिला है जिसमें 3 चैनल, स्टीरियो आउटपुट के लिए 2 और माइक्रोफोन इनपुट के लिए एक है। आपको जो चाहिए वह एक केबल है जो तीन संकेतों को विभाजित करती है ताकि आप स्टीरियो आउटपुट को इनपुट में शॉर्ट सर्किट में जोड़ सकें, और माइक्रोफ़ोन इनपुट से मिडी रिकॉर्ड कर सकें। मैंने इसे फोन पर ऑडियो स्ट्रीम स्रोत पास करने के लिए उपयोग किया, इसे विस्तृत करें और फिर इसे तीसरे डिवाइस पर भेजें। जिस तार के बारे में मैं बात कर रहा हूं वह स्टीरियो ऑडियो + वीडियो के साथ आरसीए कनेक्टर के समान है, मुझे पता है कि यह पागल लगता है, लेकिन यह आपके काम पर निर्भर करता है।

2- मान लीजिए कि वास्तव में इसे खेलने के दौरान आपको मिडी रिकॉर्ड करने की आवश्यकता नहीं है, तो आप मिडी फ़ाइल को पढ़ सकते हैं और फिर ध्वनि को संश्लेषित कर सकते हैं। यह वास्तव में कठिन है, विशेष रूप से जब विभिन्न उपकरणों (तार, ड्रम इत्यादि) की आवाजों से निपटना होता है, नमूने का उपयोग करके, काम को कम कर सकता है।

मुझे पता है कि यह अपेक्षित उत्तर नहीं है लेकिन यह कुछ भी बेहतर नहीं है, अगर आप इन तरीकों में से किसी एक को आजमाने के लिए बहुत हताश हैं तो मैं कुछ नमूना कोड और लिंक प्रदान कर सकता हूं।

संपादित करें:

ठीक है, वह पागल था। मुझे एक और तरीका मिला, Visualizer कक्षा का उपयोग करें। विजुअलाइज़र का उद्देश्य PCM को रिकॉर्ड करने के लिए नहीं है, लेकिन (आश्चर्यजनक रूप से) ध्वनि तरंग को देखने के लिए, इसलिए कुछ गुणवत्ता के मुद्दे हो सकते हैं। हालांकि आप इसे करने के लिए पीसीएम को तरंग प्रारूप में सहेज सकते हैं, आपको कच्चे पीसीएम सरणी में हेडर जोड़ना होगा। लहर फ़ाइल प्रारूप के लिए here देखें। यहां एक उदाहरण है, यह केवल टेक्स्टप्व में मीडियाप्लेयर से प्राप्त बाइट सरणी दिखाता है, लेकिन ऐसा लगता है ...!

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

हाय, फिर से जवाब देने के लिए धन्यवाद।हम माइक्रोफ़ोन से आउटपुट को सहेज सकते हैं लेकिन ध्वनि को माइक्रो से स्टोर करना अच्छा नहीं है क्योंकि सबसे पहले यह इसमें कुछ धुंधला आवाज जोड़ देगा और दूसरा यह है कि अगर हम माइक्रोफोन से ध्वनि सहेज रहे हैं तो हम कुछ बात कर रहे थे तो हमारी आवाज इसके साथ विलय भी करें .. इसलिए मैं आउटपुट को बचाने के लिए माइक का उपयोग नहीं कर रहा हूं। बहुत बहुत धन्यवाद .. अगर आपके पास कोई सुझाव है तो कृपया मदद करें .. – sandeep

+0

@ संदीप संपादित करें ...! – lelloman

+0

नमस्ते, मैं उस पीसीएम (बाइट डेटा) को प्रारूप प्रारूप में परिवर्तित करता हूं लेकिन आउटपुट सही नहीं है। यह धुंधला आवाज और मिडी फ़ाइल के कुछ संगीत को जब हम इसे खेलते हैं तो दे रहा है। धन्यवाद ... – sandeep

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^