PDA

View Full Version : سوال: پخش فایل صوتی wav.* در فرم



shahrzad87
شنبه 09 مهر 1390, 15:00 عصر
سلام
من یک textbox دارم که آدرس فایل صوتی wav.* توش هست و یک button که می خوام با کلیک روی button فایل صوتی پخش بشه و با کلیک بعدی متوقف بشه مثل play تو برنامه Media Player .
چه کدی باید برای Button بنویسم ؟؟

Mahmoud Zaad
شنبه 09 مهر 1390, 15:40 عصر
سلام

using System.Media
برای play
SoundPlayer spr=new SoundPlayer(textbox1.Text(;
spr.play();
برای توقف
SoundPlayer spr=new SoundPlayer(textbox1.Tex(;
spr.Stop();

shahrzad87
دوشنبه 11 مهر 1390, 15:37 عصر
ممنون.
حالا می خوام چندتا فایل رو پشت سر هم پخش کنه. این کد رو نوشتم ولی فقط آخرین فایل رو پخش می کنه !!!



for (int j = 0; j < treeView1.Nodes.Count; j++)
{
SoundPlayer spr = new SoundPlayer(treeView1.Nodes[j].Name);
spr.Play();
//axWindowsMediaPlayer1.URL = treeView1.Nodes[j].Name;
}

shahrzad87
دوشنبه 11 مهر 1390, 15:42 عصر
ممنون.
حالا می خوام چندتا فایل رو پشت سر هم پخش کنه. این کد رو نوشتم ولی فقط آخرین فایل رو پخش می کنه !!!



for (int j = 0; j < treeView1.Nodes.Count; j++)
{
SoundPlayer spr = new SoundPlayer(treeView1.Nodes[j].Name);
spr.Play();
//axWindowsMediaPlayer1.URL = treeView1.Nodes[j].Name;
}



وقتی breakPoint میذارم و برنامه رو اجرا می کنم و F10 می زنم که خط به خط اجرا رو ببینم کاملا درست کار می کنه و تک تک فایل ها رو پشت سر هم پخش می کنه اما وقتی عادی اجرا می کنم فقط آخرین فایل رو پخش می کنه :|

modern_amin
دوشنبه 11 مهر 1390, 15:51 عصر
برو تو پوشه دیباگ فایل اجرایی برنامه رو پاک کن و دوباره دیباگ بساز ببین درست میشه؟

shahrzad87
دوشنبه 11 مهر 1390, 16:08 عصر
این کار رو کردم اما درست نشد، فکر کنم چون حلقه for گذاشتم فایل ها نمی تونن پخش بشن و فقط آخرین فایل پخش می شه...
راهی هست که همه فایل ها رو به عنوان یک فایل صوتی بهش معرفی کنم ؟؟

gwbasic
دوشنبه 11 مهر 1390, 16:22 عصر
وقتی از متد Play استفاده می کنی صوت رو در یک Thread دیگه ای اجرا می کنه بنابراین بلافاصله حلقه ادامه پیدا می کنه و صوت بعدی اجرا می شه و همینطور الا آخر برا همین فکر می کنی که فقط آخری رو داره اجرا می کنه ولی تو Debug اینطور نیست
در برای این کار SoundPLayer زیاد به دردت نمی خوره (البته تا اونجایی که من بررسی کردم) تنها راهی که می مونه اینه که از متد PLaySync برای پلی استفاده کنی که باعث می شه از Thread UI استفاده کنه و به چیزی که می خوای می رسی ولی مشکلی که داره UI هنگ می کنه

shahrzad87
دوشنبه 11 مهر 1390, 22:20 عصر
چطور باید از این متد استفاده کنم ؟؟
چه تغییری توی کد بدم ؟؟

gwbasic
سه شنبه 12 مهر 1390, 07:40 صبح
بجای Play بنویس PlaySync

shahrzad87
سه شنبه 12 مهر 1390, 10:05 صبح
خییییلی ممنون، برنامم درست شد :لبخندساده: -:{@

shahrzad87
سه شنبه 12 مهر 1390, 16:17 عصر
راه دیگه ای هست که UI هنگ نکنه؟ آخه اینجوری نمی شه پخش رو متوقف کرد و کاربر مجبور هست تا آخر فایل ها رو گوش کنه !!!! :قهقهه::لبخند:
راهی هست که بشه با Windows Media Player این کا رو انجام داد؟ من کد زیر رو نوشتم اما به خاطر حلقه For همه فایل ها پخش نمی شن و فقط آخری پخش می شه :متفکر:


for (int j = 0; j < TView_WaveSett.Nodes.Count; j++)
{
windowsMediaPlayer.URL=TView_WaveSett.Nodes[j].Name;
}

gwbasic
سه شنبه 12 مهر 1390, 16:49 عصر
خوب گوش بده حالشو ببره چه اشکال داره می خواست کاری نکنه که پخش بشه! ما برنامه نویسا هم معموریمو معذور play کرده تا آخر براش پخش می کنیم!:بامزه:
گفتم که این مشکلو داره ولی فکر نکنم راه حلی با SoundPLayer داشته باشه ولی می تونی از Winmm Api استفاده کنی یه سرچی بزنی یه wrapper خوبم می تونی براش پیدا کنی که بتونی لیستی از آهنگ ها رو پخش کنی