खोज…


वाक्य - विन्यास

  • शून्य सेटऑडियोस्ट्रीम टाइप (इंट स्ट्रीमटाइप)
  • शून्य सेटडॉटसोर्स (संदर्भ, उरी उरी)
  • शून्य तैयारी ()
  • शून्य तैयारी
  • शून्य प्रारंभ ()
  • शून्य रोक ()

टिप्पणियों

MediaPlayer उपयोग मुख्य रूप से स्टेट आरेख पर आधारित है:

यहाँ छवि विवरण दर्ज करें

इसका मतलब यह है कि ऑडियो / वीडियो चलाने के लिए एक परिभाषित अनुक्रम होना चाहिए विशिष्ट क्रम है। यह भी बताता है कि किस राज्य में क्या कार्रवाई की जा सकती है

MediaPlayer API में लचीलापन (कस्टम डिकोडर और रेंडरिंग तर्क जोड़ने) का अभाव है और HTTP (DASH) और स्मूथस्ट्रीमिंग पर डायनामिक एडैप्टिव स्ट्रीमिंग के लिए sSupport का अभाव है। इन के लिए, ExoPlayer में देखें

बुनियादी निर्माण और खेल

MediaPlayer क्लास का उपयोग ऑडियो / वीडियो फ़ाइलों और स्ट्रीम के प्लेबैक को नियंत्रित करने के लिए किया जा सकता है।

MediaPlayer ऑब्जेक्ट का निर्माण तीन प्रकार के हो सकते हैं:

  1. स्थानीय संसाधन से मीडिया

    MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.resource);
    mediaPlayer.start(); // no need to call prepare(); create() does that for you
    
  2. स्थानीय URI (ContentResolver से प्राप्त) से

    Uri myUri = ....; // initialize Uri here
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(getApplicationContext(), myUri);
    mediaPlayer.prepare();
    mediaPlayer.start();
    
  3. बाहरी 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.MediaPlayerMediaPlayer को स्टेट डायग्राम के अनुसार आरंभ और तैयार किया जाना चाहिए

सिस्टम वॉल्यूम प्राप्त करना और सेट करना

ऑडियो स्ट्रीम प्रकार

रिंगटोन धाराओं के विभिन्न प्रोफाइल हैं। उनमें से हर एक की अलग-अलग मात्रा है।

यहां हर उदाहरण 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();
     }
   });
 }
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow