استفاده از کارت صدا در محیط های C , C++ , C#

m_kh_m

عضو جدید
سلام به دوستان

اول تشکر از دوستانی که مارو قابل دونستند و پیام ما رو بی جواب نذاشتن :w36::w36::w36:

تواین تاپیک یکی از مهمترین مسائلی که حد اقل بنده باهاش درگیر هستم و اطمینان دارم خیلی از دوستان هم با اون مشکل دارند مطرح میشه :question::question:

صورت مسئله = اسم تاپیک

جذییات اونچه که خودم نیاز دارم رو هم تو پست های بعدی مطرح می کنم

ان شا ا... که این تاپیک مفید باشه

;);););)

:lol::lol::lol::lol:
 

m_kh_m

عضو جدید
بنده برای پروژه مبانی برنامه نویسی نیاز به تولید صدا با زبان برنامه نویسی C و ترجیحاً C++ دارم

در اصل نمی دونم که از چه هدر فایل ها و توابعی برای تولید صدا استفاده کنم

البته استاد راهنمایی کردند که کار پروژه رو با C++ و MATLAB انجام بدم

و همینطور بگم که با هر دو زبان آشنایی خوبی دارم

ممنون میشم اگه کمک کنید به صورت :

1- سورس کد به عنوان مثال

2- منبعی برای پیدا کردن آنچه نیاز دارم مثلا کتابی و یا اینکه خودتون زحمتش رو بکشید و منبعی رو برای دانلود بذارید

3- یکی از مهم ترین چیز هایی که ذهنمو مشغول کرده استفاده از زبان MATLAB تحت C++ هستش در این مورد هم راهنمایی بفرمایید

و غیره و غیره

راستی در مورد پی دی اف زیر هم نظر بدید

http://www.imeko.org/publications/tc4-2008/IMEKO-TC4-2008-108.pdf




ممنون :gol::gol::gol::gol::gol::gol::gol:
 

Erfan_K

عضو جدید
کاربر ممتاز
سلام مجدد دوست عزیز
اینکه کارت صدا مثلا آهنگ باشه رو من ندیدم ولی بوق زدن رو نوشتم باهاش که فک نمی کنم استاد مبانیتون از این بیشتر بخواد . شما هر وقت میخوای صدا دشته باشی باید یک a\ بنویسی . درواقع این کار باعث بوق زدن میشه
cout << "\a" ;
به این صورت
 

fjalili

عضو جدید
کار کردن با صدای سیستم

کار کردن با صدای سیستم

دوست عزیز،

کار کردن با صدا معانی مختلفی داره که بهتر بود که میگفتید چه کاری میخواهید انجام دهید تا بشود بهتر راهنمایی کرد ولی به طور خلاصه سعی میکنم مواردی که به نظرم میرسد را بیان کنم.

برای کار کردن با صدای سیستم لازم نیست که با کارت صدا مستقیماً ارتباط برقرار کنید و دستوراتی برای آن پیش بینی شده است
اگر بخواهید فایلی که به صورت فایل صوتی است را پخش کنید، لازم است که از دستور PlaySound استفاده کنید. مثالی از این دستور:
کد:
#include <iostream>
#include <windows.h> // for PlaySound()

#define SND_FILENAME 0x20000
#define SND_LOOP 8
#define SND_ASYNC 1

using namespace std;

int main()
{
// play sound as loop (remove SND_LOOP for one time play)
// file boing.wav has be in the working directory
PlaySound("boing.wav",NULL,SND_FILENAME|SND_LOOP|SND_ASYNC); 

cin.get(); // wait
return 0;
}

اگر بخواهید صدای فرکانس بخصوصی را در مدت زمان مشخصی پخش کنید میتوانید از دستور Beep استفاده کنید:
کد:
#include <iostream> 
#include <windows.h> // WinApi header 

using namespace std; 

int main() 
{ 
Beep(523,500); // 523 hertz (C5) for 500 milliseconds 
Beep(587,500); 
Beep(659,500); 
Beep(698,500); 
Beep(784,500); 

cin.get(); // wait 
return 0; 
}

در این زبان header فایلی به نام sound.h هم وجود دارد که میتوانید از لینک زیر اطلاعات کاملی از کلاس تعریف شده در آن و توابع موجود آن سر در بیاورید:
http://brickos.sourceforge.net/docs/APIs/html-c++/classSound.html

باز هم اگر بیشتر خواستید بگویید تا اگر میدانستم کمکتان کنم.

پر انرژی باشید.
 

m_kh_m

عضو جدید
با تشکر از دوستان ;);)

در عمل من پروژم تولید صدای محاسبه شده از طریق کارت صدای کامپیوتره

دوست عزیزمون که در مورد BEEP توضیح دادند و همین طور اجرای فایل های صوتی ، این موارد رو با SEARCH میشه تو فضای اینترنت پیدا کرد ولی تولید صدا چیز نایابیه

البته چیزی به نام WINSOUND هم به نظرم رسید که میتونه کاربردی باشه ولی باهاش آشنایی ندارم

راستی یه سر به آدرس زیر برید :



به نظر شما کدوم هدر و کدوم توابع به کار میان؟

مورد دیگه اینکه اگر امکانش هست در مورد استفاده از MATLAB تحت زبان های C توضیح بدید

خود MATLAB یه سری TOOLBOX هایی داره که کاربردیه و کلاً برای ارتباط با کارت صدای کامپیوتر مناسبه و گیر اصلی سر کار کردن با اون تحت C هست

یعنی مثلا توابعی رو با MATLAB بنویسیم که بتونه صدا رو با شکل موج مطلوب تولید کنه مثلا تابعی که موج سینوسی ایجاد بکنه

در اصل ایده کار اون PDF که گذاشتم رو پیاده سازی بکنم

چون کارم تا حدود زیادی با اون راه میفته

در این مورد هم اگر راهنمایی بکنید ممنون میشم

;);)
 

m_kh_m

عضو جدید
با تشکر از دوستان ;);)

در عمل من پروژم تولید صدای محاسبه شده از طریق کارت صدای کامپیوتره

دوست عزیزمون که در مورد BEEP توضیح دادند و همین طور اجرای فایل های صوتی ، این موارد رو با SEARCH میشه تو فضای اینترنت پیدا کرد ولی تولید صدا چیز نایابیه

البته چیزی به نام WINSOUND هم به نظرم رسید که میتونه کاربردی باشه ولی باهاش آشنایی ندارم

راستی یه سر به آدرس زیر برید :



به نظر شما کدوم هدر و کدوم توابع به کار میان؟

مورد دیگه اینکه اگر امکانش هست در مورد استفاده از MATLAB تحت زبان های C توضیح بدید

خود MATLAB یه سری TOOLBOX هایی داره که کاربردیه و کلاً برای ارتباط با کارت صدای کامپیوتر مناسبه و گیر اصلی سر کار کردن با اون تحت C هست

یعنی مثلا توابعی رو با MATLAB بنویسیم که بتونه صدا رو با شکل موج مطلوب تولید کنه مثلا تابعی که موج سینوسی ایجاد بکنه

در اصل ایده کار اون PDF که گذاشتم رو پیاده سازی بکنم

چون کارم تا حدود زیادی با اون راه میفته

در این مورد هم اگر راهنمایی بکنید ممنون میشم

;);)

راستی ببخشید « آدرس زیر» رو نذاشتم :

http://home.att.net/~gobruen/progs/cpp/headers.html

:whistle::whistle::whistle:

:redface::redface:

:lol:
 

Arash_Sn

عضو جدید
کسی که میخواسته از کارت صدا و MATLAB استفاده کنه بیشتر قصد ساختن یک سیستم کنترلی داشته تا یک پخش صدا.
شما میتونید با Data Acquisition Toolbox در MATLAB از طریق کارت صدا اطلاعات محیطی را جمع آوری کنی و پس از پردازش در محیط متلب آنرا در خروجی کارت صدا بصورت خروجی داشته باشید. حال فرقی نمکنه که این اطلاعات صدا باشه یا دمای منزل شما. پس از پردازش این اطلاعات در خروجی کارت صدا ولتاژ داری، که میتونه با اتصال به بلندگو برای شما صدا ایجاد کنه و یا با اتصال به یک شیر آنالوگ میزان گاز ورودی به بخاری منزل شما را کنترل کنه و در نتیجه دمای منزل شما کنترل شود.
برای این منظور ابتدا یک شی در متلب ایجاد کن.

کد:
myInput= analoginput('winsound')
و مثل هر A/D کارت دیگر برای شی خود کانال ورودی تعریف کن
کد:
addchannel(myInput,1:2)

حالا کارت صدا شما برای دریافت اطلاعات آماده است.

کد:
start(ai)
برای دیدن اطلاعات بدست آمده میتونی بنویسی
کد:
mydata = peekdata(ai,500);
حالا پس از پردازش برروی همین دیتا برای خروجی همین کاری که برای ورودی انجام شد ، انجام بده.
در مورد اجرای برنامه متلب تحت C منظورت اگر فراخوانی تابع موجود در یک m-file در برنامه C میباشد به صورت زیر عمل کنید.
ابتدا Header زیر را به سورس C خودت اضاقه کن
کد:
#include "mex.h"
و هرجا که خواستی تابع متلب را فراخوانی کنی از تابع زیر استفاده کن

کد:
int mexCallMATLAB(int nlhs, mxArray *plhs[], 
int nrhs, mxArray *prhs[], const char *name);
در مورد فایل pdf که گذاشتی، ما دقیقاً پروژهای داشتیم که مثل همین پروژه و با سخت افزار A/D ساخت شرکت National Instruments انجام دادیم اما در سطح خیلی بالاتر و با لینک به #C و LabView و درایور DAQmx . اگر خواستی بعداً بیشتر راجع به آن توضیح میدم.
در ضمن خاطره جالبی در این پروژه دارم که یادم بنداز براتون در وقتی دیگه تعریف کنم.



 

m_kh_m

عضو جدید
کسی که میخواسته از کارت صدا و MATLAB استفاده کنه بیشتر قصد ساختن یک سیستم کنترلی داشته تا یک پخش صدا.
شما میتونید با Data Acquisition Toolbox در MATLAB از طریق کارت صدا اطلاعات محیطی را جمع آوری کنی و پس از پردازش در محیط متلب آنرا در خروجی کارت صدا بصورت خروجی داشته باشید. حال فرقی نمکنه که این اطلاعات صدا باشه یا دمای منزل شما. پس از پردازش این اطلاعات در خروجی کارت صدا ولتاژ داری، که میتونه با اتصال به بلندگو برای شما صدا ایجاد کنه و یا با اتصال به یک شیر آنالوگ میزان گاز ورودی به بخاری منزل شما را کنترل کنه و در نتیجه دمای منزل شما کنترل شود.
برای این منظور ابتدا یک شی در متلب ایجاد کن.

کد:
myInput= analoginput('winsound')
و مثل هر A/D کارت دیگر برای شی خود کانال ورودی تعریف کن
کد:
addchannel(myInput,1:2)

حالا کارت صدا شما برای دریافت اطلاعات آماده است.

کد:
start(ai)
برای دیدن اطلاعات بدست آمده میتونی بنویسی
کد:
mydata = peekdata(ai,500);
حالا پس از پردازش برروی همین دیتا برای خروجی همین کاری که برای ورودی انجام شد ، انجام بده.
در مورد اجرای برنامه متلب تحت C منظورت اگر فراخوانی تابع موجود در یک m-file در برنامه C میباشد به صورت زیر عمل کنید.
ابتدا Header زیر را به سورس C خودت اضاقه کن
کد:
#include "mex.h"
و هرجا که خواستی تابع متلب را فراخوانی کنی از تابع زیر استفاده کن

کد:
int mexCallMATLAB(int nlhs, mxArray *plhs[], 
int nrhs, mxArray *prhs[], const char *name);
در مورد فایل pdf که گذاشتی، ما دقیقاً پروژهای داشتیم که مثل همین پروژه و با سخت افزار A/D ساخت شرکت National Instruments انجام دادیم اما در سطح خیلی بالاتر و با لینک به #C و LabView و درایور DAQmx . اگر خواستی بعداً بیشتر راجع به آن توضیح میدم.
در ضمن خاطره جالبی در این پروژه دارم که یادم بنداز براتون در وقتی دیگه تعریف کنم.




بسیار ممنون از لطفتون

فکر کنم در نهایت برای انجام پروژم باید تابع های مورد نظرم رو با MATLABبنویسم و تو C فراخوانی کنم و استفاده

البته یه جایی در مورد تولید صدای محاسبه شده با MATLAB مطلبی پیدا کردم که فکر کنم شما هم ببینید ضرری نداره و در مردش نظر بدید :

http://stackoverflow.com/questions/1452455/how-do-you-generate-tone-frequencies-in-matlab

باز هم ممنون

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

ممنون

;) :w16: :book:
 

m_kh_m

عضو جدید

در مورد اجرای برنامه متلب تحت C منظورت اگر فراخوانی تابع موجود در یک m-file در برنامه C میباشد به صورت زیر عمل کنید.
ابتدا Header زیر را به سورس C خودت اضاقه کن
کد:
#include "mex.h"
و هرجا که خواستی تابع متلب را فراخوانی کنی از تابع زیر استفاده کن

کد:
int mexCallMATLAB(int nlhs, mxArray *plhs[], 
int nrhs, mxArray *prhs[], const char *name);
در مورد فایل pdf که گذاشتی، ما دقیقاً پروژهای داشتیم که مثل همین پروژه و با سخت افزار A/D ساخت شرکت National Instruments انجام دادیم اما در سطح خیلی بالاتر و با لینک به #C و LabView و درایور DAQmx . اگر خواستی بعداً بیشتر راجع به آن توضیح میدم.
در ضمن خاطره جالبی در این پروژه دارم که یادم بنداز براتون در وقتی دیگه تعریف کنم.



[/LEFT]
[/RIGHT]
[/LEFT]
[/RIGHT]
[/LEFT]
[/RIGHT]
[/LEFT]
[/RIGHT]

راستی در مورد اون کدی که برای فراخوانی گفتید که استفاده کنم ، میشه بیشتر توضیح بدید

درست شیر فهم نشدم :question:

راستی اگر منبعی مد نظر دارید که میتونه کمک کنه معرفی کنید :book:

یه جوری که خیر دنیا و آخرتمونو ببریم دیگه :lol: :w16:

ممنون ;)
 

Arash_Sn

عضو جدید
بسیار ممنون از لطفتون

فکر کنم در نهایت برای انجام پروژم باید تابع های مورد نظرم رو با MATLABبنویسم و تو C فراخوانی کنم و استفاده

البته یه جایی در مورد تولید صدای محاسبه شده با MATLAB مطلبی پیدا کردم که فکر کنم شما هم ببینید ضرری نداره و در مردش نظر بدید :

http://stackoverflow.com/questions/1452455/how-do-you-generate-tone-frequencies-in-matlab

باز هم ممنون

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

ممنون

;) :w16: :book:


یکی دیگر از روشهای استفاده از MATLAB Functions ساختن dll از برنامه متلب و استفاده از آن در برنامه نوشته شده به زبان C میباشد.

لینکی که گذاشته بودی را دیدم ، تاپیکی که تو ساختی استفاده از کارت صداست که این یک مفهوم سخت افزاری داره اما در لینکی که گذاشتی فقط مفهوم نرم افزاری داره و نهایتاً ذخیره سازی فایل در فرمت wav میباشد. در هیچ جای آن اشارهای به کارت صدا نداره.

در ضمن موضوعی را که در آن لینک نویسنده به آن اشاره کرده درست نبود:


هنگام نمونه برداری از محیط آنالوگ باید توجه داشته باشید که فرکانسهای بالاتر از فرکانس مورد نظر خود را filter نمائید در غیر اینصورت مولفه های فرکانس بالا در فرکانسهای پائینتر بروز مینمایند و باعث آلودگی نمونه های شما میشوند که به آنها اصطلاحاً
Aliasing میگویند. به همین دلیل کارت های A/D در ورودی filterدارند که باعث حذف مولفهای فرکانس بالا میشود و این مشکل را حل مینمایند. البته امکان filterمولفه های فرکانس بالا بعد از نمونه برداری بصورت دیجیتال نیز وجود دارد که خیلی از دستگاههای پخش صدا و تصویر دیجیتال به کمک DSP اینکار را انجام میدهند. پس اگر میخواهید از صدا نمونه برداری کنید باید فرکانس بالاتر از 20 کیلو هرتز را حتماً حذف کنید.

اما بحث
Nyquist rate موضوعی دیگر است و مفهوم آن این است که شما برای نمونه برداری از یک محیط آنالوگ همیشه باید با فرکانس دو برابر فرکانس آنالوگ نمونه برداری کنی تا تمام باند مورد نظر خود را پوشش دهید. بطور مثال اگر شما بخواهید از صدای محیط نمونه برداری کنی چون گوش انسان تا حدود 20 کیلو هرتز را میشنود شما باید حداقل با فرکانس 40 کیلو نمونه در ثانیه نمونه برداری کنید تا کیفیت صدای اصلی را داشته باشید به همین دلیل کارت های صدا با فرکانس 44کیلو هرتز نمونه برداری مینمایند.


در ضمن نویسنده لینک مورد نظر توجه نکرده بود که خودش داره اطلاعات میسازه پس دلیلی برای ایجاد اطلاعات مستعار(aliasing) وجود نداره !!


 

m_kh_m

عضو جدید
یکی دیگر از روشهای استفاده از MATLAB Functions ساختن dll از برنامه متلب و استفاده از آن در برنامه نوشته شده به زبان C میباشد.

لینکی که گذاشته بودی را دیدم ، تاپیکی که تو ساختی استفاده از کارت صداست که این یک مفهوم سخت افزاری داره اما در لینکی که گذاشتی فقط مفهوم نرم افزاری داره و نهایتاً ذخیره سازی فایل در فرمت wav میباشد. در هیچ جای آن اشارهای به کارت صدا نداره.

در ضمن موضوعی را که در آن لینک نویسنده به آن اشاره کرده درست نبود:


هنگام نمونه برداری از محیط آنالوگ باید توجه داشته باشید که فرکانسهای بالاتر از فرکانس مورد نظر خود را filter نمائید در غیر اینصورت مولفه های فرکانس بالا در فرکانسهای پائینتر بروز مینمایند و باعث آلودگی نمونه های شما میشوند که به آنها اصطلاحاً
Aliasing میگویند. به همین دلیل کارت های A/D در ورودی filterدارند که باعث حذف مولفهای فرکانس بالا میشود و این مشکل را حل مینمایند. البته امکان filterمولفه های فرکانس بالا بعد از نمونه برداری بصورت دیجیتال نیز وجود دارد که خیلی از دستگاههای پخش صدا و تصویر دیجیتال به کمک DSP اینکار را انجام میدهند. پس اگر میخواهید از صدا نمونه برداری کنید باید فرکانس بالاتر از 20 کیلو هرتز را حتماً حذف کنید.

اما بحث
Nyquist rate موضوعی دیگر است و مفهوم آن این است که شما برای نمونه برداری از یک محیط آنالوگ همیشه باید با فرکانس دو برابر فرکانس آنالوگ نمونه برداری کنی تا تمام باند مورد نظر خود را پوشش دهید. بطور مثال اگر شما بخواهید از صدای محیط نمونه برداری کنی چون گوش انسان تا حدود 20 کیلو هرتز را میشنود شما باید حداقل با فرکانس 40 کیلو نمونه در ثانیه نمونه برداری کنید تا کیفیت صدای اصلی را داشته باشید به همین دلیل کارت های صدا با فرکانس 44کیلو هرتز نمونه برداری مینمایند.


در ضمن نویسنده لینک مورد نظر توجه نکرده بود که خودش داره اطلاعات میسازه پس دلیلی برای ایجاد اطلاعات مستعار(aliasing) وجود نداره !!





یکی دیگر از روشهای استفاده از MATLAB Functions ساختن dll از برنامه متلب و استفاده از آن در برنامه نوشته شده به زبان C میباشد.

خوب این که گفتین چطور میشه؟

اصولا از اینکه M-file بنویسم و استفاده بکنم بهتره

لطفا راهنمایی کنید

ممنون

;) :w16: :lol:
 

DeadlyWalker

عضو جدید
سلام
تا جایی که یادم می آد می گفتیم زبان های سطح بالا برای اهداف خاص طراحی می شن و
بی شک matlab برای اینکار نوشته نشده اما برای استفاده از کارت صدا XNA API یه Sound Engine خوب و ساده همراهش داره که البته فک کنم فقط برا #C :evil:
اگه خواستی بگو برات sample و توضیح بدم
 

Arash_Sn

عضو جدید
سلام
تا جایی که یادم می آد می گفتیم زبان های سطح بالا برای اهداف خاص طراحی می شن و
بی شک matlab برای اینکار نوشته نشده ..........


در پاسخت هم میتوان گفت بله و هم میتوان گفت نه!

متلب اصولاً یک زبان برنامه نویسی نیست هر چند شرکت Mathworks سعی داره با افزودن به تواناییهای این نرم افزار مثل شی گرائی و غیره به کاربرانش کمک کنه اما هنوز با یک زبان برنامه نویسی فاصله داره. متلب بیشتر یک ابزار مهندسی و علمی است (MATLAB=MATrix LABratory) و همینطور که از اسمش پیداست بیشتر بر مباحث ریاضی و کاربرد آن در مسائل علمی و مهندسی تکیه داره.

اما در مورد اینکه متلب برای اینکار ساخته شده باید گفت در بعضی موارد متلب بهترین راه حل هستش بستگی داره که شما در پروژه تان چه هدفی و چه نیازهائی داشته باشید. بطور مثال اگر شما قصد دارید بر روی اطلاعات ورودی و خروجی پردازش ریاضی پایه داشته باشید استفاده از متلب بهترین راه حله اما اگر بخواهید فقط اطلاعات را دریافت و سپس با تغییر فرمت آنرا انتقال دهید مسلماً متلب راه حل مناسبی نیست. من خودم در حال ساختن سیستمی هستم که باید از یک برخورد شدید نمونه برداری کنه و آنرا بصورت گراف در خروجی نمایش بده برای این کار من تمام برنامه را با #C نوشتم . اما فرض کنید شما میخواهید یک شبیه ساز پرواز بسازید که در آن صورت من به شما خواهم گفت در صورت استفاده از ابزار های بازی نویسی و یا سایر برنامه ها وقت خودتان را تلف کرده اید چونکه متلب هر آنچه که در این چنین پروژهائی لازم باشه داره.


//
 

Arash_Sn

عضو جدید
یکی دیگر از روشهای استفاده از MATLAB Functions ساختن dll از برنامه متلب و استفاده از آن در برنامه نوشته شده به زبان C میباشد.

خوب این که گفتین چطور میشه؟

اصولا از اینکه M-file بنویسم و استفاده بکنم بهتره

لطفا راهنمایی کنید

ممنون

;) :w16: :lol:



قرار نشد که من تمام پروژه ات را اینجا بنویسم!

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



//
 

m_kh_m

عضو جدید

قرار نشد که من تمام پروژه ات را اینجا بنویسم!

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



//

ساختن dll درست برام معلوم نیست که چطوره

منظورم اینه که یه فایل آموزشی از اینکه چطور میشه با matlab dll درست کرد بذارین

یا منبعی چیزی

در این مورد وارد نیستم چه باید بکنم

بهر حال ممنون

;)
 

m_kh_m

عضو جدید

قرار نشد که من تمام پروژه ات را اینجا بنویسم!

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



//

در اصل با اینکه چطوری فایل dll با matlab بسازم و اینکه چطور توی محیط VC++ ازش استفاده کنم آشنایی ندارم

در مورد اینها توضیح بدید

خودم کار های پروژمو انجام میدم

اینا رو بلد نیستم

کلا کدام بهتر است :

استفاده از dll؟

یا m-file ؟

;)
 

Arash_Sn

عضو جدید
در اصل با اینکه چطوری فایل dll با matlab بسازم و اینکه چطور توی محیط VC++ ازش استفاده کنم آشنایی ندارم

کلاً این کار توسط MATLAB Builder انجام میشود. برای شروع کار در محیط متلب تایپ کن deploytool بعد از این کار یک Pane جدید باز میشود که در آن مثل سایر محیطهای برنامه نویسی باید یک پروژه ایجاد کنی و به این پروژه فایلهای مورد نظر خودت را اضافه کنی هنگام کلیک روی New Deployment Project icon میتونی در پنجره جدید نوع پروژه ات را انتخاب کنی (برنامه Exe یا DLL ) و بعد از مراحل اولیه سپس با کلیک روی Build بقیه کار انجام میشود.



خودم کار های پروژمو انجام میدم
خیلی عالیه، خدا را شکر


اینا رو بلد نیستم
اشکالی نداره یاد میگیری. بقول یکی که میگفت: " مردان بزرگ راهی خواهند یافت و یا راهی خواهند ساخت."


کلا کدام بهتر است :

استفاده از dll؟

یا m-file ؟
این بستگی به خودت داره، اگر میخواهی روی یک کامپیوتر این کارها را انجام بدی شاید dll نسازی راحتتر باشه اما اگر میخواهید برنامه متلب را که نوشتی به کامپیوتر های دیگر انتقال بدی بهتر ه dll بسازی



//
 

m_kh_m

عضو جدید
کلاً این کار توسط MATLAB Builder انجام میشود. برای شروع کار در محیط متلب تایپ کن deploytool بعد از این کار یک Pane جدید باز میشود که در آن مثل سایر محیطهای برنامه نویسی باید یک پروژه ایجاد کنی و به این پروژه فایلهای مورد نظر خودت را اضافه کنی هنگام کلیک روی New Deployment Project icon میتونی در پنجره جدید نوع پروژه ات را انتخاب کنی (برنامه Exe یا DLL ) و بعد از مراحل اولیه سپس با کلیک روی Build بقیه کار انجام میشود.



خیلی عالیه، خدا را شکر


اشکالی نداره یاد میگیری. بقول یکی که میگفت: " مردان بزرگ راهی خواهند یافت و یا راهی خواهند ساخت."



این بستگی به خودت داره، اگر میخواهی روی یک کامپیوتر این کارها را انجام بدی شاید dll نسازی راحتتر باشه اما اگر میخواهید برنامه متلب را که نوشتی به کامپیوتر های دیگر انتقال بدی بهتر ه dll بسازی



//



ممنون از جواب های زیبا و بای شما

راستی یک سوال

خروجی ای که از MATLAB میشه گرفت چه محدودیت هایی داره؟

کلا از لحاظ فرکانس و سطح ولتاژ خروجی از کارت صدا و توان و ...

واقعا ممنونم که اگه نبودین مسیرمو نمی تونستم پیدا کنم

فعلا

;) :lol: ;)
 
آخرین ویرایش:

Arash_Sn

عضو جدید
خروجی ای که از MATLAB میشه گرفت چه محدودیت هایی داره؟

منظورت را متوجه نمی شوم !

بطور کلی خروجی های MATLAB Builder کاملاً استاندارد هستش و شما میتونید از آنها یا به صورت Standalone یا Library استفاده کنید. فقط توجه داشته باش که بهتره زمانی که کامپایلر متلب را تنظیم میکنی ( هنگام استفاده برای اولین بار متلب از شما درباره انتخاب کامپایلر سوال میکند و شما میتوانید از یکی از کامپایلرهای Borland و یا Microsoft Visual C استفاده کنید ) از همان کامپایلری استفاده کنی که در پروژه C خودت استفاده می کنی.


کلا از لحاظ فرکانس و سطح ولتاژ خروجی از کارت صدا و توان و ...
فرکانس ورودی و خروجی کارت صدا همانطور که در پست های قبلی به آنها اشاره شد 44kHz میباشد و شما برای Anti-aliasing باید در ورودی حتماً از Filter استفاده کنی.
در مورد ولتاژ در ورودی فکر میکنم حدود 1.7 ولت باشه و شما حتماً در ورودی باید از حفاظت استفاده کنی . در مورد خروجی هم به خاطر ندارم. میتونی با مراجعه به سایت سازنده کارت صدا از امپدانس خروجی کارت صدا مطمئن شوی.


واقعا ممنونم که اگه نبودین مسیرمو نمی تونستم پیدا کنم
خوشحالم که توانستم کمکی کنم!
 

m_kh_m

عضو جدید
راستی یسوال

من الان با MATLAB به راحتی میتونم صدا رو باشکل موج مورد نظرم تولید کنم

اما این صدا از اسپیکر موجود روی کارت صدا خارج میشه

برای اینکه صدا رو بتونم از یک اسپیکر خارجی بگیرم ، چکار باید بکنم؟

در اصل کانال خروجی صدا رو چطور میتونم تعریف کنم که صدا از کجا در بیاد؟

:question::question::question::question::question::question::question::question::question:

ممنون از پاسختون

:lol::lol::lol:
 

m_kh_m

عضو جدید
راستی این بکار میاد؟ ===> :

%%Open the analog device and channels
AO = analogoutput('winsound',0);
chan = addchannel(AO,1);



%% Set the sample rate and how long we will send data for
6 Data Acquisition
%% 44,100 Hz, 1 seconds of data

duration = 1;
SampleRate = 44100;
set(AO,'SampleRate',SampleRate)
set(AO,'TriggerType','Manual')
NumSamples = SampleRate*duration;



%% Create a signal that we would like to send, 500 Hz sin wave

x = linspace(0,2*pi*500,NumSamples);
data = sin(x)';



%% Put the data in the buffer, start the device, and trigger

putdata(AO,data)
start(AO)
trigger(AO)​
 

Arash_Sn

عضو جدید
راستی این بکار میاد؟ ===> :

%%Open the analog device and channels
AO = analogoutput('winsound',0);
chan = addchannel(AO,1);




بله، بکار میاد !
با سرعت خوبی پیش میروید. میبینم که trigger را هم تنظیم کردید. خیلی خوبه !

در ضمن برای داشتن صدا از اسپیکر خارجی کافیست جک اسپیکر خارجی را به کامپیوتر وصل کنید. به طور کلی کارت صدای شما دو کانال داره که مفهوم آن بلندگو چپ و راست هستش (صدای استریو) و مفهوم آن داخلی و خارجی نیست.



//
 

m_kh_m

عضو جدید
ممنون از لطفتون شرمنده کردین :redface:

خوب حالا بریم سراغ اینکه چطوری میشه از dll تو ++VISUAL Cاستفاده کرد

مثلا الان من تابعی تو MATLAB نوشتم و اونو تبدیل کردم به DLL

حالا چطور میتونم تو محیط ++C ازون استفاده کرد؟

اگه میشه یه مثال ساده بزنید تا بهتر برام جا بیفته :lol:

اگه این بخش کار هم حل بشه اطلاعات اولیم تکمیله و تست کردم و میرم تو کار نوشتن پروژم :w16: :w16: :w16:

بسیار از لطف شما سپاسگذارم :w36:

فعلا ;) ;) ;)
 

Arash_Sn

عضو جدید
خوب حالا بریم سراغ اینکه چطوری میشه از dll تو ++VISUAL Cاستفاده کرد

مثلا الان من تابعی تو MATLAB نوشتم و اونو تبدیل کردم به DLL

حالا چطور میتونم تو محیط ++C ازون استفاده کرد؟


همانطور که از سایر library ها در برنامه ++C میشه استفاده کرد. ابتدا فایل هدر مربوطه را به برنامه ++C خودتون اضافه کنید و سپس در بدنه برنامه از توابع ایجاد شده در متلب استفاده کنید. با چند بار سعی و خطا متوجه فرآیند میشوید. با توضیحات من یا دیگران شما برنامه نویس نخواهی شد.

اگه میشه یه مثال ساده بزنید تا بهتر برام جا بیفته :lol:
به Help متلب مراجعه کنی ، میتونی مثالهای مورد نیاز خودت را پیدا کنی!



//
 

m_kh_m

عضو جدید
سلام به آقا آرش گل گلاب :lol: :redface: :lol:

من تا جاهای خوبی پیش رفتم :w16::w16::w16::w16:

تونستم با MATLAB صدا تولید کنم

M-FILE اای بنویسم که صدا تولید کنه

M-FILE رو به DLL و همین طور HEADER FILE تبدیل کردم با MATLAB

با دستور MCC -M این کار رو کردم

در نهایت میخوام از این فایل ها توی برنامم استفاده کنم

در این مورد میخواستم راهنماییم کنید

ممنون :w36:

فعلا ;) ;) ;)
 

m_kh_m

عضو جدید
سلام

من کتاب زیر رو گرفتم که تو کارم از مطالبش استفاده کنم :

مرجع کامل Visual C++.NET ، نوشته Chris H.pappas و william H.murray ، ترجمه : مهندس مهرداد توانا ، مهندس سعید هراتیان ، انتشارات روزنه

:book: :book: :book: :book:

به نظرتون خوبه؟

بعد یه سوال :huh:

چطوری میشه یه برنامه نوشت که بشه تابع محاسباتی رو از بیرون بگیره؟

مثلا وقتی من تایپ کردم (y=sin(x اون رو به صورت فرمول بگیره :question: :question: :question:

ممنون ;)
 

Arash_Sn

عضو جدید
سلام به آقا آرش گل گلاب :lol: :redface: :lol:

من تا جاهای خوبی پیش رفتم :w16::w16::w16::w16:

تونستم با MATLAB صدا تولید کنم

M-FILE اای بنویسم که صدا تولید کنه

M-FILE رو به DLL و همین طور HEADER FILE تبدیل کردم با MATLAB

با دستور MCC -M این کار رو کردم

در نهایت میخوام از این فایل ها توی برنامم استفاده کنم

در این مورد میخواستم راهنماییم کنید

ممنون :w36:

فعلا ;) ;) ;)



خیلی خوبه،

اما یک کمی تند رفتی ، اگر میخواهید در ادامه راه از کامپایلر ++ Microsoft Visual C استفاده کنی باید در هنگام ساختن Dll مورد نظرتان نیز از همان کامپایلر استفاده میکردید . در غیر اینصورت در هنگام استفاده ممکن به مشکلاتی برخورد کنید برای درک بهتر مسئله به لینک زیر مراجعه کنید .
http://en.wikipedia.org/wiki/Name_mangling

توجه داشته باشید که کامپایلرهای ++C از یک استاندارد استفاده نمیکنند و در هنگام ایجاد Object file اسامی توابع و متغیرها را براساس روش منحصر به فردی تغییر شکل داده و کد مینمایند.



//

 

m_kh_m

عضو جدید


خیلی خوبه،

اما یک کمی تند رفتی ، اگر میخواهید در ادامه راه از کامپایلر ++ Microsoft Visual C استفاده کنی باید در هنگام ساختن Dll مورد نظرتان نیز از همان کامپایلر استفاده میکردید . در غیر اینصورت در هنگام استفاده ممکن به مشکلاتی برخورد کنید برای درک بهتر مسئله به لینک زیر مراجعه کنید .
http://en.wikipedia.org/wiki/Name_mangling

توجه داشته باشید که کامپایلرهای ++C از یک استاندارد استفاده نمیکنند و در هنگام ایجاد Object file اسامی توابع و متغیرها را براساس روش منحصر به فردی تغییر شکل داده و کد مینمایند.



//



واقعا از لطفتون ممنون :redface::redface::redface:

اما اون بخش از سوالام هنوز برام نامعلومه :question::question::question:

البته خودم دنبالش هستم ولی تا الان به نتیجه ای نرسیدم

اینکه چطور میشه یک تابع رو توی محید ویژوال خوند و به کامپایلر فهموند؟

آهان راستی

اون دستور deploytool که گفتید امتحان کردم اما matlab پیغام خطا میداد :w19:

به ورژنش بستگی داره؟ :w20:

من ورژن 7.04 رو استفاده می کنم



باز هم ممنون
:w36:
;)
 

Similar threads

بالا