PDA

View Full Version : سوال: اجرای دستور بعد از اتمام پخش صوت



zigoratsoft
شنبه 05 تیر 1395, 01:06 صبح
با سلام
من با کد زیر یک فایل صوتی رو پخش میکنم

FileStream fs = new FileStream("audio/tmp.wav", FileMode.Open, FileAccess.Read);
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(fs);
sp.Play();
fs.Close();
کاری که لازم دارم اینه که بعد اتمام پخش این فایل یک دستور اجرا بشه مثلا یه مسیج باکس نمایش داده بشه چطور باید بفهمم پخش فایل تمام شد؟
ممنون میشم راهنمایی کنید با تشکر.

mahdimk
شنبه 05 تیر 1395, 02:44 صبح
سلام باید از LoadAsync استفاده کنید.

private void loadSoundAsync()
{
Player.LoadCompleted += Player_LoadCompleted;
this.Player.SoundLocation = "C:\\Users\\MeTii\\Desktop\\a.WAV";
this.Player.LoadAsync();
MessageBox.Show("end");
}

private void Player_LoadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (this.Player.IsLoadCompleted)
{
this.Player.PlaySync();
}
}

zigoratsoft
دوشنبه 07 تیر 1395, 15:09 عصر
سلام باید از LoadAsync استفاده کنید.

private void loadSoundAsync()
{
Player.LoadCompleted += Player_LoadCompleted;
this.Player.SoundLocation = "C:\\Users\\MeTii\\Desktop\\a.WAV";
this.Player.LoadAsync();
MessageBox.Show("end");
}

private void Player_LoadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (this.Player.IsLoadCompleted)
{
this.Player.PlaySync();
}
}


این کد رو دقیقا کپی کردم ولی خطا میده The name 'Player' does not exist in the current context

zigoratsoft
دوشنبه 07 تیر 1395, 15:33 عصر
این کد رو دقیقا کپی کردم ولی خطا میده The name 'Player' does not exist in the current context

private SoundPlayer Player = new SoundPlayer();
این خط رو اضافه کردم درست شد ولی اصلا فایل رو پخش نمیکنه لطفا اگه ممکنه یه تویح کاملتر بدید کارم گیره

zigoratsoft
دوشنبه 07 تیر 1395, 15:48 عصر
ممنون میشم هرکس میتونه بگه چرا این کد فایل رو پخش نمیکنه؟



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Media;

namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private SoundPlayer Player = new SoundPlayer();
private void loadSoundAsync()
{
Player.LoadCompleted += Player_LoadCompleted;
this.Player.SoundLocation = "C:\\oou.wav";
this.Player.LoadAsync();
MessageBox.Show("end");
}

private void Player_LoadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (this.Player.IsLoadCompleted)
{
this.Player.PlaySync();
}
}
private void button1_Click(object sender, EventArgs e)
{
loadSoundAsync();
}
}
}

mrprestige
دوشنبه 07 تیر 1395, 15:50 عصر
با سلام
من با کد زیر یک فایل صوتی رو پخش میکنم

FileStream fs = new FileStream("audio/tmp.wav", FileMode.Open, FileAccess.Read);
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(fs);
sp.Play();
fs.Close();
کاری که لازم دارم اینه که بعد اتمام پخش این فایل یک دستور اجرا بشه مثلا یه مسیج باکس نمایش داده بشه چطور باید بفهمم پخش فایل تمام شد؟
ممنون میشم راهنمایی کنید با تشکر.
سلام دوست من وقت بخیر ، دوست من شما کافیه دستور ()sp.Play رو به ()sp.PlaySync تغییر بدی و در خط بعدش یه MessageBox تعریف کنی

sp.PlaySync();
MessageBox.Show("فایل وتی با موفقیت اجرا شد");
پیروز و موفق باشید

zigoratsoft
دوشنبه 07 تیر 1395, 16:26 عصر
سلام دوست من وقت بخیر ، دوست من شما کافیه دستور ()sp.Play رو به ()sp.PlaySync تغییر بدی و در خط بعدش یه MessageBox تعریف کنی

sp.PlaySync();
MessageBox.Show("فایل وتی با موفقیت اجرا شد");

پیروز و موفق باشید

با تشکر فراوان مشکل حل شد فقط یه مشکل دیگه بوجود اومد من زمانی که از playsync استفاده میکنم کل برنامه رو نگه میداره، من این کد رو برای یک سیستم سوکت پروگرمینگ استفاده کردم و مشکل اینه که تا زمانی که فایل در حال پخش است پیام های سوکت رو دریافت نمیکنه و پس از اتمام فایل صوتی تمام پیام ها رو در قالب یک پیام دریافت میکنه.
راهی هست که playsync کل برنامه رو متوقف نکنه؟

kamiloted
دوشنبه 07 تیر 1395, 17:00 عصر
سلام دوست عزیز توی صفحه 3 یا 4 همین سوال را جواب دادم.جستجو کن.
با کامپوننت Axplayer .....

mrprestige
دوشنبه 07 تیر 1395, 17:05 عصر
با تشکر فراوان مشکل حل شد فقط یه مشکل دیگه بوجود اومد من زمانی که از playsync استفاده میکنم کل برنامه رو نگه میداره، من این کد رو برای یک سیستم سوکت پروگرمینگ استفاده کردم و مشکل اینه که تا زمانی که فایل در حال پخش است پیام های سوکت رو دریافت نمیکنه و پس از اتمام فایل صوتی تمام پیام ها رو در قالب یک پیام دریافت میکنه.
راهی هست که playsync کل برنامه رو متوقف نکنه؟
دوست من از Thread ها استفاده کن به این صورت که اول تمام دستوراتی که مربوط به پخش فایل صوتی ت میشه رو داخل یه متد تعریف کن

public void PLay()
{
FileStream fs = new FileStream("C:\\W.wav", FileMode.Open, FileAccess.Read);
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(fs);
sp.PlaySync();
MessageBox.Show("فایل صوتی با موفقیت به اتمام رسید");
fs.Close();
}
حالا داخل کنترل مورد نظر اینطوری بنویس

Thread th = new Thread(() => PLay());
th.Start();

پیروز و موفق باشی