اجرای پشت سر هم یه فایل صوتی در یه اکتیویتی

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

sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
سلام، برای عدم اجرای هم زمان موسیقی باید از یک ساختار سوییچ کیس برای تعریف شی مدیاپلیر استفاده کنی... https://stackoverflow.com/questions/11507062/play-two-different-sound-files-from-two-different-buttons



 public void onClick(View v) 
   {
       switch(v.getId()) 
       {
         case R.id.imageButton1:
             mp = MediaPlayer.create(this, R.raw.lettera);
             break;
         case R.id.imageButton2:
             mp = MediaPlayer.create(this, R.raw.letterb);
             break;
         default:
             return;
       }

      mp.start();
      while (mp.isPlaying()) { 
         // do nothing 
      }
      mp.release();
   }

sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
من یه راهی پیدا کردم. با استفاده از دسترات if و else ولی دو تا مشکل داره اولیش اینکه حتما باید مدیا پلیر از قبل اجرا شده باشه وگرنه برنامه کرش میکنه.راه حلش اینه که در متد onCreate یک بار مدیا پلیر اجرا بشه و میتونیم یکی از اهنگ ها رو پلی کنیم ولی به جای اینکه از Start استفاده کنیم، از Stop استفاده میکنیم تا اهنگ به محض ورود پخش نشه و کد if و else هم به صورت زیر باشه if (mp.isPlaying()) { mp.stop(); return; } else { mp = MediaPlayer.create(context, R.raw.music); mp.start(); مشکل دوم هم اینکه اگه یک بار روی دکمه پخش کلیک کنیم، اهنگ ابتدا متوقف میشه و پخش نمیشه و برای پخشش حتما باید یه بار دیگه دکمه رو بزنیم. و خب راه حلش رو هنوز پیدا نکردم
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
خیلی ممنون از راهنماییتون اما این قسمت کد while (mp.isPlaying()) { // do nothing } mp.release(); باعث میشه که وقتی روی دکمه پلی کلیک کنم،برنامم کرش کنه و متوقف بشه.اگر هم کد رو پاک کنم،برنامه اجرا میشه ولی باز هم اهنگ ها پشت سر هم پخش میشن
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
سلام داخل همان لینک گفته یک روش بهتر باید براش پیدا کنی


	Um, the while(mp.isPlaying()) loop is not a good idea and will most likely cause your app to stop responding
	
این تکه از کد را می توانید به صورت زیر تغییر دهید.

final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.one);
final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.two);

Button btn = (Button)this.findViewById (R.id.button1);
btn.setOnClickListener(new OnClickListener(){
    @override
    public void onClick(View v) {
        mp1.start();
        mp2.pause();
        mp2.seekTo(0);
    }
});

Button btn1 = (Button)this.findViewById (R.id.button2);
btn1.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        mp1.pause();
        mp1.seekTo(0);
        mp2.start();
    }
	
https://stackoverflow.com/questions/22092016/how-to-play-two-different-sound-on-two-different-buttons
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
الان باید این کد رو امتحان کنم.فکر کنم از if و else بهتر باشه.
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
این کد کار نمیکنه. البته من 6 تا مدیاپلیر مختلف دارم.شاید به خاطر اون باشه.از if و else استفاده میکنم بهتره.خیلی خیلی ممنونم از راهنماییتون
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
خواهش می کنم، شما دوتا باتن دارید، دوتا متد setOnClickListener کیککردن تعریف شده وقتی که باتن اول کلیک می شه مدیا پلیر اول را پلی می کنه، دومی را متوقف و برای رویداد setOnClickListenerکلیک کردن باتن دوم برعکس این یکی. if else داخل این ساختار نیازی نیست، کلاسهای مدیا پلیر در بالا تعریف شده ...در کل راه حل همینه

final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.one);
final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.two);

	
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
برای من این روش کار نمیکنه.من 6 تا دکمه دارم و هر کدوم اهنگ خاصی رو پخش میکنن و این روش برام کار نمیکنه
online-support-icon