Android
मीडिया प्लेयर
खोज…
वाक्य - विन्यास
- शून्य सेटऑडियोस्ट्रीम टाइप (इंट स्ट्रीमटाइप)
- शून्य सेटडॉटसोर्स (संदर्भ, उरी उरी)
- शून्य तैयारी ()
- शून्य तैयारी
- शून्य प्रारंभ ()
- शून्य रोक ()
टिप्पणियों
MediaPlayer
उपयोग मुख्य रूप से स्टेट आरेख पर आधारित है:
इसका मतलब यह है कि ऑडियो / वीडियो चलाने के लिए एक परिभाषित अनुक्रम होना चाहिए विशिष्ट क्रम है। यह भी बताता है कि किस राज्य में क्या कार्रवाई की जा सकती है ।
MediaPlayer API में लचीलापन (कस्टम डिकोडर और रेंडरिंग तर्क जोड़ने) का अभाव है और HTTP (DASH) और स्मूथस्ट्रीमिंग पर डायनामिक एडैप्टिव स्ट्रीमिंग के लिए sSupport का अभाव है। इन के लिए, ExoPlayer में देखें ।
बुनियादी निर्माण और खेल
MediaPlayer क्लास का उपयोग ऑडियो / वीडियो फ़ाइलों और स्ट्रीम के प्लेबैक को नियंत्रित करने के लिए किया जा सकता है।
MediaPlayer ऑब्जेक्ट का निर्माण तीन प्रकार के हो सकते हैं:
स्थानीय संसाधन से मीडिया
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.resource); mediaPlayer.start(); // no need to call prepare(); create() does that for you
स्थानीय URI (ContentResolver से प्राप्त) से
Uri myUri = ....; // initialize Uri here MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(getApplicationContext(), myUri); mediaPlayer.prepare(); mediaPlayer.start();
बाहरी URL से
String url = "http://........"; // your URL here MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(url); mediaPlayer.prepare(); // might take long! (for buffering, etc) mediaPlayer.start();
अतुल्यकालिक तैयारी
MediaPlayer$prepare()
एक अवरुद्ध कॉल है और निष्पादन पूरा होने तक यूआई को फ्रीज कर देगा। इस समस्या को हल करने के लिए MediaPlayer$prepareAsync()
का उपयोग किया जा सकता है।
mMediaPlayer = ... // Initialize it here
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer player) {
// Called when the MediaPlayer is ready to play
mMediaPlayer.start();
}
}); // Set callback for when prepareAsync() finishes
mMediaPlayer.prepareAsync(); // Prepare asynchronously to not block the Main Thread
तुल्यकालिक संचालन पर, त्रुटियों को सामान्य रूप से एक अपवाद या त्रुटि कोड के साथ संकेत दिया जाएगा, लेकिन जब भी आप अतुल्यकालिक संसाधनों का उपयोग करते हैं, तो आपको यह सुनिश्चित करना चाहिए कि आपके आवेदन को त्रुटियों के बारे में उचित रूप से सूचित किया गया है। MediaPlayer के लिए,
mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener(){
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// ... react appropriately ...
// The MediaPlayer has moved to the Error state, must be reset!
// Then return true if the error has been handled
}
});
सिस्टम रिंगटोन प्राप्त करना
यह उदाहरण दिखाता है कि URI का सिस्टम रिंगटोन ( RingtoneManager.TYPE_RINGTONE
) कैसे प्राप्त करें:
private List<Uri> loadLocalRingtonesUris() {
List<Uri> alarms = new ArrayList<>();
try {
RingtoneManager ringtoneMgr = new RingtoneManager(getActivity());
ringtoneMgr.setType(RingtoneManager.TYPE_RINGTONE);
Cursor alarmsCursor = ringtoneMgr.getCursor();
int alarmsCount = alarmsCursor.getCount();
if (alarmsCount == 0 && !alarmsCursor.moveToFirst()) {
alarmsCursor.close();
return null;
}
while (!alarmsCursor.isAfterLast() && alarmsCursor.moveToNext()) {
int currentPosition = alarmsCursor.getPosition();
alarms.add(ringtoneMgr.getRingtoneUri(currentPosition));
}
} catch (Exception ex) {
ex.printStackTrace();
}
return alarms;
}
सूची अनुरोधित रिंगटोन के प्रकारों पर निर्भर करती है। संभावनाएं हैं:
-
RingtoneManager.TYPE_RINGTONE
-
RingtoneManager.TYPE_NOTIFICATION
-
RingtoneManager.TYPE_ALARM
-
RingtoneManager.TYPE_ALL = TYPE_RINGTONE | TYPE_NOTIFICATION | TYPE_ALARM
आदेश के रूप में रिंगटोन प्राप्त करने के लिए android.media.Ringtone
हर Uri
द्वारा हल किया जाना चाहिए RingtoneManager
:
android.media.Ringtone osRingtone = RingtoneManager.getRingtone(context, uri);
ध्वनि चलाने के लिए, विधि का उपयोग करें:
public void setDataSource(Context context, Uri uri)
android.media.MediaPlayer
। MediaPlayer
को स्टेट डायग्राम के अनुसार आरंभ और तैयार किया जाना चाहिए
सिस्टम वॉल्यूम प्राप्त करना और सेट करना
ऑडियो स्ट्रीम प्रकार
रिंगटोन धाराओं के विभिन्न प्रोफाइल हैं। उनमें से हर एक की अलग-अलग मात्रा है।
यहां हर उदाहरण AudioManager.STREAM_RING
स्ट्रीम प्रकार के लिए लिखा गया है। हालाँकि यह एकमात्र नहीं है। उपलब्ध स्ट्रीम प्रकार हैं:
-
STREAM_ALARM
-
STREAM_DTMF
-
STREAM_MUSIC
-
STREAM_NOTIFICATION
-
STREAM_RING
-
STREAM_SYSTEM
-
STREAM_VOICE_CALL
मात्रा निर्धारित करना
विशिष्ट प्रोफ़ाइल का आयतन प्राप्त करने के लिए, कॉल करें:
AudioManager audio = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING);
यह मान बहुत कम उपयोगी है, जब स्ट्रीम के लिए अधिकतम मूल्य ज्ञात नहीं है:
AudioManager audio = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
int streamMaxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
उन दो मानों का अनुपात एक सापेक्ष मात्रा (0 <वॉल्यूम <1) देगा:
float volume = ((float) currentVolume) / streamMaxVolume
एक कदम से मात्रा का समायोजन
धारा के लिए आयतन को एक चरण से अधिक करने के लिए, कॉल करें:
AudioManager audio = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
audio.adjustStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_RAISE, 0);
धारा के लिए आयतन को एक कदम से कम करने के लिए, कॉल करें:
AudioManager audio = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
audio.adjustStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_LOWER, 0);
विशिष्ट स्ट्रीम प्रकार का उपयोग करने के लिए MediaPlayer सेट करना
ऐसा करने के लिए MediaPlayer
वर्ग से एक सहायक कार्य है।
बस void setAudioStreamType(int streamtype)
कॉल करें:
MediaPlayer mMedia = new MediaPlayer();
mMedia.setAudioStreamType(AudioManager.STREAM_RING);
बफ़र प्रगति और खेलने की स्थिति के साथ मीडिया प्लेयर
public class SoundActivity extends Activity {
private MediaPlayer mediaPlayer;
ProgressBar progress_bar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tool_sound);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
progress_bar = (ProgressBar) findViewById(R.id.progress_bar);
btn_play_stop.setEnabled(false);
btn_play_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(mediaPlayer.isPlaying()) {
mediaPlayer.pause();
btn_play_stop.setImageResource(R.drawable.ic_pause_black_24dp);
} else {
mediaPlayer.start();
btn_play_stop.setImageResource(R.drawable.ic_play_arrow_black_24px);
}
}
});
mediaPlayer.setDataSource(proxyUrl);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
observer.stop();
progress_bar.setProgress(mp.getCurrentPosition());
// TODO Auto-generated method stub
mediaPlayer.stop();
mediaPlayer.reset();
}
});
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
progress_bar.setSecondaryProgress(percent);
}
});
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
btn_play_stop.setEnabled(true);
}
});
observer = new MediaObserver();
mediaPlayer.prepare();
mediaPlayer.start();
new Thread(observer).start();
}
private MediaObserver observer = null;
private class MediaObserver implements Runnable {
private AtomicBoolean stop = new AtomicBoolean(false);
public void stop() {
stop.set(true);
}
@Override
public void run() {
while (!stop.get()) {
progress_bar.setProgress((int)((double)mediaPlayer.getCurrentPosition() / (double)mediaPlayer.getDuration()*100));
try {
Thread.sleep(200);
} catch (Exception ex) {
Logger.log(ToolSoundActivity.this, ex);
}
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.stop();
}
}
<LinearLayout
android:gravity="bottom"
android:layout_gravity="bottom"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:weightSum="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageButton
app:srcCompat="@drawable/ic_play_arrow_black_24px"
android:layout_width="48dp"
android:layout_height="48dp"
android:id="@+id/btn_play_stop" />
<ProgressBar
android:padding="8dp"
android:progress="0"
android:id="@+id/progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</LinearLayout>
</LinearLayout>
Androidstudio में ऑडियो आयात करें और इसे खेलें
यह एक उदाहरण है कि नाटक को एक ऑडियो फ़ाइल कैसे प्राप्त करें जो आपके पास पहले से ही आपके पीसी / लैपटॉप पर है। रेस के तहत एक नई निर्देशिका बनाएं और इसे इस तरह से कच्चा नाम दें
उस ऑडियो को कॉपी करें जिसे आप इस फ़ोल्डर में खेलना चाहते हैं। यह एक .mp3 या .wav फ़ाइल हो सकती है।
अब उदाहरण के लिए बटन पर क्लिक करें आप इस ध्वनि को खेलना चाहते हैं, यहां बताया गया है कि यह कैसे किया जाता है
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aboutapp_activity);
MediaPlayer song=MediaPlayer.create(this, R.raw.song);
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
song.start();
}
});
}
}
यह बटन को क्लिक करने पर केवल एक बार गाना बजाएगा, अगर आप हर बटन पर गाना फिर से खेलना चाहते हैं तो इस तरह कोड लिखें पर क्लिक करें
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aboutapp_activity);
MediaPlayer song=MediaPlayer.create(this, R.raw.song);
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (song.isPlaying()) {
song.reset();
song= MediaPlayer.create(getApplicationContext(), R.raw.song);
}
song.start();
}
});
}
}