PDA

View Full Version : سوال: پخش آهنگ در سی شارپ



esmael_g
یک شنبه 14 شهریور 1395, 13:36 عصر
سلام دوستان عزیز خسته نباشید یه سوال دارم در مورد پخش آهنگ در سی شارپ ببینید

SoundPlayer m = new SoundPlayer(Application.StartupPath + "/B1t.wav");
m.play();


این کد میاد و فایل صوتی رو باز می کنه و پخش می کنه اما مشکل بزرگ من اینه که تنها فایل های wav رو باز می کنه چیکار کنم که فایل های با فرمت های دیگه رو هم باز کنه ممنون میشم راهنمایی کنید راستی نمی خوام از ابزار windows media استفاده کنم

mrprestige
یک شنبه 14 شهریور 1395, 21:32 عصر
سلام دوست من شما میتونی این Nuget (https://www.nuget.org/packages/NAudio)رو دانلود کنی و فایل های صوتی با فرمت WAV, MP3, WMA, AAC رو اجرا کنی .

esmael_g
دوشنبه 15 شهریور 1395, 01:57 صبح
خیلی ممنون واقعا عالی بود با اینکه تا قبل از اینکه شما اسمش رو ببرید نمی دونستم اصلا این چیه اما بعد از چند ساعت تحقیق بازی با کد ها کاملا متوجه این شدم عالیه این خیلی خیلی ممنون ازتون

esmael_g
دوشنبه 15 شهریور 1395, 12:55 عصر
سلام یه سوال من نرم افزار رو ساختم با 2 تا دکمه یکی انتخاب آهنگ و دومی هم پخش و ایست آهنگ الان می خواستم به برنامه عکس اضافه کنم به این شکلی که زمانی که رو دکمه پخش کلیک کردم تصویر اسلاید شروع شه و مثلا به میزان 10 ثانیه یه بار تصویر برام عوض کنه تو این حال من اومدم از پیکچر باکس استفاده کردم 6 عدد برای 6 تصویر حالا بریم سر اصل مطلی از 6 تایمر هم استفاده کردم در برنامه به شکل زیر
private void timer1_Tick(object sender, EventArgs e)
{
if (pictureBox1.Visible == true)
{
pictureBox1.Visible = false;
pictureBox2.Visible = true;
}
else
timer1.Enabled=false;
timer2.Enabled=true;

}

private void Form1_Load(object sender, EventArgs e)
{

}

private void timer2_Tick(object sender, EventArgs e)
{
if (pictureBox2.Visible == true)
{
pictureBox2.Visible = false;
pictureBox3.Visible = true;
}
else
timer2.Enabled = false;
timer3.Enabled = true;

}

private void timer4_Tick(object sender, EventArgs e)
{
if (pictureBox4.Visible == true)
{
pictureBox4.Visible = false;
pictureBox5.Visible = true;
}
else
timer4.Enabled = false;
timer5.Enabled = true;
}

private void timer5_Tick(object sender, EventArgs e)
{
if (pictureBox5.Visible == true)
{
pictureBox5.Visible = false;
pictureBox6.Visible = true;
}
else
timer5.Enabled = false;
timer6.Enabled = true;
}

private void timer3_Tick(object sender, EventArgs e)
{
if (pictureBox3.Visible == true)
{
pictureBox3.Visible = false;
pictureBox4.Visible = true;
}
else
timer3.Enabled = false;
timer4.Enabled = true;
}

private void timer6_Tick(object sender, EventArgs e)
{
if (pictureBox6.Visible == true)
{
pictureBox6.Visible = false;
pictureBox1.Visible = true;
}
else
timer6.Enabled = false;
timer1.Enabled = true;
}


زمان هر کدوم از تایمر ها رو روز 1300 قرار دادم اما مشکل اینه تصاویر خیلی نا منظم( از نظر زمانی) مثلا یکی 2 ثانیه یکی 10 ثانیه یکی 5 ثانیه حرکت می کنند
تو دکمه استارد آهنگ هم timer1.enabled=true; کردم ( در تنظیمات تایمر استارت رو فالس کردم) میشه بگید مشکل از کجاست زمان بندی این جوری شد؟

mr.sirwan
دوشنبه 15 شهریور 1395, 13:21 عصر
احتمالا به این خاطره که شما فقط از یک Thread اونم Thread اصلی برنامه واسه تموم کارها استفاده میکنی، و اولویت پخش آهنگ از تایمر بیشتر هستش واسه همین CPU نمیتونه در زمان بندی منظم به تایمر سربزنه، شما برای پخش آهنگ از یک نخ یا همون Thread جدا استفاده کنین و در ضمن از این روش هم استفاده نکنین که فوق العاده ناکارامده، از یه تایمر و یک پیکچر باکس استفاده کنین و یه حلقه For، نسبت به این روش شما خیلی بهینه تر هستش

mrprestige
دوشنبه 15 شهریور 1395, 19:23 عصر
سلام یه سوال من نرم افزار رو ساختم با 2 تا دکمه یکی انتخاب آهنگ و دومی هم پخش و ایست آهنگ الان می خواستم به برنامه عکس اضافه کنم به این شکلی که زمانی که رو دکمه پخش کلیک کردم تصویر اسلاید شروع شه و مثلا به میزان 10 ثانیه یه بار تصویر برام عوض کنه تو این حال من اومدم از پیکچر باکس استفاده کردم 6 عدد برای 6 تصویر حالا بریم سر اصل مطلی از 6 تایمر هم استفاده کردم در برنامه به شکل زیر
private void timer1_Tick(object sender, EventArgs e)
{
if (pictureBox1.Visible == true)
{
pictureBox1.Visible = false;
pictureBox2.Visible = true;
}
else
timer1.Enabled=false;
timer2.Enabled=true;

}

private void Form1_Load(object sender, EventArgs e)
{

}

private void timer2_Tick(object sender, EventArgs e)
{
if (pictureBox2.Visible == true)
{
pictureBox2.Visible = false;
pictureBox3.Visible = true;
}
else
timer2.Enabled = false;
timer3.Enabled = true;

}

private void timer4_Tick(object sender, EventArgs e)
{
if (pictureBox4.Visible == true)
{
pictureBox4.Visible = false;
pictureBox5.Visible = true;
}
else
timer4.Enabled = false;
timer5.Enabled = true;
}

private void timer5_Tick(object sender, EventArgs e)
{
if (pictureBox5.Visible == true)
{
pictureBox5.Visible = false;
pictureBox6.Visible = true;
}
else
timer5.Enabled = false;
timer6.Enabled = true;
}

private void timer3_Tick(object sender, EventArgs e)
{
if (pictureBox3.Visible == true)
{
pictureBox3.Visible = false;
pictureBox4.Visible = true;
}
else
timer3.Enabled = false;
timer4.Enabled = true;
}

private void timer6_Tick(object sender, EventArgs e)
{
if (pictureBox6.Visible == true)
{
pictureBox6.Visible = false;
pictureBox1.Visible = true;
}
else
timer6.Enabled = false;
timer1.Enabled = true;
}


زمان هر کدوم از تایمر ها رو روز 1300 قرار دادم اما مشکل اینه تصاویر خیلی نا منظم( از نظر زمانی) مثلا یکی 2 ثانیه یکی 10 ثانیه یکی 5 ثانیه حرکت می کنند
تو دکمه استارد آهنگ هم timer1.enabled=true; کردم ( در تنظیمات تایمر استارت رو فالس کردم) میشه بگید مشکل از کجاست زمان بندی این جوری شد؟
سلام دوست من وقتت بخیر ، دوست من به قول دوست عزیز جناب mr.sirwan (http://barnamenevis.org/member.php?369257-mr-sirwan) این روشی که بکار بردی بسیار بسیار بسیار غیر اصولی هست در نظر بگیرید به عنوان مثال حالا خواستیم صد تا عکس رو بصورت اسلاید نشون بدیم اونوقت باید صد تا کنترل Timer ایجاد کنیم با صد تا Picturebox ؟؟!! این میشه فاجعه توی روند برنامه تون . پس اصولی اینه که یک کنترل picture box و یک کنترل Timer برای کنترل تایمر این کد رو بنویسید

Int c=0;
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Interval = 3000;
C++;
if (C==6)
{
C = 0;
}
else
{
pictureBox1.Image = new Bitmap(@"C:\PictureFolder\" + C + ".jpg");

}


}


بعد داخل دکمه ای که مربوط به پخش موسیقی هست Enable تایمر رو برابر True قرار بده و میبینی که هر سه ثانیه عکس هاتون یصورت اسلاید نمایش داده میشه .
پیروز موفق باشید

esmael_g
دوشنبه 15 شهریور 1395, 20:03 عصر
سلام من کد بالا رو نوشتم اما خطا میگیره و دقیق نمی دونم جریان چیه و چرا زمانی که آهنگ پخش می شه زمان تایمر که تموم میشه نه تنه به تصویر دوم نمی ره بلکه آهنگ می ایسته و برنامه خطا میده
int c=0;
private void timer1_Tick(object sender, EventArgs e)
{

timer1.Interval = 3000;
c++;
if (c==6)

{
c = 0;
}
else
{
pictureBox6.Image = new Bitmap(@"C:\Users\esmaelgandomi\Desktop\New folder\Tutorial2\SecondTutorial\SecondTutorial\Res ources" + c + ".jpg");

}



اینم کد نوشتم ممنون میشم بگید کجاش اشتباهه فرمت که همون تو متغییر c هم شرط گفته شده مسیر رو هم دادم مشک چیه

mrprestige
دوشنبه 15 شهریور 1395, 20:19 عصر
آخر آدرستون یک بک اسلش یادتون رفته بزارید برای اینکه به برنامتون بگید که محتوای داخل پوشه Resources رو میخواید

pictureBox6.Image = new Bitmap(@"C:\Users\esmaelgandomi\Desktop\New folder\Tutorial2\SecondTutorial\SecondTutorial\Res ources\" + c + ".jpg");

اگه بازم خطا داد متن خطا رو بفرستید

esmael_g
دوشنبه 15 شهریور 1395, 20:26 عصر
بازم خطا داد اینم خود خطا
142416

بازم ممنون ازتون

mrprestige
دوشنبه 15 شهریور 1395, 22:02 عصر
ببخشید دوست من دیر جوابتون رو دادم ، یادم رفت اینو عرض کنم این خطا به این خاطره که شما وقتی فرمودید 6 تا عکس دارید نام عکس ها رو هم باید از 1 تا 6 بزارید ( مثلا عکس اول نامش میشه 1 و عکس دوم میشه 2 و ... ) اینطوری نام گذاری کنید بعد برنامه رو اجرا کنید .

esmael_g
دوشنبه 15 شهریور 1395, 22:43 عصر
سلام ممنون ازتون البته یه سوال اینکه بیام عکس ها رو نام گذاری کنم برای هر عکس یک متغییر رو هم قرار بدم الان شما گفتید مثلا برای عکس 1 و برای عکس 2 مثلا اسمش 2 رو تو برنامه نامگذاری کنم خوب روش نامگذاری رو دقیق نمی دونم چجوری تو برنامه بیارمش تو قسمت else مثلا اینجوری عمل کنم مثل این کد
pictureBox6.Image = new Bitmap(@"C:\Users\esmaelgandomi\Desktop\New folder\Tutorial2\SecondTutorial\SecondTutorial\Res ources\" + c + "01015469.jpg" + "01016648.jpg" + "01016930.jpg" + "01022939.jpg" + "01023396.jpg" + "01023937.jpg");

چون اگه برای هر کدوم متغییر انتخاب کنم که میشه همون داستان اول که اگه صد عکس باشه یعنی صد خط اضافی ( برای هر عکی یک بار این خط رو بنویسم و در آخر اسم عکس مورد نظر رو بدم اگه بد متوجه شدم ممنون میشم راهنمایی کنید

mr.sirwan
دوشنبه 15 شهریور 1395, 23:21 عصر
سلام ممنون ازتون البته یه سوال اینکه بیام عکس ها رو نام گذاری کنم برای هر عکس یک متغییر رو هم قرار بدم الان شما گفتید مثلا برای عکس 1 و برای عکس 2 مثلا اسمش 2 رو تو برنامه نامگذاری کنم خوب روش نامگذاری رو دقیق نمی دونم چجوری تو برنامه بیارمش تو قسمت else مثلا اینجوری عمل کنم مثل این کد
pictureBox6.Image = new Bitmap(@"C:\Users\esmaelgandomi\Desktop\New folder\Tutorial2\SecondTutorial\SecondTutorial\Res ources\" + c + "01015469.jpg" + "01016648.jpg" + "01016930.jpg" + "01022939.jpg" + "01023396.jpg" + "01023937.jpg");

چون اگه برای هر کدوم متغییر انتخاب کنم که میشه همون داستان اول که اگه صد عکس باشه یعنی صد خط اضافی ( برای هر عکی یک بار این خط رو بنویسم و در آخر اسم عکس مورد نظر رو بدم اگه بد متوجه شدم ممنون میشم راهنمایی کنید

دوست عزیز، شما فقط اسم فایل هارو تغییر بدین لازم نیس برای هر فایل یک متغییر تعریف کنین، اسم فایل هارو به ترتیب از عدد 1 تا عدد 6 تغییر بدین، بدین صورت 1.jpg و 2.jpg و الی آخر

esmael_g
سه شنبه 16 شهریور 1395, 09:43 صبح
دوست عزیز، شما فقط اسم فایل هارو تغییر بدین لازم نیس برای هر فایل یک متغییر تعریف کنین، اسم فایل هارو به ترتیب از عدد 1 تا عدد 6 تغییر بدین، بدین صورت 1.jpg و 2.jpg و الی آخر

سلام خسته نباشید دوستان ببخشید من زیاد روش کار کردم اما چون متوجه نشدم منظورتون رو هنوزم گیره کارم برای هر عکس یک متغییر رو تعریف کنم ؟ والا من هر کاری کردم نفهمیدم چجوری متغییر تعریف کنم و آدرسش رو بدم به اون عکس لطفا بیشتر توضیح بدید من کلا گیج شدم

mrprestige
سه شنبه 16 شهریور 1395, 16:49 عصر
سلام دوست من ، نه اصــــــــــلا لازم نیست متغییری ایجاد کنید . شما تنها کاری که میکنید اینه که وارد پوشه مربوط به عکس هاتون بشید و مثلا شما 6 عدد عکس دارید به ترتیب در قسمت Rename عکس یک شماره بدید که شما اینجا 6 تا عکس دارید نام عکس ها میشه از 1 تا 6 . بازم مثال میزنم : وارد پوشه عکس هاتون میشید روی عکس اول کلیک راست میکنید و گزینه Rename رو میزنید (می تونید هم دوبار کلیک با فاصله یه ثانیه کنید ) نامش رو 1 قرار میدید همینطور برای عکس دوم نامش رو 2 و ... تا عکس ششم که نامش میشه 6

esmael_g
سه شنبه 16 شهریور 1395, 17:50 عصر
سلام ممنون ازتون بابت پاسخ البته من این کد رو قرار دادم و جواب داد یه مقدار هم خوش فرم تر شده البته هنوز یه مشکل دارم اونم اینه که تصاویر که به صورت اسلاید از سمت راست به چپ( آورم آروم تصویر 1 میره و تصویر 2 جاشو می گیره _بسته به سرعت تایمر) اما مشکل اینه تصویر 1 که رفت حالا باید تصویر 2 اروم بره و سوم جاشو بگیره اما تصویر دوم که کامل ( صفحه رو میگیره ) یه تصویر جاشو میگیره مثلا تصویر 4 و اون تصویر آروم آروم میره نمی دونم مشکل از کجاست ( راستی من از 2 تا پیکچر باکس استفاده کردم و 5 عدد تصویر ممنون میشم بدونم چرا منظم نیستن
if (openFileButton.Enabled == true)
{

pictureBox1.Height = 227;

pictureBox1.Width = pictureBox1.Width - 1;
if (pictureBox1.Width == 0)
{
pictureBox1.Width = 452;
pictureBox6.Image = System.Drawing.Image.FromFile(".\\" + c.ToString() + ".jpg");
pictureBox1.Image = System.Drawing.Image.FromFile(".\\" + (c + 1) + ".jpg");
c = c + 1;
if (c == 5)
{
c = 1;

}