PDA

View Full Version : سوال: چگونه می توان روی یک برنامه ی تحت کنسول صدا گذاشت؟



saymon
شنبه 19 اردیبهشت 1388, 16:23 عصر
سلام .من از کسی شنیده بودم که می شود با وجود این که برنامه تحت کنسول است روی ان صدا گذاشت .ولی هر چی گشتم وتلاش کردم نتوانستم این کار را بکنم. لطفا اگر کسی می داند چگونه می توان این کار را انجام داد حتما به من جواب دهد .امی وارم خیلی زود کسی پیدا بشه که جوابمو بده چون خیلی بهش احتیاج دارم.

Reza_Yarahmadi
شنبه 19 اردیبهشت 1388, 19:14 عصر
سلام
اگه منظورت تبدیل متن به صوته که فرقی نمی کنه توی کنسول هم میشه این کارو انجام داد.
اگر هم منظورت پخش صداهای wav هست که اونم میشه اگه اینا بود رو راهنمایی خواستی بگو!!
موفق باشی

navid_8x
یک شنبه 20 اردیبهشت 1388, 05:28 صبح
می تونی از کلاس SoundPlayer در System.Media استفاده کنی.


using System;
using System.Collections.Generic;
using System.Media;
using System.Text;

namespace musicalconsole
{
class Program
{
static void Main(string[] args)
{
SoundPlayer Player = new SoundPlayer(@"C:\a.wav");
Player.Load();
Player.Play();
Console.Write("Music is playing now.\n");
Console.ReadLine();
}
}
}

فقط wave رو پخش می کنه. واسه mp3 باید از directx ، api و چیز های دیگه استفاده کنی.

shervin_agh67
دوشنبه 21 اردیبهشت 1388, 02:25 صبح
try this :



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace player
{
class Program
{
static void Main(string[] args)
{
System.Windows.Forms.OpenFileDialog op=new System.Windows.Forms.OpenFileDialog();
do
{
try
{
if (op.ShowDialog() == DialogResult.OK)
{
string filename = op.FileName.ToString();

// Access the IMediaControl interface.
QuartzTypeLib.FilgraphManager graphManager =
new QuartzTypeLib.FilgraphManager();
QuartzTypeLib.IMediaControl mc =
(QuartzTypeLib.IMediaControl)graphManager;

// Specify the file.
mc.RenderFile(filename);
string name = op.FileName.ToString();
string file = "";
for (int i = op.FileName.Length - 1; name[i].ToString() != "\\"; i--)
{
//Console.Write(name[i].ToString());
file += name[i];
}
name = "";
for (int i = file.Length - 1; i >= 0; i--)
{
name += file[i];
}
Console.WriteLine("Playing : " + name);
// Start playing the audio asynchronously.
mc.Run();

Console.WriteLine("Press Enter to Stop.");
Console.ReadLine();

mc.Stop();
Console.Clear();
Console.Write("You want Exit Or play again(E/P):");
string s = Console.ReadLine();
Console.Clear();
if (s.ToUpper() == "E") break;
}//if
}//try
catch(System.Runtime.InteropServices.COMException)
{
Console.Clear();
Console.Write("Error! Unable to play this song.\n");
Console.Write("You want Exit Or play again(E/P):");
string s = Console.ReadLine();
Console.Clear();
if (s.ToUpper() == "E") break;
}
} while (true);
}
}
}

البته قبلش این DLL رو باید import کنی : QuartzTypeLib البته ازنوع COM هست .
لازم به ذکره که این کد به دلیل عدم رعایت ریسمانها در هنگام اجرا در محیط ویژوال استدیو ممکنه خطای Threading.ThreadStateException رو بده که علتش به کار بردن OpenFileDialog در محیط کنسول هست که قابل حله . ساده ترین راهش هم اجرای برنامه بصورت مستقیم هست.

saymon
دوشنبه 21 اردیبهشت 1388, 21:32 عصر
ممنون از این که جوابمو دادید.بسیار مفید واقع شد.