نمایش نتایج 1 تا 9 از 9

نام تاپیک: API

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آبان 1382
    محل زندگی
    ایران - تهران - تهران پارس
    پست
    237

    API

    استاد من یه قطعه کد به این صورت نوشتم

    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)inp ut[0].Length);
    input[0].Close();

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

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

    }

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

  2. #2
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342
    لازم نیست لقمه را چند بار دور سر بچرخانید!

    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 );
    }
    }
    }

  3. #3
    کاربر دائمی
    تاریخ عضویت
    آبان 1382
    محل زندگی
    ایران - تهران - تهران پارس
    پست
    237
    سلام استاد
    استاد من خودم به این کد واقفم ولی شما احتمالا خوب متوجه نشدین من این دو فایل Wav رو از یه ریسورس فایل بازیابی خواهم کرد در اینجا چون خواستم مشکلی در فهم اون پیش نیاد اونهارو از رو هارد لود کردم البته در اینجا هم میبینید که من اونهارو به مقادیر باینری تبدیل کردم من این فایلهای صوتی رو از یک فایل واحد که چند تا فایل صوتی توی اون ذخیره شدن لود خواهم کرد بعد میخوام این مقادیر باینری رو توری تو یه آرایه قرار بدم که بلافاصله بعد از پخش شدن اولین مقدار دومین پخش بشه و الی آخر حالا اگه این کد رو رو کامپیوتر خودتون اجرا کنین میبینین که فقط اولی پخش میشه چرا
    ممنون

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آبان 1382
    محل زندگی
    ایران - تهران - تهران پارس
    پست
    237
    :?: :!:

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آبان 1382
    محل زندگی
    ایران - تهران - تهران پارس
    پست
    237
    این خیلی برام مهم هستش خواهشن هر کدوم از دوستان اگه چیزی میدونن بگن :roll:

  6. #6
    باید تو <span dir=ltr>Header File </span> دست ببری
    این یه ذره کارو سخت میکنه
    این کد رو بخون شاید متوجه بشی

  7. #7
    کاربر دائمی
    تاریخ عضویت
    آبان 1382
    محل زندگی
    ایران - تهران - تهران پارس
    پست
    237
    ببخشید لطفا به کدی که من نوشتم نگاه کنید

    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;inp ut&#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;input&#91;1&#93;.L ength&#41;;
    input&#91;1&#93;.Close&#40;&#41;;

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

    &#125;

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

  8. #8
    بابا همینجوری که دو تا فایل رو نمیشه به هم بچسبونی
    فایل هایی مثل wav یه Header دارند یه footer

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

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

  9. #9
    کاربر دائمی
    تاریخ عضویت
    آبان 1382
    محل زندگی
    ایران - تهران - تهران پارس
    پست
    237
    ممنون :wink:

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •