PDA

View Full Version : API



SSP_Software_team
پنج شنبه 06 آذر 1382, 01:45 صبح
استاد من یه قطعه کد به این صورت نوشتم


public const UInt32 SND_ASYNC = 1;
public const UInt32 SND_MEMORY = 4;

[DllImport("Winmm.dll")]
public static extern bool PlaySound(byte[] data, IntPtr hMod, UInt32 dwFlags);

private void button1_Click(object sender, System.EventArgs e)
{
System.IO.FileStream[] input = new System.IO.FileStream[2];
{
input[0] = new System.IO.FileStream("f:\\1.wav",System.IO.FileMode.Open,
System.IO.FileAccess.Read);
input[1] = new System.IO.FileStream("f:\\2.wav",System.IO.FileMode.Open,
System.IO.FileAccess.Read);
}

byte[] data1 = new byte[input[0].Length + input[1].Length];

input[0].Read(data1,0,(int)input[0].Length);
input[0].Close();

input[1].Read(data1,(int)input[0].Length,(int)inpu t[1].Length);
input[1].Close();

PlaySound(data1,IntPtr.Zero, SND_ASYNC | SND_MEMORY);

}

حتما متوجه شدین من تو این کد دو تا فایل صوتی رو به صورت باینری لود کردم تو یه آرایه از نوع
[]byte ولی وقتی میخوام پخش کنم فقط یکیشون پخش میشه.آیا من تو این قطعه کد باید طور دیگه ای عمل کنم که این دو تا فایل پشت سر هم پخش بشن :!: :?: :idea:
ممنون

Vahid_Nasiri
پنج شنبه 06 آذر 1382, 08:13 صبح
لازم نیست لقمه را چند بار دور سر بچرخانید!


using System;
using System.Runtime.InteropServices;

namespace APITest
{
class clsAPI
{
[DllImport("winmm.dll")]
public static extern long PlaySound(string lpszName, long hModule, long dwFlags);

[STAThread]
static void Main(string[] args)
{
long retval;
string fname = "e:\\sounds\\hit.wav";

retval = PlaySound( fname, 0, 1 );
}
}
}

SSP_Software_team
یک شنبه 09 آذر 1382, 03:44 صبح
سلام استاد
استاد من خودم به این کد واقفم ولی شما احتمالا خوب متوجه نشدین من این دو فایل Wav رو از یه ریسورس فایل بازیابی خواهم کرد در اینجا چون خواستم مشکلی در فهم اون پیش نیاد اونهارو از رو هارد لود کردم البته در اینجا هم میبینید که من اونهارو به مقادیر باینری تبدیل کردم من این فایلهای صوتی رو از یک فایل واحد که چند تا فایل صوتی توی اون ذخیره شدن لود خواهم کرد بعد میخوام این مقادیر باینری رو توری تو یه آرایه قرار بدم که بلافاصله بعد از پخش شدن اولین مقدار دومین پخش بشه و الی آخر حالا اگه این کد رو رو کامپیوتر خودتون اجرا کنین میبینین که فقط اولی پخش میشه چرا
ممنون

SSP_Software_team
دوشنبه 10 آذر 1382, 01:58 صبح
:?: :!:

SSP_Software_team
سه شنبه 11 آذر 1382, 01:33 صبح
این خیلی برام مهم هستش خواهشن هر کدوم از دوستان اگه چیزی میدونن بگن :roll:

may_csharp
سه شنبه 11 آذر 1382, 10:30 صبح
باید تو <span dir=ltr>Header File </span> دست ببری
این یه ذره کارو سخت میکنه
این کد رو بخون شاید متوجه بشی

SSP_Software_team
چهارشنبه 12 آذر 1382, 06:34 صبح
ببخشید لطفا به کدی که من نوشتم نگاه کنید


public const UInt32 SND_ASYNC = 1;
public const UInt32 SND_MEMORY = 4;

&#91;DllImport&#40;"Winmm.dll"&#41;&#93;
public static extern bool PlaySound&#40;byte&#91;&#93; data, IntPtr hMod, UInt32 dwFlags&#41;;

private void button1_Click&#40;object sender, System.EventArgs e&#41;
&#123;
System.IO.FileStream&#91;&#93; input = new System.IO.FileStream&#91;2&#93;;
&#123;
input&#91;0&#93; = new System.IO.FileStream&#40;"f&#58;\\1.wav",System.IO.FileMode.Open,
System.IO.FileAccess.Read&#41;;
input&#91;1&#93; = new System.IO.FileStream&#40;"f&#58;\\2.wav",System.IO.FileMode.Open,
System.IO.FileAccess.Read&#41;;
&#125;

byte&#91;&#93; data1 = new byte&#91;input&#91;0&#93;.Length + input&#91;1&#93;.Length&#93;;

input&#91;0&#93;.Read&#40;data1,0,&#40;int&#41;input&#91;0&#93;.Length&#41;;
input&#91;0&#93;.Close&#40;&#41;;

input&#91;1&#93;.Read&#40;data1,&#40;int&#41;input&#91;0&#93;.Length,&#40;int&#41;inpu t&#91;1&#93;.Length&#41;;
input&#91;1&#93;.Close&#40;&#41;;

PlaySound&#40;data1,IntPtr.Zero, SND_ASYNC | SND_MEMORY&#41;;

&#125;

مشکل من اینه که این دو فایل Wav که به بایت کد تبدیل شدن پشت سر هم پخش نمیشن یه بار این کد رو رو کامپیوتر خودتون کامپایل کنین متوجه مشکل میشین :!:
در اینجا فقط بایت کد های مربوط به input[0] پخش میشن.
ممنون

may_csharp
چهارشنبه 12 آذر 1382, 10:00 صبح
بابا همینجوری که دو تا فایل رو نمیشه به هم بچسبونی
فایل هایی مثل wav یه Header دارند یه footer

در این فایلها RIFF WAVE وجود دارد
تو باید از فایل اول بایتهای کی اتمام صدا رو اعلام میکنن ور داری
نو فایل دوم هم Hearder رو حذف کنی
انوقت یه Header جدید بسازی
به ذره سخته
ولی میشه
من که وقت ندارم برات بنویسم :wink:

این فایل رو بخون متوجه میشی :?:

SSP_Software_team
شنبه 15 آذر 1382, 03:57 صبح
ممنون :wink: