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

نام تاپیک: تبدیل سیگنال به یکسری اعداد

  1. #1
    کاربر دائمی آواتار group45
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کرمان
    سن
    36
    پست
    549

    تبدیل سیگنال به یکسری اعداد

    با سلام
    آیا در سی شارپ این قابلیت هست که یه سیگنالو بش بدیم و بعد اون سیگنال رو به یکسری اعداد تبدیل کنه؟؟؟؟؟؟؟؟ مثل matlab


    با تشکرات عدیده.........

  2. #2
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    نقل قول: تبدیل سیگنال به یکسری اعداد

    سیگنال خودش آرایه ای از عدده. میشه منظورتون رو از سیگنال مشخص تر بگید؟

  3. #3
    کاربر دائمی آواتار group45
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کرمان
    سن
    36
    پست
    549

    نقل قول: تبدیل سیگنال به یکسری اعداد

    ممنون از شما
    میخوام یه صدایی رو ضبط کنم بعد از بین چند تا صدا اونو تشخیص بده

  4. #4
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    نقل قول: تبدیل سیگنال به یکسری اعداد

    نقل قول نوشته شده توسط group45 مشاهده تاپیک
    ممنون از شما
    میخوام یه صدایی رو ضبط کنم بعد از بین چند تا صدا اونو تشخیص بده
    منظورم اینه که سیگنال را به چه صورتی در اختیار دارید؟
    اصلا برنامه هنوز صدا را Import کرده یا نه؟

  5. #5
    کاربر دائمی آواتار group45
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کرمان
    سن
    36
    پست
    549

    نقل قول: تبدیل سیگنال به یکسری اعداد

    سلام
    نه چطور میشه hmport کرد؟؟؟؟؟؟؟
    من میخواستم از متلب عددا رو بگیرم بعد روشون مقیسه رو انجام بدم
    ولی اگر میشه با سی شارپ سیگنال رو گرفت و تبدیل به اعداد کرد خوشحال میشم راهنماییم کنید
    چون این جوریشو تا حالا کار نکردم

    ممنون

  6. #6
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    نقل قول: تبدیل سیگنال به یکسری اعداد

    سلام
    بیچاره شدم. آخرش هم اون جوری که می خواستم نشد. این گوگل هم فقط آشغال بالا میاره!
    یک برنامه ی دست و پا شکسته فعلا نوشتم.
    شما فقط این کار رو بکن:
    Play
    Stop
    Stream
    این سه تا دکمه را پشت سر هم بزن. به Open هم کاری نداشته باش. کار نمی کنه.
    بعد از زدن Stream حداکثر یک دقیقه باید صبر کنی.
    بعد Sream فایل برات نمایش داده میشه.
    تحقیق کردم و دیدم انگار Stream فایل Wav خود همون بایت های نوشته شده در اون هست. شما یک بار این کار را با C#‎‎‎ انجام یده. یک بار هم فایل Modern.wav را با متلب باز کن. من ویندوزم جدید هست و متلبم هم قدیمی برای همین نمی تونم اون را اجرا کنم. شما ببین هر دو یک جواب را بهت میدند یا نه.
    این تازه فقط مال wav بود. در مورد mp3 که دیگه نمی دونم چه عزایی باید بگیریم!
    خدا پدر اونی را که متلب رو ساخته خیر بده!
    فایل های ضمیمه فایل های ضمیمه

  7. #7
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    نقل قول: تبدیل سیگنال به یکسری اعداد

    این رو هم ببین:
    http://www.barnamenevis.org/sh...86&postcount=6
    شاید به دردت بخوره.
    ولی من بلد نیستم چطور میشه استریم یک mp3 را بیرون کشید.

  8. #8
    کاربر دائمی آواتار group45
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کرمان
    سن
    36
    پست
    549

    نقل قول: تبدیل سیگنال به یکسری اعداد

    با سلام و تشکر از زحمتی که کشیدید

    یه چیزایی رو تو این برنامه متوجه نمیشم:
    1-از چه یوزینگی واسه sound player استفاده کردید؟
    2-چرا صدای شروع ویندوز رو فقط ضبط میکنه؟(چطور میشه تغییرش داد به صدای میکروفن)؟
    یا لاعقل هدایتش کرد به صدای ضبط شده
    3-
     sp.Stream = Properties.Resources.Modern; 
    کارش چیه؟(مخصوصا طرف راست تساوی!)
    4-
     sp.Stream.Seek(0, System.IO.SeekOrigin.Begin); 
    کارش چیه؟
    5-
    char[] myStrChars = new char[buffer.Length * 10]; 
    چرا 10 برابر شده؟
    6-
     Application.DoEvents(); 
    این یعنی چه؟؟؟؟؟


    ببخشید اگه زیادی پرسیدم چون اگه متوجه یه خط کد نشم دیگه چیزی نمی فهمم

    با تشکرات عدیده............................

  9. #9
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    نقل قول: تبدیل سیگنال به یکسری اعداد

    اتفاقا سوالات خوبی پرسیدید.
    راستش خودم هم به جواب برخی از این سوال ها وقتی پی بردم که برنامه را شروع کردم به نوشتن.

    1-از چه یوزینگی واسه sound player استفاده کردید؟
    از:
    using System.Media;

    لازم نیست که یک Reference به برنامه اضافه بشه. همین خط کافیه.

    -چرا صدای شروع ویندوز رو فقط ضبط میکنه؟(چطور میشه تغییرش داد به صدای میکروفن)؟
    یا لاعقل هدایتش کرد به صدای ضبط شده
    3-
     sp.Stream = Properties.Resources.Modern; 
    کارش چیه؟(مخصوصا طرف راست تساوی!)
    راستش صدایی که گذاشته بودم صدای شروع ویندوز نبود. ولی چون حجم فایل Upload شده محدودیت داره اون را با یک فایل دیگه عوض کردم.(از اسمش مشخصه) :D
    اگه خواستی جای فایل صوتی را بدونی اون را می تونی در شاخه ی Resources پیدا کنی.
    مشکل اساسی و مایوس کننده ی من همین جاست!
    کلا احساس می کنم مایکروسافت دوست داره که همیشه ظاهر همه چیز رو قشنگ کنه. دیگه کاری به وجدان کاری نداره. مثلا اگه یک کنترل بده دستت فقط می تونی کلیاتش رو کنترل کنی. حالا اگه کارت به جزییاتش افتاد بیچاره میشی. فقط ظاهر کنترل خیلی شیک و با کلاسه.
    خداییش برو داخل همون کنترل ببین چند تا تابع در اختیارت قرار داده؟ خلاصه ی کلام، Stop و Play
    کلی پیگیرش شدم که شاید تنها امیدمون به همین Stream ش باشه.
    مسئله اینه که در یک سری از سایت ها چنین عبارتی را می دیدم:
    SoundPlayer.Stream = Properties.Resources.Windows_Start

    هیچ توضیحی هم نداده بودند که همون عبارت سمت راست چه معنی داره. تا آخر فهمیدم که Windows_Start باید یکی از Resource های برنامه ت باشه. یعنی بری داخل Resource و بعد نوع آیتم ها رو از نوع صوتی انتخاب کنی و بعد یک فایل(از نوع wav) را با این عنوان به برنامه اضافه کنی.
    مشکل من هم همین جاست. دوست داشته بودم که مثل Image.FromFile میشد این کار رو به شکل RunTime انجام داد. البته در اینجا هم میشه. اما مشکل اینجاست که Stream رو دیگه در اختیار نداریم. یا لااقل من بلد نیستم. اگه راهش رو پیدا کردید به من هم خبر بدید.

    4-
     sp.Stream.Seek(0, System.IO.SeekOrigin.Begin); 
    کارش چیه؟
    اولش برنامه این خط رو نداشت و stream رو نمی خوند. بعد از یکم بررسی فهمیدم که خود Play میاد و فایل رو تا آخر می خونه. برای همین هم Stream به خط آخر رسیده و باید با این دستور اون را به اول خط برگردوند.

    5-
    char[] myStrChars = new char[buffer.Length * 10]; 
    چرا 10 برابر شده؟
    ممکنه تعجب کنی که چرا به جای اینکه یکی یکی کاراکتر ها را به یک string اضافه کنم اومدم همه رو در یک آرایه از کاراکترها ریختم و بعد آرایه را به رشته تبدیل کردم؟
    خوب اولش هم همین کار را کرده بودم. یعنی کاراکترها یکی یکی به string اضافه میشدند. کدهایی شبیه به این:
    if (b != -1)
    textBox1.Text+=b;
    ,
    textBox1.Text+=", ";


    اما دیدم برنامه فجیع هنگ می کرد.
    اون عبارتی هم که درصد پروسه رو نشون میداد رو همین جا بود که به برنامه اضافه کردم که ببینم چه خبره.
    1% اول رو در 12 ثانیه می رفت.
    بعد هر یک درصد که جلو میرفت کندتر و کندتر میشد. طوری که در عرض شاید 5 دقیقه به %7 می رسید.
    برنامه را گهگاه Pause می کردم. می دیدم دقیقا سر همین دو خط که مربوط به افزودن به رشته هست متوقف میشه. یعنی برنامه سر این خطوط داره وقت تلف می کنه. تازه فهمیدم که درسته که کلاس string خیلی با حاله ولی خیلی هم کنده و کند بودنش در جملات طولانی مثل اینجا مشخص میشه. در برخی زبانها ترجیح داده میشه که از آرایه ای از کاراکترها به جای یک کلاس استفاده بشه. شاید دلیلش همین سرعتش باشه. زمانی که یک string جا کم میاره و فضای اضافی طلب می کنه، باید دوباره تولید بشه. خودت حسابش را بکن چه بلایی سر حافظه میاره. آخرش مجبور شدم که رشته را در درون یک آرایه از کاراکترها قرار بدم و بعد با
    new string(myStrChars)

    اون را به رشته تبدیل کنم.
    پرسیدید چرا طول اون را برابر buffer.Length * 10 قرار دادم. خوب باید یک مقداری قرار داد که مطمئن باشیم عبارت از اون حد سرریز نمی کنه. هر عدد حداکثر سه رقمه و دو کاراکتر هم برای نشانه گذاری به کار میره. یعنی 5 کاراکتر. من دیگه دست و دل باز بودم 10 تا گرفتم.

    6-
     Application.DoEvents(); 
    این یعنی چه؟؟؟؟؟
    خوب زمانی که داری یک پروسه ی سنگین را انجام میدی کنترل برنامه داخل یک لوپ قرار داره و بنابراین برنامه وقت آزاد برای اجرای Event ها پیدا نمی کنه. برای همین ویندوز برای برنامه ی ما No Respond میده. در حقیقت هر از گاه صدا زدن دستور
    Application.DoEvents();

    مثل تپاندن قلب رویدادهای برنامه ی ماست. تا برنامه از حالت گرفتگی و جمود در بیاد. مثلا بشه روی پنجره ی اون کلیک کرد یا اون را Maximize ، Minimize و یا Resize کرد. خلاصه برنامه زیر فشار سنگین هم باید عکس العمل های حیاتی از خودش نشون بده.
    البته باید توجه داشت که بعضی ها توی هر لوپ حلقه این دستور را صدا می زنند. که این کار باعث کند شدن برنامه میشه. به هر حا اجرای این تابع هم زمان می بره. بهتره که هر چند حلقه یک بار صدا زده بشه.

    آدم گاهی تو برنامه نویسی اذیت میشه اما یک چیزایی یاد میگیره که ارزشش رو داره.
    مثلا تا دیروز نمی دونستم که string ها این قدر کند هستند.
    اگه راهش رو تونستی تا آخر بری من رو بی خبر نگذار.

  10. #10
    کاربر دائمی آواتار group45
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کرمان
    سن
    36
    پست
    549

    نقل قول: تبدیل سیگنال به یکسری اعداد

    با سلام و تشکرات ویژه از شما

    توضیحات شما واقعا کارگشا بود

    if (b != -1)
    textBox1.Text+=b;
    ,
    textBox1.Text+=", ";


    شما همین کد رو استفاده کن ولی بجای تکست باکس از ریچ تکست باکس استفاده کن ببین تغییری میکنه چون یه جایی خوندم سرعت ریچ نسبت به تکست تو مقادیر زیاد بیشتره.
    فعلا دارم روشون کار میکنم به چیزی رسیدم حتما خبرتون می کنم

  11. #11
    کاربر دائمی آواتار group45
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کرمان
    سن
    36
    پست
    549

    نقل قول: تبدیل سیگنال به یکسری اعداد

    یه نگاه به این بنداز

    http://www.codeproject.com/KB/audio-video/cswavrec.aspx

  12. #12
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    نقل قول: تبدیل سیگنال به یکسری اعداد

    نقل قول نوشته شده توسط group45 مشاهده تاپیک
    if (b != -1)
    textBox1.Text+=b;
    ,
    textBox1.Text+=", ";


    شما همین کد رو استفاده کن ولی بجای تکست باکس از ریچ تکست باکس استفاده کن ببین تغییری میکنه چون یه جایی خوندم سرعت ریچ نسبت به تکست تو مقادیر زیاد بیشتره.
    فعلا دارم روشون کار میکنم به چیزی رسیدم حتما خبرتون می کنم
    دو مرحله وقفه در برنامه ایجاد میشه. یکی برای ایجاد رشته(که ربطی به TextBox) نداره و در هر حال وجود داره. و تنها راهش اینه که به جای string از آرایه ای از کاراکترها استفاده کرد. همون موردی بود که گفتم اذیت می کرد. مورد دوم render شدن گرافیکی رشته درون TextBox هست که احتمالا منظور شما همین مورد هست. در این مورد شاید این طور بشه.

  13. #13
    کاربر دائمی آواتار group45
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کرمان
    سن
    36
    پست
    549

    نقل قول: تبدیل سیگنال به یکسری اعداد

    با سلام من از این کدا استفاده کردم ولی طبق گفته شما خیلی کنده (به هرحال)
    بعضی از اعدادش با اعداد شما فرق می کنه(البته 1000 تای اولشو حساب کردم)
    میدونید چرا این طوری شده؟؟؟؟؟؟؟


    FileStream fs = new FileStream(@"c:\modern.wav", FileMode.Open,FileAccess.Read);
    public string s = null;
    public byte[] bt;
    private void Form1_Load(object sender, EventArgs e)
    {
    button2.Enabled = false;
    //BinaryReader br = new BinaryReader(fs);
    StreamReader sr = new StreamReader(fs);
    fs.Position = 0;
    for(int i=0;i<1000;i++)
    {
    richTextBox1.Text += sr.Read();
    richTextBox1.Text += " , ";
    Application.DoEvents();
    }

    }


    اینم از اعداد تولید شده:

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

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