ghasem

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

ghasem ۱۳۹۶/۰۹/۱۹ برنامه‌نویسی اندروید

من چند دکمه در یک صفحه دارم و هر دکمه یک فایل جداگانه رو پخش میکنن مشکل من اینه که اگه یکی از اون ها در حال پخش باشه و بخوام که یکی دیگه رو پخش کنم،هر دو همزمان پخش میشن میخوام که بدون تعریف کردن دکمه استپ برای هر کدوم، این مشکل حل بشه اگر هم فایلی که داره پخش میشه رو ، پخش کنم،باز هم اون فایل پشت سر فایل قبلی اجرا میشه. خیلی نیاز دارم تا این مشکل رو حل کنم
پاسخ‌ها به این تاپیک
ghasem
ghasem
۱۳۹۶/۰۹/۲۲
خیلی ممنون از راهنماییتون اما این قسمت کد while (mp.isPlaying()) { // do nothing } mp.release(); باعث میشه که وقتی روی دکمه پلی کلیک کنم،برنامم کرش کنه و متوقف بشه.اگر هم کد رو پاک کنم،برنامه اجرا میشه ولی باز هم اهنگ ها پشت سر هم پخش میشن
stack programer
stack programer
۱۳۹۶/۰۹/۲۲
سلام داخل همان لینک گفته یک روش بهتر باید براش پیدا کنی


	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

در پاسخ به

ghasem
ghasem
۱۳۹۶/۰۹/۲۲
این کد کار نمیکنه. البته من 6 تا مدیاپلیر مختلف دارم.شاید به خاطر اون باشه.از if و else استفاده میکنم بهتره.خیلی خیلی ممنونم از راهنماییتون

در پاسخ به

stack programer
stack programer
۱۳۹۶/۰۹/۲۲
خواهش می کنم، شما دوتا باتن دارید، دوتا متد setOnClickListener کیککردن تعریف شده وقتی که باتن اول کلیک می شه مدیا پلیر اول را پلی می کنه، دومی را متوقف و برای رویداد setOnClickListenerکلیک کردن باتن دوم برعکس این یکی. if else داخل این ساختار نیازی نیست، کلاسهای مدیا پلیر در بالا تعریف شده ...در کل راه حل همینه

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

	

در پاسخ به

ghasem
ghasem
۱۳۹۶/۰۹/۲۲
برای من این روش کار نمیکنه.من 6 تا دکمه دارم و هر کدوم اهنگ خاصی رو پخش میکنن و این روش برام کار نمیکنه

در پاسخ به

ghasem
ghasem
۱۳۹۶/۰۹/۲۲
الان باید این کد رو امتحان کنم.فکر کنم از if و else بهتر باشه.

در پاسخ به

stack programer
stack programer
۱۳۹۶/۰۹/۲۱
سلام، برای عدم اجرای هم زمان موسیقی باید از یک ساختار سوییچ کیس برای تعریف شی مدیاپلیر استفاده کنی... 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();
   }

ghasem
ghasem
۱۳۹۶/۰۹/۲۲
من یه راهی پیدا کردم. با استفاده از دسترات if و else ولی دو تا مشکل داره اولیش اینکه حتما باید مدیا پلیر از قبل اجرا شده باشه وگرنه برنامه کرش میکنه.راه حلش اینه که در متد onCreate یک بار مدیا پلیر اجرا بشه و میتونیم یکی از اهنگ ها رو پلی کنیم ولی به جای اینکه از Start استفاده کنیم، از Stop استفاده میکنیم تا اهنگ به محض ورود پخش نشه و کد if و else هم به صورت زیر باشه if (mp.isPlaying()) { mp.stop(); return; } else { mp = MediaPlayer.create(context, R.raw.music); mp.start(); مشکل دوم هم اینکه اگه یک بار روی دکمه پخش کلیک کنیم، اهنگ ابتدا متوقف میشه و پخش نمیشه و برای پخشش حتما باید یه بار دیگه دکمه رو بزنیم. و خب راه حلش رو هنوز پیدا نکردم

در پاسخ به