क्या कोई मुझे .mid
फ़ाइलों को .wav
या .mp3
प्रोग्रामेटिक रूप से प्रारूप के रूप में किसी भी ऑडियो प्रारूप में परिवर्तित करने में मदद कर सकता है।एंड्रॉइड में .wav या .mp3 फ़ाइल के रूप में किसी भी ऑडियो प्रारूप में .mid फ़ाइल कनवर्ट करें?
उत्तर
मैंने सोचा था कि मीडिया प्लेयर से सीधे रिकॉर्ड करने के लिए ऑडियो रिकॉर्डर का उपयोग करना संभव था, मेडिप्लेयर को रिकॉर्डर के ऑडिओसोर्स के रूप में सेट करना, लेकिन ऐसा लगता है कि ऐसा करने के लिए 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);
}
});
}
}
हाय, फिर से जवाब देने के लिए धन्यवाद।हम माइक्रोफ़ोन से आउटपुट को सहेज सकते हैं लेकिन ध्वनि को माइक्रो से स्टोर करना अच्छा नहीं है क्योंकि सबसे पहले यह इसमें कुछ धुंधला आवाज जोड़ देगा और दूसरा यह है कि अगर हम माइक्रोफोन से ध्वनि सहेज रहे हैं तो हम कुछ बात कर रहे थे तो हमारी आवाज इसके साथ विलय भी करें .. इसलिए मैं आउटपुट को बचाने के लिए माइक का उपयोग नहीं कर रहा हूं। बहुत बहुत धन्यवाद .. अगर आपके पास कोई सुझाव है तो कृपया मदद करें .. – sandeep
@ संदीप संपादित करें ...! – lelloman
नमस्ते, मैं उस पीसीएम (बाइट डेटा) को प्रारूप प्रारूप में परिवर्तित करता हूं लेकिन आउटपुट सही नहीं है। यह धुंधला आवाज और मिडी फ़ाइल के कुछ संगीत को जब हम इसे खेलते हैं तो दे रहा है। धन्यवाद ... – sandeep
आप पहले से ही मीडियाप्लेयर वर्ग की कोशिश की थी? यह midi फ़ाइलों को चला सकता है, शायद आप आउटपुट बफर को रोक सकते हैं और इसे एक लहर के रूप में स्टोर कर सकते हैं। – lelloman
हां मैंने इसे मिडी फ़ाइल खेलने के लिए इस्तेमाल किया लेकिन मुझे नहीं पता कि इसे कैसे सहेजना है? क्या तुम्हारे पास कोई विचार है? – sandeep
क्या आप मिडी खेलने के लिए लिखे गए कोड को पोस्ट कर सकते हैं? – lelloman