任何人都可以幫助我如何通過編程將.mid
文件轉換爲.wav
或.mp3
格式的任何音頻格式。將.mid文件轉換爲任何音頻格式,如android中的.wav或.mp3文件?
回答
我認爲有可能使用AudioRecorder直接從MediaPlayer錄製,將Mediaplayer設置爲錄音機的音源,但似乎有no way這樣做。所以,我認爲兩種真正不乾淨的方式:大多數設備都有3.5mm插孔,3個通道,2個用於立體聲輸出,1個用於麥克風輸入。您需要的是一根分離三個信號的電纜,以便您可以通過短路將立體聲輸出連接到輸入,並從麥克風輸入錄製MIDI。我用它將音頻流源傳遞給手機,詳述它,然後將其發送給第三個設備。我所說的導線與帶有立體聲音頻+視頻的RCA連接器非常相似,我知道這聽起來很瘋狂,但這取決於你在做什麼。如果你不需要在實際演奏時記錄midi,你可以閱讀midi文件,然後自己合成聲音。這非常困難,特別是當需要處理不同樂器(琴絃,鼓等)的聲音時,使用樣品可能會減少工作。
我知道這不是預期的答案,但它總比沒有好,如果你非常渴望嘗試這些方法之一,我可以提供一些示例代碼和鏈接。
編輯:
好的,這是瘋了。我發現另一種方式,使用Visualizer類。可視化器的目的不是讓PCM來記錄它,但(令人驚訝地)可視化聲波,所以可能存在一些質量問題。但是,您可以將PCM保存爲波形格式,爲此,您必須向原始PCM陣列添加一個標頭。對於波形文件格式,請看看here。這裏有一個例子,它只是顯示了TextPlayer中MediaPlayer的字節數組,但它似乎工作...!
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 2013-02-22 04:40:17
@sandeep編輯...! – lelloman 2013-02-22 14:24:24
嗨,我將該pcm(字節數據)轉換爲wav格式,但輸出不完美。當我們播放它時,它會給出模糊聲音和一些midi文件的音樂。感謝... – sandeep 2013-02-27 09:53:19
- 1. 將wav音頻文件轉換爲DSS音頻格式
- 2. 記錄音頻文件爲MP3或WAV
- 3. Android:如何使用Java將MP4A音頻轉換爲MP3或Wav
- 4. 如何將3gpp格式的音頻文件轉換爲Android中的mp3
- 5. 如何將音頻文件.wav或語音識別轉換爲文本,Android Studio
- 6. 轉換任何音頻格式爲MP3
- 7. 將WasapiLoopbackCapture wav音頻流轉換爲MP3文件
- 8. 如何將MID文件轉換爲wav文件?
- 9. 如何將任何音頻文件轉換爲MP3在軌?
- 10. 將WMA音頻文件轉換爲MP3音頻文件
- 11. 將音頻文件轉換爲mp3
- 12. 將spx音頻文件轉換爲mp3
- 13. 使用C#將音頻文件轉換爲MP3格式
- 14. 如何將任何mp3文件轉換爲.wav 16khz mono 16bit
- 15. 讀取二進制數據並將其轉換爲.wav或mp3音頻文件
- 16. PHP - 將.wav文件轉換爲.mp3?
- 17. 將.wav文件轉換爲.mp3
- 18. 將文本轉換爲音頻文件,例如java中的.wav或.au
- 19. 如何將音頻流轉換爲.wav文件並保存
- 20. 如何將音頻數據數組轉換爲wav文件?
- 21. 如何將WAV音頻文件轉換爲Core Audio播放?
- 22. 音頻文件的每個幀的音頻頻率,如.mp3 .wav
- 23. 如何將所有視頻格式的文件轉換爲Android中所有音頻格式的文件
- 24. 如何在android webview中播放wav格式的音頻文件?
- 25. 將wav文件轉換爲wav文件
- 26. 用python轉換任何音頻文件爲mp3
- 27. 如何將base64字符串轉換爲音頻mp3文件?
- 28. 如何將Mp3轉換爲Java中的Amr音頻格式
- 29. 使用SAPI將音頻(wav文件)轉換爲文本?
- 30. 什麼是將mp3文件轉換爲wav文件的算法?
沒有你已經嘗試過的媒體播放器類?它可以播放MIDI文件,也許你可以攔截輸出緩衝區並將其存儲爲波形。 – lelloman 2013-02-18 10:16:31
是的,我用它來播放MIDI文件,但我不知道如何保存它?你有什麼主意嗎? – sandeep 2013-02-19 05:59:41
你可以發佈你寫的演奏MIDI的代碼嗎? – lelloman 2013-02-19 23:41:00