PDA

View Full Version : حرفه ای: تشخیص فرکانس صدا



rasol_afkham
یک شنبه 25 آبان 1399, 18:43 عصر
سلام دوستان
می خواهم یه تیونر مخصوص سنتور بنویسم
کلاس وجود داره که بشه با اون فرکانس صدایی که از میکروفن پخش می شه رو پیدا کرد؟

the king
یک شنبه 25 آبان 1399, 19:21 عصر
سلام دوستان
می خواهم یه تیونر مخصوص سنتور بنویسم
کلاس وجود داره که بشه با اون فرکانس صدایی که از میکروفن پخش می شه رو پیدا کرد؟

رجوع شود به Un4seen BASS و BASS.NET و FftSharp و کلا هر منبعی که الگوریتم (Fast Fourier transform (FFT (https://en.wikipedia.org/wiki/Fast_Fourier_transform) رو پیاده سازی کرده باشه.
FFT از روی داده های گسسته موج صدا، فرکانس رو استخراج می کنه.

Visuals.DetectFrequency Method

(http://bass.radio42.com/help/html/17e533f2-1ec3-4c62-564c-2b6e2c3dfad9.htm)?how to listen to the microphone with bass (http://www.un4seen.com/forum/?topic=16356.0)

FftSharp (https://github.com/swharden/FftSharp)

Comparison of FFT Implementations for .NET (https://www.codeproject.com/Articles/1095473/Comparison-of-FFT-Implementations-for-NET)

rasol_afkham
یک شنبه 25 آبان 1399, 19:49 عصر
سلام دوست عزیز
من یه کلاس می خواهم که همه کارا رو انجام بده نه تابع فوریه. یه کلاس که فرکانس رو تشخیص بده و فقط یه شماره بده. صدا رو بگیره و فرکانسش رو بده

the king
یک شنبه 25 آبان 1399, 20:58 عصر
سلام دوست عزیز
من یه کلاس می خواهم که همه کارا رو انجام بده نه تابع فوریه. یه کلاس که فرکانس رو تشخیص بده و فقط یه شماره بده. صدا رو بگیره و فرکانسش رو بده

FftSharp (https://github.com/swharden/FftSharp) و BASS.NET (http://bass.radio42.com/) که معرفی کردم کلاس دارند، BASS و NAudio و ... کتابخانه های تخصصی صوت هستند، صرفا FFT که ندارند.
در ضمن در نظر بگیرید که صدای انسان، موزیک، حیات وحش و ... فقط مقدار روی یک فرکانس خاص نیست که صدا تبدیل به یک مقدار برای فرکانس بشه، مثلا 140 هرتز بشه.
هر نمونه صدایی در فرکانس های مختلفی مقادیر با شدت های متفاوتی ایجاد می کنه، فرضا دامنه صدای انسان در محدوده 80 الی 260 هرتز ئه، یک عدد فرکانس خاص نیست، پیوسته هم نیست، گسسته است، برای هر نمونه صوتی در یک مجموعه فرکانس بصورت گسسته مقادیری هست و در سایر فرکانس ها مقدار صفر ئه. پس شما می توانید برای یک نمونه صدای انسان در باند فرکانس 80 الی 140 هرتز یک مقدار دریافت کنید، برای همون نمونه صدا در باند فرکانس 140 الی 200 هرتز یک مقدار دیگه و در محدوده 200 الی 260 هرتز یک مقدار دیگه و برای تک تک اون فرکانس های 80 الی 260 هرتز یک مقدار متفاوت گسسته دیگه دریافت کنید. و طبعا در بین شون مقادیر زیادی صفر هست، یعنی فرکانس هایی که صدایی روی اونها تولید نشده.