PDA

View Full Version : آموزش: خواندن فايل MP3 با حركت بر روي ليست آنها در Listview



fa_search
دوشنبه 09 خرداد 1390, 13:22 عصر
سلام . چند وقت پيش سوالي پرسيدم درمورد كار با فايل mp3 در برنامه . بالاخره تونستم برنامه رو بنويسم . كد برنامه رو ميزارم كه شما هم بتونيد استفاده كنيد .
موفق باشيد




using System;
using System.IO; // directory
using System.Runtime.InteropServices; // play mp3
using System.Text;
using System.Windows.Forms;
using System.Collections.Generic;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
//* play mp3
[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);

private StringBuilder sBuffer = new StringBuilder(128);
private int seconds;

private int Fstatus=0 ;


public Form1()
{
InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)
{
this.bookDetailsTableAdapter.Fill(this.libmp3DataS et.BookDetails);
}

private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.ShowDialog();
}

private void button2_Click(object sender, EventArgs e)
{
AddBook(@"c:\");
}
public void AddBook(string s)
{
bookDetailsTableAdapter.Insert("bbbbbb", "book", "mo", "1", s , " 1", "1", "", "__");
this.bookDetailsTableAdapter.Fill(this.libmp3DataS et.BookDetails);
}

private void button3_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{

string[] Direct = Directory.GetDirectories(folderBrowserDialog1.Sele ctedPath );
if (Direct.Length > 0)
{
for (int i = 0; i < Direct.Length; i += 1)
{
EndDirect(Direct[i]);
}
}
}
}

private void EndDirect(string SPath)
{
string[] Direct = Directory.GetDirectories(SPath);

if (Direct.Length > 0)
{
for (int i = 0; i < Direct.Length; i += 1)
{
EndDirect(Direct[i] );
}
}
else
AddBook(SPath);
}

private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
{
this.bookDetailsTableAdapter.Update(this.libmp3Dat aSet.BookDetails);
}

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
ListViwe_File(e.RowIndex);
}

private void ListViwe_File(int rowNo)
{

string mp3Name = dataGridView1[1, rowNo].Value.ToString();

if (mp3Name.Length > 0)
{

listView1.Clear();

int lenDirect = mp3Name.Length;

string[] files = Directory.GetFiles(dataGridView1[1, rowNo].Value.ToString(), "*.mp3");

if (files.Length > 0)
{
listView1.Visible = true;
for (int i = 0; (i < files.Length); i++)
{
mp3Name = files[i];
mp3Name = mp3Name.Substring(lenDirect, mp3Name.Length - lenDirect);
listView1.Items.Add(mp3Name);
}
listView1.Focus();
}
else MessageBox.Show("در اين مسير فايل صوتي موجود نمي باشد ");
}

}

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
listView1.Visible = false;
}

private void listView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space )
{
if (Fstatus == 1)
{
mciSendString("pause MediaFile", null, 0, IntPtr.Zero);
Fstatus = 2;
}


else if (Fstatus == 2)
{
mciSendString("Resume MediaFile", null, 0, IntPtr.Zero);
Fstatus = 1;
}
}

else if (e.KeyCode == Keys.Escape)
{
dataGridView1.Focus();
listView1.Visible = false;
Stpmp3();
}
else if (e.KeyCode == Keys.Right )
{
NextSeconds();
}
else if (e.KeyCode == Keys.Left )
{
pRESeconds();
}

}


private void plymp3()
{
string AddMp3;
Stpmp3();

AddMp3 = dataGridView1[1, dataGridView1.CurrentRow.Index-1].Value.ToString() + listView1.SelectedItems[0].Text; // @"E:\Music\Ba_Oon_Ghad_O_Ghamat.mp3";

mciSendString("open \"" + AddMp3 + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
mciSendString("play MediaFile", null, 0, IntPtr.Zero);
Fstatus = 1;
}
private void Stpmp3()
{
mciSendString("close MediaFile", null, 0, IntPtr.Zero);
Fstatus = 0;
}

private void listView1_ItemActivate(object sender, EventArgs e)
{
plymp3();
}

private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
ListViwe_File(dataGridView1.CurrentRow.Index-1);
}


private void NextSeconds()
{
mciSendString("status MediaFile position", sBuffer, sBuffer.Capacity, IntPtr.Zero);
seconds = int.Parse(sBuffer.ToString());

seconds = seconds + 10000;
mciSendString("play MediaFile from " + seconds.ToString(), null, 128, IntPtr.Zero);
}

private void pRESeconds()
{
mciSendString("status MediaFile position", sBuffer, sBuffer.Capacity, IntPtr.Zero);
seconds = int.Parse(sBuffer.ToString());

seconds = seconds - 10000;
mciSendString("play MediaFile from " + seconds.ToString(), null, 128, IntPtr.Zero);
}


}
}