PDA

View Full Version : سوال: پخش موزیک



bftarane
دوشنبه 02 تیر 1393, 17:05 عصر
سلام.
من یکی از همکارام یک ویندوز اپلیکیشن نوشته (شبیه به کارای مالتی مدیا می مونه) یعنی اول یه اینترو میاد بعد با زدن دکمه ورود، صفحه معرفی شرکت دیده میشه و همزمان یک موزیک پخش می شه
حالا من باید این موزیک رو عوض کنم
من اومدم فایل صوتی رو پیدا کردم و همچنین کدی که این صوت فراخوانی شده رو هم پیدا کردم
حالا من میام فایل صوتی جدید رو rename میکنم به اسم فایل قدیمی و جایگزینش می کنم ولی دیگه هیچ صوتی پخش نمیشه. دلیل این چی می تونه باشه؟

public partial class Form1 : Form
{
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(@"sound\1.wav");

public Form1()
{

InitializeComponent();

}
من برنامه نویس وب هستم و در ویندوز اپلیکیشن مهارت ندارم. لطفاً راهنمایی کنید.

Pedram_Parsian
دوشنبه 02 تیر 1393, 17:12 عصر
خوب دوست عزیز
تا جایی که من متوجه شدم : :متفکر:
شما یه فایل صوتی دارید که بعد از rename کردن با همین اسم قبلی پخش نمیشه.
خوب چه انتظاری از VS دارید .... :قهقهه:
اون که نمی فهمه که شما این فایل رو rename کردید ... :چشمک:

abdullah20
دوشنبه 02 تیر 1393, 17:26 عصر
خوب دوست عزیز
تا جایی که من متوجه شدم : :متفکر:
شما یه فایل صوتی دارید که بعد از rename کردن با همین اسم قبلی پخش نمیشه.
خوب چه انتظاری از VS دارید .... :قهقهه:
اون که نمی فهمه که شما این فایل رو rename کردید ... :چشمک:
دوست عزیز دوستمون نام فایل صوتی را برابر همان فایل قبلی کرده و در مسیر مورد نظر قرار داده

احتمالا فایل صوتی شما محافظ شده است
یک بار با یک نرم افزار تبدیل فایل،فایل صوتی را تبدیل کنید احتمالا درست بشه

Pedram_Parsian
دوشنبه 02 تیر 1393, 18:12 عصر
دوست عزیز دوستمون نام فایل صوتی را برابر همان فایل قبلی کرده و در مسیر مورد نظر قرار داده

احتمالا فایل صوتی شما محافظ شده است
یک بار با یک نرم افزار تبدیل فایل،فایل صوتی را تبدیل کنید احتمالا درست بشه

ببخشید اشتباه متوجه شدم :خجالت:
حق با دوستمونه ...

bftarane
دوشنبه 02 تیر 1393, 19:35 عصر
احتمالا فایل صوتی شما محافظ شده است
یک بار با یک نرم افزار تبدیل فایل،فایل صوتی را تبدیل کنید احتمالا درست بشه


آخه من دو تا فایل مختلف رو هم تست کردم هیچ کدوم جواب نمی ده.
یعنی فایلهای جدید رو به چی تبدیل کنم؟ الآن پسوندشون wav است.

........................
این کد رو تست کردم این جواب می ده

System.Media.SoundPlayer sp = new System.Media.SoundPlayer(@"c:\Windows\Media\chimes.wav");
در ضمن هر چی پوشه sound بود پیدا کردم و فایل chimes.wav رو کپی کردم و کد زیر رو تست کردم دیدم کار می کنه.

System.Media.SoundPlayer sp = new System.Media.SoundPlayer(@"sound\chimes.wav");

ولی همین رو با اون فایل قبلی تست کردم جواب نمی ده.

abdullah20
دوشنبه 02 تیر 1393, 20:03 عصر
نه دوست عزیز کاری به win app نداره
کلاس SoundPlayer نمیتونه mp3 پخش کنه
شما فایل صوتیتون را یکبار به همون پسوند wav تبدیل کنید ببینید مشکل حل میشه

Amir4317
دوشنبه 02 تیر 1393, 20:05 عصر
کد پخش کننده MP3 (http://csharpiha.blogsky.com/1390/07/04/post-8/)

احتمالاً فایل wav دومی بیت ریت غیرقابل قبول و یا کلاً فرمت ناخوانایی داشته باشه :متفکر:

bftarane
دوشنبه 02 تیر 1393, 20:27 عصر
الآن یه فایل wav دانلود کردم و تست کردم کار می کرد. پس فایلهایی که پخش نمی شن خودشون یه مشکلی دارن.
کانورت هم می کنم همون فایل رو اگه نتیجه گرفتم میام می گم.

bftarane
سه شنبه 03 تیر 1393, 09:05 صبح
بله. فایل رو که کانورت کردم درست شد. ممنون از همه.:لبخندساده:

قله بلند
جمعه 06 تیر 1393, 18:48 عصر
کد پخش کننده MP3 (http://csharpiha.blogsky.com/1390/07/04/post-8/)

احتمالاً فایل wav دومی بیت ریت غیرقابل قبول و یا کلاً فرمت ناخوانایی داشته باشه :متفکر:


سلام
اولاً تشکر می کنم از این برنامه چون من تونستم فایل های mp3 رو در برنامه ام اجرا کنم ولی یه مشکلی دارم و اون اینکه فایل صوتی دائماً اجرا می شه. وقتی کاربر کلید رو می زنه انتظار داره یک بار صدوت رو گوش کنه و اگر لازم بود، دوباره دکمه رو می زنه.
چه تغییری رو باید در کلاس مورد نظر داد تا صوت فقط یک بار پخش بشه؟





namespace QSoft
{
class MP3Helper
{
[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand, System.Text.StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);

public static void Play(string MP3_FileName,bool Repeat)
{
mciSendString("open \"" + MP3_FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
mciSendString("play MediaFile" + (Repeat ? " repeat" :String.Empty), null, 0, IntPtr.Zero);
}
public static void Play(byte[] MP3_EmbeddedResource, bool Repeat)
{
extractResource(MP3_EmbeddedResource, Path.GetTempPath() + "resource.tmp");
mciSendString("open \"" + Path.GetTempPath() + "resource.tmp" + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
mciSendString("play MediaFile" + (Repeat ? " repeat" : String.Empty), null, 0, IntPtr.Zero);
}

public static void Pause()
{
mciSendString("stop MediaFile", null, 0, IntPtr.Zero);
}
public static void Stop()
{
mciSendString("close MediaFile", null, 0, IntPtr.Zero);
}
private static void extractResource(byte[] res,string filePath)
{
FileStream fs;
BinaryWriter bw;

if (!File.Exists(filePath))
{
fs = new FileStream(filePath, FileMode.OpenOrCreate);
bw = new BinaryWriter(fs);

foreach (byte b in res)
bw.Write(b);

bw.Close();
fs.Close();
}
}
}
}

قله بلند
شنبه 07 تیر 1393, 00:05 صبح
دوستان من چنین کدی رو نوشته ام و کلاس هم به برنامه اضافه شده است اما یک فایل صوتی رو می خواند و بقیه را نمی خواند. مسیر فایل های صوتی و خود فایل های صوتی رو هم به درستی شناسایی می کنه اما صدایی شنیده نمی شه.
کاربر، مسیر فایلی رو وارد نمی کنه بلکه در دیتاگرید ویو حرکت می کنه یا روی سطری یا سلولی از اون کلیک می کنه که مسیر فایل صوتی هم مشخص می شه. کاربر فقط باید روی کلید پخش صدا کلیک کنه تا صدا رو بشونه ولی این عمل اتفاق نمی افته.



private void button_S_EW_Click(object sender, EventArgs e)
{
#region
String FilePath_S_EW = Application.StartupPath + @"\EW_Pronunciation\" + Grave1;
if (File.Exists(FilePath_S_EW))
{
QSoft.MP3Helper.Play(FilePath_S_EW, false);
}
else
{
MessageBox.Show("فایل صوتی مورد نظر در دست ساخت است", "اطلاع", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
}
#endregion
}

Amir4317
شنبه 07 تیر 1393, 00:28 صبح
خواهش میکنم آماده خوری نکنید، دست کم یک بار کد رو خودتون روخونی کنید! :متعجب:

خط هشتم بولینی بنام Repeat هستش
مقدارش رو روی false قرار بدید :اشتباه:


public static void Play(string MP3_FileName,bool Repeat)
{
mciSendString("open \"" + MP3_FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
mciSendString("play MediaFile" + (Repeat ? " repeat" :String.Empty), null, 0, IntPtr.Zero);
}

قله بلند
شنبه 07 تیر 1393, 01:06 صبح
این کار رو انجام دادم ولی این بار به مشکل پست 11 برخورد کردم.

قله بلند
یک شنبه 08 تیر 1393, 00:38 صبح
با سلام
من از یک روش دیگه استفاده کردم و از این دو لینک کمک گرفتم
http://msdn.microsoft.com/en-us/library/windows/desktop/dd564585(v=vs.85).aspx
http://www.daniweb.com/software-development/csharp/threads/292695/playing-mp3-in-c

با استفاده از اون کلاس نتونستم به جواب برسم.