簡體   English   中英

如何在Android的鋼琴鍵盤中管理媒體播放器?

[英]How to manage media player into a piano keyboard in Android ?

我正在嘗試制作一個小型鋼琴鍵盤,但在媒體播放器的管理和按鈕觸摸方面發現了一些問題。 這是我到目前為止編寫的代碼:

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
public class KeyboardPianoActivity extends Activity {

Button dooT,reT,miT,faT,solT,laT,siT,doodT,redT,fadT,soldT,ladT,doo1T,re1T,mi1T,fa1T,sol1T,la1T,si1T,doo1dT,re1dT,fa1dT,sol1dT,la1dT,doo2T;

MediaPlayer m1; 
MediaPlayer m2;
MediaPlayer m3;
MediaPlayer m4;
MediaPlayer m5; 
MediaPlayer m6; 
MediaPlayer m7,m8,m9,m10,m11,m12;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);

dooT = (Button) findViewById(R.id.button1);
reT = (Button) findViewById(R.id.button2);
miT = (Button) findViewById(R.id.button3);
faT = (Button) findViewById(R.id.button4);
solT = (Button) findViewById(R.id.button5);
laT = (Button) findViewById(R.id.button6);
siT = (Button) findViewById(R.id.button7);


m1 = MediaPlayer.create(getBaseContext(), R.raw.do1);
m2 = MediaPlayer.create(getBaseContext(), R.raw.re);
m3 = MediaPlayer.create(getBaseContext(), R.raw.mi);
m4 = MediaPlayer.create(getBaseContext(), R.raw.fa);
m5 = MediaPlayer.create(getBaseContext(), R.raw.sol);
m6 = MediaPlayer.create(getBaseContext(), R.raw.la);
m7 = MediaPlayer.create(getBaseContext(), R.raw.si);



dooT.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {

m1.start();
}
});

reT.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {

m2.start();
}
});

miT.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {

m3.start();
}
});

faT.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {

m4.start();
}
});

solT.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {

m5.start();
}
}); 
}
}

這是LogCat:

E/AndroidRuntime(29177): FATAL EXCEPTION: main
E/AndroidRuntime(29177): java.lang.NullPointerException
E/AndroidRuntime(29177): at      it.bisemanuDEV.piano.KeyboardPianoActivity$1.onClick(KeyboardPianoActivity.java:71)
E/AndroidRuntime(29177):    at android.view.View.performClick(View.java:2408)
E/AndroidRuntime(29177):    at android.view.View$PerformClick.run(View.java:8819)
E/AndroidRuntime(29177):    at android.os.Handler.handleCallback(Handler.java:603)
E/AndroidRuntime(29177):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(29177):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(29177):    at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(29177):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(29177):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(29177):    at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)    
E/AndroidRuntime(29177):    at     com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(29177):    at dalvik.system.NativeStart.main(Native Method)

我仍然是使用Android進行編程的初學者,我想適當地管理按鈕和媒體播放器的行為,以模擬鋼琴鍵盤的操作。 希望您能提供一些建議。 謝謝

請勿使用getBaseContext()創建MediaPlayer對象,而應使用getApplicationContext()this ,這取決於其持久性。 有關更多信息,請參見此答案

對於這樣的應用程序,您不想使用MediaPlayer來完成所有工作。 SoundPool專為需要短音效的此類項目而設計。 運行這么多MediaPlayer實例將非常慢。

http://developer.android.com/reference/android/media/SoundPool.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM