MediaPlayer - در برنامه نویسی اندروید

بررسی MediaPlayer

اندروید راه های زیادی برای کنترل پخش فایل های صوتی/تصویری و جریان ها ارائه می دهد. زیرا یکی از مهمترین بخش ها در برخی از پروژه ها میتواند پخش فایل های صوتی و تصویری باشد. و اما یکی از این راه ها از طریق کلاسی به نام MediaPlayer است. اندروید یک کلاس تحت عنوان MediaPlayer برای دسترسی به خدمات پخش داخلی مانند پخش صدا، ویدئو و غیره ارائه داده است. برای استفاده از MediaPlayer باید یک متد static بنام create() از این کلاس را فراخوانی کنیم زیرا این متد نمونه ای از کلاس MediaPlayer را برمی گرداند.

به این کد ها دقت کنید :

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.song);

پارامتر دوم نام آهنگی است که می خواهید پخش کنید. شما باید یک پوشه جدید در پروژه خود با نام raw بسازید و فایل موسیقی را در آن قرار دهید. هنگامی که شی Mediaplayer را ایجاد کردید، می توانید چند ljn را برای شروع یا توقف موسیقی فراخوانی کنید. این متدها در زیر ذکر شده است.

mediaPlayer.start();
mediaPlayer.pause();

اجرای فایل موسیقی

در فراخوانی متد start()، موسیقی از ابتدا شروع به پخش می کند. اگر این متد دوباره پس از متد ()pause فراخوانی شود، موسیقی از جایی که باقی مانده است شروع به پخش می کند نه از ابتدا. پس برای شروع موسیقی از ابتدا، باید متد reset() را فراخوانی کنید. به این شکل :

mediaPlayer.reset();

متدهای کلاس MediaPlayer

به غیر از متد start و pause، متدهای دیگری نیز برای برخورد بهتر با فایل های صوتی/تصویری توسط این کلاس ارائه شده است. این متدها را در ادامه آورده ایم :

متد و توضیحات ردیف
isPlaying()

این متد چک میکنید که آیا موسیقی در حال پخش شدن است یا خیر.

1
seekTo(position)

با استفاده از این متد میتوانید موقعیت پخش یک موسیقی را تغییر بدهید. مثلا از دقیقه یک به دقیقه دوم بروید یا هر زمان دیگری که نیاز دارید.

2
getCurrentPosition()

این متد نقطه زمانی دقیقی که موسیقی در آن در حال اجرا باشد را برمیگرداند.

3
getDuration()

این متد زمان کل موسیقی مشخص شده را بر اساس میلی ثانیه بر میگرداند.

4
reset()

این متد پخش کننده یا همان MediaPlayer را بازنشانی می کند.

5
release()

این متد هر منبع متصل به شی MediaPlayer را آزاد می کند.

6
setVolume(float leftVolume, float rightVolume)

این متد میزان صدا را برای این پخش کننده با کاهش یا افزایش میزان آن تنظیم میکند.

7
setDataSource(FileDescriptor fd)

این متد منبع داده فایل صوتی و تصویری را تنظیم می کند.

8
selectTrack(int index)

این متد یک عدد صحیح می گیرد و آهنگ را از لیست موجود در آن شاخص خاص انتخاب می کند.

9
getTrackInfo()

این متد آرایه ای از اطلاعات مسیر را برمی گرداند.

10

مثال

در این آموزش مثالی را آماده کرده ایم که نحوه استفاده از کلاس MediaPlayer را نشان می دهد. در این  آموزش ما یک MediaPlayer پایه ایجاد می کرده ایم که به شما امکان می دهد یک آهنگ را جلو، عقب، پخش و مکث کنید.

برای آزمایش این مثال، باید آن را روی یک دستگاه واقعی اجرا کنید تا صدای صوتی را بشنوید.

توضیحات مرحله
پس ابتدا یک پروژه جدید در اندروید استودیو با یک پکیج دلخواه ایجاد کنید. 1
کدهای درون فایل MainActivity.class را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 2
کدهای درون فایل activity_main.xml را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 3
برنامه را بر روی یک تلفن واقعی یا شبیه ساز اجرا کنید و تست را انجام بدهید. 4

کدهای فایل MainActivity.java

package com.foray.articlelib;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {

    private Button b1, b2, b3;
    private MediaPlayer mediaPlayer;
    private double startTime = 0;
    private double finalTime = 0;
    private Handler myHandler = new Handler();
    private int forwardTime = 5000;
    private int backwardTime = 5000;
    private SeekBar seekbar;
    private TextView tx1, tx2, tx3;
    public static int oneTimeOnly = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b1 = findViewById(R.id.button);
        b2 = findViewById(R.id.button2);
        b3 = findViewById(R.id.button3);
        tx1 = findViewById(R.id.textView2);
        tx2 = findViewById(R.id.textView3);
        tx3 = findViewById(R.id.textView4);
        tx3.setText("Song.mp3");
        mediaPlayer = MediaPlayer.create(this, R.raw.song);
        seekbar = findViewById(R.id.seekBar);
        seekbar.setClickable(false);
        b2.setEnabled(false);

        b3.setOnClickListener(v -> {
            Toast.makeText(v.getContext(), "درحال پخش موسیقی", Toast.LENGTH_SHORT).show();
            mediaPlayer.start();

            finalTime = mediaPlayer.getDuration();
            startTime = mediaPlayer.getCurrentPosition();

            if (oneTimeOnly == 0) {
                seekbar.setMax((int) finalTime);
                oneTimeOnly = 1;
            }

            tx2.setText(String.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
                    TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long)
                                    finalTime)))
            );

            tx1.setText(String.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                    TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long)
                                    startTime)))
            );

            seekbar.setProgress((int) startTime);
            myHandler.postDelayed(UpdateSongTime, 100);
            b2.setEnabled(true);
            b3.setEnabled(false);
        });

        b2.setOnClickListener(v -> {
            Toast.makeText(v.getContext(), "موسیقی متوقف شد", Toast.LENGTH_SHORT).show();
            mediaPlayer.pause();
            b2.setEnabled(false);
            b3.setEnabled(true);
        });

        b1.setOnClickListener(v -> {
            int temp = (int) startTime;

            if ((temp + forwardTime) <= finalTime) {
                startTime = startTime + forwardTime;
                mediaPlayer.seekTo((int) startTime);
                Toast.makeText(v.getContext(), "شما 5 ثانیه به جلو رفتید.", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(v.getContext(), "شما نمیتوانید 5 ثانیه به جلو بروید.", Toast.LENGTH_SHORT).show();
            }
        });

        findViewById(R.id.button4).setOnClickListener(v -> {
            int temp = (int) startTime;
            if ((temp - backwardTime) > 0) {
                startTime = startTime - backwardTime;
                mediaPlayer.seekTo((int) startTime);
                Toast.makeText(v.getContext(), "5 ثانیه به عقب برگشتید.", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(v.getContext(), "نمیشه به 5 ثانیه قبل برگردید.", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private Runnable UpdateSongTime = new Runnable() {
        public void run() {
            startTime = mediaPlayer.getCurrentPosition();
            tx1.setText(String.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                    TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
                                    toMinutes((long) startTime)))
            );
            seekbar.setProgress((int) startTime);
            myHandler.postDelayed(this, 100);
        }
    };

}

فایل activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="پخش کننده موسیقی"
        android:textSize="35dp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textview"
        android:layout_centerHorizontal="true"
        android:text="7Cloner.com"
        android:textColor="#010830"
        android:textSize="35dp" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:src="@drawable/abc" />

    <androidx.appcompat.widget.LinearLayoutCompat
        android:id="@+id/btn_panel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="به جلو" />

        <Button
            android:id="@+id/button2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="توقف" />

        <Button
            android:id="@+id/button3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="پخش" />

        <Button
            android:id="@+id/button4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="به عقب" />
    </androidx.appcompat.widget.LinearLayoutCompat>

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btn_panel"
        android:layout_marginBottom="8dp"
        android:layout_alignStart="@+id/btn_panel"
        android:layout_alignEnd="@+id/btn_panel" />

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:layout_above="@id/seekBar"
        android:paddingStart="16dp"
        android:paddingEnd="16dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="100"
            android:textAppearance="?android:attr/textAppearanceSmall" />


    </androidx.appcompat.widget.LinearLayoutCompat>

</RelativeLayout>

در این مرحله تنها کافیست که پروژه را بر روی یک دستگاه اجرا کنید. پس نتیجه به این صورت خواهد بود :

پخش کننده موسیقی اندروید

با کلیک بر روی دکمه ها میتوانید نتیجه را به صورت عملی در آن مشاهده کنید, و به راحتی میتوانید موسیقی را جابه جا کنید.

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر نیاز است تا ابتدا وارد سایت شوید.

هیچ نظری ارسال نشده است.

قیمت آموزش
رایگان
نوع دسترسی
رایگان

این مقاله در حال حاضر تنها به روش رایگان در دسترس می باشد.

ناصر خالدی
مدرس دوره

ناصر خالدی

مهندس شبکه, امنیت, برنامه نویسی تلفن های هوشمند, طراح وب سایت و متخصص هوش مصنوعی

گفتگوی برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن

مقالات پیشنهادی

هوش مصنوعی

هوش مصنوعی یا هوش ماشینی, به هوشمندی نشان داده شده توسط ماشین در شرایط مختلف گفته میشود که مقابل هوش طبیعی در انسان ها قرار دارد که ...


۸۶۰
۰
۱۱ آذر ۱۳۹۹

درباره فایل Robots.txt

این فایل ربات های خزنده موتور های جستجو را راهنمایی می کنند و به آنان می فهماند که چه دایرکتوری و لینک هایی قابل بررسی و چه دایرکتوری و لینک هایی غیرقابل برررسی می باشند...


۷۵۵
۰
۲ دی ۱۳۹۹

جاوا اسکریپت

جاوا اسکریپت یک زبان پویا و محبوب مبتنی بر شیء, داینامیک و مفسری می باشد. این زبان برای برنامه نویسی سمت سرور و کلاینت استفاده میشود که ...


۸۶۷
۰
۱۳ آذر ۱۳۹۹

پی اچ پی - PHP

با استفاده از این زبان می توان وب سایت های پویا طراحی کرد, این زبان می تواند با HTML ادغام شود, در حقیقت یک زبان اسکریپتی متن باز و رایگان است. یعنی زمانی که سرور درخواست ...


۹۴۵
۰
۱۳ آذر ۱۳۹۹

Fatal error: Uncaught wfWAFStorageFileException: Unable to verify temporary file contents for atomic writing. in /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php:52 Stack trace: #0 /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php(659): wfWAFStorageFile::atomicFilePutContents('/home/clonerco/...', '<?php exit('Acc...') #1 [internal function]: wfWAFStorageFile->saveConfig('livewaf') #2 {main} thrown in /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php on line 52