PDA

View Full Version : سوال: Sound Generating



Mahdi_5681
سه شنبه 11 اسفند 1388, 19:28 عصر
سلام
من می خوام توی برنامه بتونم صدا ایجاد کنم. به این نحو که امکان پخش همزمان چند صدا باشه ( یعنی از تابع Beep() نمیشه استفاده کرد، چون همزمان پخش نمی کنه )
این صدایی که ایجاد میشه باید با یه فرکانس خاص و شدت خاصی باشه.
مثلا فرکانس 1500 و بلندی صدا 90% ( یا 90 از 100 )
کسی می دونه توی C#‎‎‎‎ چطوری میشه با کارت صدا ارتباط برقرار کرد ؟
چطوری میشه از Direct Sound استفاده کرد ؟
اصلا راه دیگه ای غیر از Direct Sound هست یا خیر ؟
من هرجایی که دیدم، اومدن نحوه پخش یه فایل ویو رو گفتن که خب مشکلی نداره، اما روش ایجاد صدا رو نگفتن.

ممنون میشم کسی بتونه کمک کنه.
لطفا فوری.

m_amin_t
چهارشنبه 12 اسفند 1388, 15:51 عصر
من با DirectSound کار کردم. ولی دقیقا متوجه کاری که میخوای بکنی نشدم. اگه دقیق تر توضیح بدی شاید بتونم کمک کنم.

Mahdi_5681
چهارشنبه 12 اسفند 1388, 16:27 عصر
من با DirectSound کار کردم. ولی دقیقا متوجه کاری که میخوای بکنی نشدم. اگه دقیق تر توضیح بدی شاید بتونم کمک کنم.

ممنون از توجه شما.
ببین من دقیقا می خوام این کارو بکنم :
صدا ایجاد کنم !
مثلا صدایی با فرکانس ۱۰۰۰
یا ۱۵۰۰۰
این کارو با تابع Beep() میشه به راحتی انجام داد، اما مشکل اینه که این صدا مربوط با بایاس میشه و بنابراین، نمیشه همزمان بیش از یک صدا رو پخش کرد.
مثلا می خوام بتونم همزمان دو صدا پخش بشه، یکی با فرکانس ۱۵۰۰ و یکی با فرکانس ۵۰۰۰
هر کدام از این صداها تا زمانی که قطع نشن، مثل یه بوق ممتد هستن که فقط فرقشون توی فرکانسشونه. مثل تفاوتی که توی صدای بوق ماشین های مختلف حس می کنیم. ( البته این یه مثال بود )

امیدوارم تونسته باشم منظورمو خوب بیان کنم.
اگر بازم هم مشکلی در صورت سوال بود، بفرمایید کجاش مشکل داره که بیشتر توضیح بدم.

ممنون.

m_amin_t
چهارشنبه 12 اسفند 1388, 17:18 عصر
همونطور که خودتون هم گفته بودین با DirectSound هم میشه شدت صدا و هم فرکانس رو به راحتی کنترل کرد. به این صورت که بافری که برای پخش صدا تعریف میکنین مشخصه ای به نام Frequency داره که به راحتی میتونین مقدار مورد نظر خودتون رو روش اعمال کنین.
همونجاهایی که احتمالا خوندید در مورد پخش صدا در DirectSound اگه دقت کرده باشین یک PrimaryBuffer یا SecondaryBuffer تعریف کرده، مشخصه ی Frequency و Volume احتمالا دو مشخصه ای هستن که کار شما رو راه میندازه.
امیدوارم درست متوجه مسئله شده باشم و جواب قابل فهمی داده باشم.

Mahdi_5681
چهارشنبه 12 اسفند 1388, 20:36 عصر
من PrimaryBuffer ندیده بودم، ولی الان دیدم که یکی از مشخصه های BufferDescription که از نوع بولین هم هست !
ببینید کد من اینطوریه، و الان هم خطا میده، شما می دونید مشکلش چیه ؟

Device dSound = new Device();
dSound.SetCooperativeLevel(this.Handle, CooperativeLevel.Priority);
SecondaryBuffer Sound;
BufferDescription BD = new BufferDescription();
Sound = new SecondaryBuffer(BD, dSound);
Sound.Frequency = 1600;
Sound.Play(0, BufferPlayFlags.Default);

الان پیغام خطایی که میده موقع new کردن Sound از نوع SecondaryBuffer هستش و پیغامش هم اینه :

An unhandled exception of type 'System.ArgumentException' occurred in Microsoft.DirectX.DirectSound.dll

Additional information: Value does not fall within the expected range.