0123456789
list icon
list icon

NTS-1 digital kit NTS-1 digital kit

SoundCloud

به اشتراک بگذارید.

NTS-1 digital kit

PROGRAMMABLE SYNTHESIZER KIT

پشتیبانی

بیشتر بدانید

سایت های مرتبط

Artists مرتبط

2021.08.06
Moe Shop
Show All

ساخت افکت های اختصاصی [DOTEC-AUDIO x Nu:Tekt] برای NTS-1

هنگامی که برای اولین بار شروع به ساخت پلاگین‌ های مختلف برای NTS-1 می کنید، ممکن است انجام آن کار سختی به شمار برود، اما نگران نباشید. در این مقاله 5 قسمتی، ما با همکاری DOTEC-AUDIO به شما آموزش ساخت افکت‌های اختصاصی را برای NTS-1 می دهیم، آن هم به شکل قدم به قدم! پس در ادامه با ما همراه باشید.

مقاله شماره 1: روشی برای کار کردن افکت‌ های اختصاصی با سینت سایزر NTS-1

سلام به همه! نام من شینجی ایجیما است و من یکی از طراحان شرکت ساخت پلاگین DOTEC-AUDIO هستم. ما تا کنون در شرکت پلاگین های مختلفی را برای کامپیوتر های مک و پی سی و حتی تلفن های هوشمند ساخته ایم. بسیاری از پلاگین های ما را می توانید در وبسایت ما مشاهده کنید.
https://dotec-audio.com

 

محصول Nu:Tekt NTS-1 Digital Kit (که به طور اختصاری در این مقاله آن را NTS-1 می نامیم.) یک سینت سایزر بسیار جالب و همچنین ارزان قیمت است که به شکل Do It Yourself ساخته شده است و این امکان را به شما می دهد تا بتوانید به شکل مورد علاقه آن را بسازید. اما چرا ما، به عنوان یک شرکت تولید کننده پلاگین برای کامپیوتر، به این محصول علاقه زیادی داریم؟ پاسخ این سوال این است که شرکت کرگ این محصول را به گونه ای طراحی کرده که شما می توانید با دانش برنامه نویسی، افکت‌ ها و صدا های مورد نظر خود را برای آن تولید کنید. پس از آن که افکت های خود را برای این محصول ساختید، باید آن را بر روی NTS-1 نصب کنید و سپس یک سینت سایزر منحصر به فرد دارید که نه تنها از نظر ظاهری بر اساس سلیقه شما تولید شده، بلکه صدا های آن نیز صدا هایی است که شما برای آن تولید کرده اید!
از دیگر نکات جالب در مورد محصول NTS-1، می توانیم به ورودی صدای استریو (ورودی Line) آن اشاره کرد. این موضوع به این معناست که شما می توانیم یک ژنراتور صدا و یا یک ساز را به این محصول متصل کنید. بنابراین نه تنها می توانید از این محصول به عنوان یک سینت سایزر استفاده کنید، بلکه می توانید آن را به عنوان یک افکت پدال برای سازهایی همانند گیتار و یا کیبورد های خود نیز استفاده کنید.
به زبان دیگر، شما با سینت سایزری مقابل هستید که دست شما را برای ساخت صدا های منحصر به فرد باز می گذارد. هنگامی که این ویژگی را متوجه می شوید، دلتان می خواهد تا حتما آن را امتحان کنید! این طور نیست؟

خب، پس بیایید شروع کنیم. ابتدا این ویدئو را ببینید.

این افکت به Bit Crusher معروف است. افکتی که باعث می شود تا صدای شما کیفیت کمی داشته باشید.

و…
این افکت با نام Vinyl Stop مشهور شده است. همان صدایی که با نگه داشتن Vinyl دستگاه های دی جی با دست به دست می آید.
هر دو افکتی که در این ویدئو ها مشاهده کردید، افکت هایی بودند که جزو پکیج مولتی افکت DeeFX شرکت ما، یعنی DOTEC-AUDIO به بازار عرضه شده است. این افکت ها را ما به طور اختصاصی برای محصول NTS-1 تولید کرده ایم.
همانطور که مشاهده می کنید، نکته ای که خیلی جالب توجه است، این است که با استفاده از پکیج مولتی افکت شما نه تنها به تمامی Oscillator هایی که برای NTS-1 ساخته شده است دسترسی دارید، بلکه می توانید از افکت هایی که ما طراحی کرده ایم برای ورودی Line این محصول استفاده کنید! در این سری مقاله ها، من دوست دارم تا در مورد نحوه ساخت این دو افکت که آن ها را دیدیم صحبت کنم و به شما آموزش دهم تا چگونه افکت های خود را تولید کنید!
در این مقاله ها، ما به ریشه ها باز می گردیم و تمامی کد ها و زبان برنامه نویسی ای که برای ساخت این دو افکت به آن نیاز دارید را به شما آموزش می دهیم. اما قبل از آن که وارد مسئله ساخت این دو افکت شویم، بیایید در مورد نحوه دانلود کردن و نصب این افکت ها بر روی سینت سایزر NTS-1 صحبت کنیم.
اگر شما دارنده NTS-1 هستید و این محصول را خریداری کرده اید، پیشنهاد می کنم تا حتما این افکت ها را دانلود کرده و تنظیمات مختلف آن را تغییر دهید تا به صدا های جدیدی دست پیدا کنید.

نحوه نصب افکت ها

  • 1- ابتدا نرم افزار Sound Librarian را نصب کنید.
    اولین کاری که باید برای نصب این افکت ها انجام دهید، این است که نرم افزار Sound Librarian شرکت کرگ را بر روی کامپیوتر خود نصب کنید.
    این نرم افزار را می توانید بر روی سیستم عامل ویندوز و یا مک نصب کنید. برای دانلود این نرم افزار حتما آموزش نصب آن را مشاهده کنید. همچنین از اتصال NTS-1 خود به سیستم کامپیوتری خود اطمینان حاصل کنید.
  • 2 - فایل های افکت را دانلود کنید.
    پس از آن که نرم افزار Sound Librarian را نصب کردید، فایل افکت ها را از طریق لینک های زیر از سایت DOTEC-AUDIO دانلود کنید.
    برای دانلود افکت Bitcrusher اینجا را کلیک کنید.
    برای دانلود افکت Stop FX اینجا را کلیک کنید.
    پس از آن که این فایل ها را دانلود کردید، فایل ZIP آن ها را از حالت فشرده خارج کرده تا به فایل های bitcrusher.ntkdigunit و stopfx.ntkdigunit دست پیدا کنید.
  • 3- این فایل ها را در نرم افزار Sound Librarian لود کنید.
    برای این کار، به منوی File در نرم افزار Sound Librarian بروید. بر روی گزینه Import User Unit کلیک کنید و فایل هایی را که از حالت فشرده خارج کردید را انتخاب کنید. پس از آن که این مرحله را انجام دادید، افکت Bitcrusher در منوی USER MODULATION FX و افکت Stop FX در منوی USER DELAY FX نرم افزار اضافه می شود.
    در آخر، به منوی Send/Recv بروید و بر روی گزینه Send User Data کلیک کنید تا افکت های اضافه شده بر روی دستگاه NTS-1 نصب شوند.
    هنگامی که افکت ها بر روی سینت سایزر شما نصب شدند، شما می توانید افکت Bitcrusher را در منوی Mod و افکت Stopfx را در منوی Delay دستگاه NTS-1 خود پیدا کنید و از آن ها استفاده کنید.
امیدوارم این افکت ها را در شرایط مختلف آزمایش کنید.

تا مقاله بعدی!

مقاله شماره 2: آمادگی برای ساخت افکت های اختصاصی برای NTS-1

سلام به همه! نام من شینجی ایجیما است و من در شرکت پلاگین سازی DOTEC-AUDIO فعالیت می کنم.
در مقاله قبلی در مورد افکت هایی صحبت کردیم که شرکت ما به طور اختصاصی برای محصول NTS-1 طراحی کرده است. آیا آن ها را از طریق لینک هایی قرار دادیم دانلود کردید؟ این بار اما، می خواهم در مورد فضایی به شما بگویم که می توانید در آن به ساخت افکت های خاص خود (و همچنین Oscillator ها) برای سینت سایزر NTS-1 بپردازید. در واقع، بسیاری از اطلاعاتی که باید به عنوان یک مبتدی در این زمینه داشته باشید را می توانید از صفحه logue SDK همین سایت پیدا کنید و آن ها را مطالعه کنید. بنابراین در این مقاله، قصد دارم تا اطلاعاتی جدیدی را به شما بدهم تا بتوانید تجربه ای راحت تر در ساخت افکت ها داشته باشید. یکی از نکاتی که باید به آن توجه کنید این است که اطلاعاتی که من به شما می دهم و نرم افزار ها و فضا هایی که معرفی می کنم، همگی به طور رایگان عرضه شده اند و نیازی به خریداری آن ها ندارید. از طرفی نیز، شما می توانید تمامی افکت ها و Oscillator های مورد نظر خود را در هر سیستم عاملی از جمله ویندوز، مک و یا لینوکس طراحی کنید. بنابراین هر کسی می تواند افکت های مورد نظر خود را برای NTS-1 تولید کند. (در نظر داشته باشید که مراحل نصب در هر سیستم عامل متفاوت خواهد بود.

 Logue SDK
https://korginc.github.io/logue-sdk/
بیایید برای شروع، نگاهی به SDK بیاندازیم. کلمه SDK در واقع مخفف Software Development Kit می باشد که در واقع ابزاری هستند که شما با استفاده از آن ها می توانید نرم افزار های خاصی را تولید کنید. برای مثال، شما می توانید با استفاده از Windows SDK، نرم افزار ها و اپلیکیشن هایی را برای سیستم عامل ویندوز بسازید و یا با استفاده از iOS SDK می توانید اپلیکیشن هایی را برای گوشی های آیفون خلق کنید. هنگامی که مهندسین شرکت کرگ از سینت سایزر NTS-1 رونمایی کردند، همزمان با آن logue SDK را نیز معرفی کردند که می توانید از لینک https://github.com/korginc/logue-sdk آن را دریافت کنید.
بهترین کاری که می توانید انجام دهید این است که آخرین نسخه از این ابزارها را از نرم افزار Git تهیه کنید. اما پیش از آن، باید نحوه کار کردن با نرم افزار Git را یاد بگیرید. به همین دلیل، یکی از راحت ترین کار ها این است که لینک درج شده در بالا مراجعه کنید و بر روی دکمه سبز رنگ Clone or Download کلیک کنید. با این کار، شما می توانید نرم افزار را به شکل یک فایل ZIP دریافت کنید. باید این نکته را نیز در نظر داشته باشید که مهندسین شرکت کرگ همواره این ابزار ها را به روز رسانی می کنند بنابراین همیشه نرم افزار Git را برای دریافت آخرین نسخه logue SDK چک کنید.

فضای MSYS2 (ساخته شده برای ویندوز)
https://www.msys2.org/

یکی از معضلات اصلی برنامه نویسی برای سینت سایزر NTS-1 در سیستم عامل ویندوز، استفاده از فضای MSYS2 می باشد. بگذارید بیشتر توضیح دهم. برای نوشتن فرمان هایی برای نرم افزار logue SDK، باید از فرمان های GNU استفاده کنیم که این فرمان ها تنها در صورتی قابل اجرا هستند که بتوانیم سیستم عامل Unix را به عنوان پیش فرض در اختیار داشته باشیم.
در سیستم عامل های لینوکس و مک، این موضوع صحت ندارد زیرا این سیستم ها خود بر پایه Unix طراحی شده اند و می توانید با نصب کمترین ابزار ممکن، شروع به ساخت برنامه های مختلف در آن ها کنید. اما در سیستم عامل ویندوز، شما به فضایی مجزا نیاز دارید تا بتوانید دستورات Unix را در آن اجرا کنید. به طور خلاصه تر، MSYS2 یک پلتفرم ساخته شده برای سیستم عامل ویندوز است که این امکان را به شما می دهد تا بتوانید دستورات Unix را در آن اجرا کنید. به همین دلیل، اگر می خواهید از سیستم عامل ویندوز برای ساخت این افکت ها استفاده کنید، باید دستورات خود را در پنجره MSYS2 وارد کنید.
شما می توانید در این اینترنت "NTS-1 MSYS2" را سرچ کرده و مقاله های مختلفی را درباره اقدامات و همچنین آموزش گام به گام این ابزار مطالعه کنید. من پیشنهاد میکنم در ادامه مسیر از این مقاله ها به عنوان رفرنس استفاده کنید.

GNU Arm Embedded Toolchain
https://github.com/korginc/logue-sdk/tree/master/tools/gcc

برای ساخت نرم افزار ها، شما به یک Compiler نیاز دارید. Compiler ها در در واقع نرم افزار هایی هستند که زبان نوشته شده توسط کاربر را به زبانی تبدیل می کند که توسط کامپیوتر قابل خواندن باشد. برای ساخت افکت ها برای NTS-1، ما از Compiler محبوب GNU Compiler Collection استفاده می کنیم که اختصارا به آن GCC می گوییم.
توضیح در مورد GCC کاری بسیار پیچیده است و به راحتی می توان یک کتاب قطور در مورد آن تالیف کرد. بنابراین برای الان از آن عبور می کنیم. تنها در همین حد کافیست که بدانید GNU Arm Embedded Toolchain ای که در این صفحه به توضیح آن می پردازیم، در واقع ابزاری برای تولید نرم افزار های مختلف هستند که GCC را نیز در بر می گیرد.
واژه Arm Embedded در نام این ابزار اشاره به چیپست STM32F4 می کند که بر پایه طراحی چیپست های Arm ساخته شده است و در NTS-1 از آن استفاده شده. Toolchain نیز اشاره به ابزاری دارد که برای ساخت نرم افزار ها برای این چیپست به آن نیاز داریم.
همانطور که در فایل Readme موجود مشاهده می کنید، تنها کافی است تا فایل های مورد نیاز را نصب کنید و Shell Script آماده شده را اجرا کنید.

GNU Make
https://github.com/korginc/logue-sdk/tree/master/tools/make

ابزار Make، یک ابزار خاص است که این امکان را به شما می دهد تا یک دستور را به جای چند دستور مختلف بنویسید و به این ترتیب فایل های خود را کوچک تر کنید. (ابزار Make نیز جزو آن ابزار هایی است که برای توضیح دقیق آن می توان یک کتاب نوشت!) برای دریافت این ابزار نیازی به نصب نرم افزاری در سیستم های مک، لینوکس و ویندوز (MSYS2) نخواهید داشت. اما با این حال محل دریافت آن را برای شما قرار دادیم.

Info-ZIP
https://github.com/korginc/logue-sdk/tree/master/tools/zip

این ابزار بیشتر برای ساخت فایل های ZIP مورد استفاده قرار می گیرد و همانند ابزار Make نیازی به نصب آن بر روی پلتفرم خود نخواهید داشت.

Logue-cli (نصب اختیاری)
https://github.com/korginc/logue-sdk/tree/master/tools/logue-cli

این ابزار، جزو اجزا اختیاری در این لیست به شمار می رود و همه افراد به آن نیازی ندارند. آن را می توان در واقع نسخه Command-Line نرم افزار Sound Librarian دانست، همان نرم افزاری که در مقاله قبلی به آن پرداختیم. همانطور که به یاد دارید، نرم افزار Sound Librarian در دو نسخه برای سیستم عامل های ویندوز و مک تولید شد اما نسخه ای برای سیستم عامل لینوکس از آن منتشر نشده است.
به همین دلیل، اگر به دنبال این هستید که بر روی سیستم عامل لینوکس به کد نویسی بپردازید، باید این ابزار را نیز تهیه کنید. پس از آن که این ابزار را نصب کردید، می توانیم شروع به ساخت نرم افزاری برای اجزای سمپل موجود در SDK کنیم.
ما از راهنمایی قدم به قدم در Demo Project Build Waves به لینک https://korginc.github.io/logue-sdk/ برای ساخت استفاده می کنیم. اگر به درستی مراحل گفته شده را طی کنید، در نهایت باید فایلی تحت نام waves.ntkdigunit بر روی سیستم شما ساخته شود. همچنین این فایل در بخش USER OSCILLATOR های نرم افزار Sound Librarian با نام Waves قابل مشاهده خواهد بود. اگر تا این مرحله پیش آمده اید، قدم بعدی آن است که شروع به نوشتن کد ها برای ساخت افکت های خاص خود کنید! آماده کردن و استفاده از ابزار ها برای این کار اما در دفعات اول ممکن است کاری سخت و طاقت فرسا باشد.
اما خبر خوب این است که اطلاعات بسیار زیادی در اینترنت در مورد این ابزار وجود دارد که می توانید با مطالعه آن ها، اطلاعات خود را افزایش دهید. بنابراین من پیشنهاد می کنم تا با حوصله زیاد به مطالعه در مورد این ابزار بپردازید و محیط کد نویسی خود را ایجاد کنید.

تا مقاله ای دیگر!
 

مقاله شماره 3: ساخت یک افکت جدید، قسمت اول

سلام، من فرانک شیگتورا هستم، مهندس صداسازی در شرکت DOTEC-AUDIO من همچنین یکی از تولید کنندگان DSP های شرکت هستم به همین دلیل در قسمت ساخت افکت ها با شما همراه خواهم بود.
قبل از آن که شروع به برنامه نویسی برای ساخت اولین افکت خود کنیم، باید فضا هایی که در مقاله قبلی در مورد آن ها توضیح دادیم را نصب کرده باشید و آن ها را در سیستم خود باز کنید. در این مقاله قصد داریم تا به گونه ای نحوه ساخت افکت ها را برای شما شرح دهیم که افرادی که برای اولین بار با برنامه نویسی به شکل Command-Line مواجه می شوند نیز بتوانند به راحتی از پس آن بر بیایند.
در سیستم عامل ویندوز خود، فضای MSYS2 را باز کنید. اولین کاری که باید انجام دهیم این است که به یک فولدر متفاوت برویم. برای این کار به جای استفاده از موس، از دستور "cd" استفاده می کنیم. حال من راهی ساده تر را برای این کار به شما نشان خواهم داد.
برای آن که نام بسیار طولانی برای فولدر خود انتخاب کنید، کافی است تا چند حرف مهم در نام آن را تایپ کرده و سپس با فشردن دکمه TAB کلمه ها را تکمیل کنید. این کار با استفاده از حرف اول هر کلمه نیز امکان پذیر خواهد بود.
اگر می خواهید لیستی از محتوای هر فولدر در اختیار داشته باشید، باید فرمان "ls" را تایپ کرده و دکمه Enter را فشار دهید.
بنابراین باید دو فرمان "cd" برای رفتن به یک فولدر جدید و فرمان "ls" برای نشان دادن لیستی از محتوای آن را به خاطر بسپارید. برای آن که در مسیر قرارگیری فولدر، یک مرحله به عقب بازگردید (فولدر قبلی را باز کنید) باید از فرمان "..cd" استفاده کنید. (دو نقطه)
در واقع، در سیستم هایی که بر پایه Unix طراحی می شوند ما از نام Directory برای فولدر ها استفاده می کنید اما چون در این آموزش با سیستم عامل های مک و به خصوص ویندوز سروکار داریم، نام فولدر بهتر و مناسب تر خواهد بود. "دانستن این موضوع البته تفاوتی نمی کرد، اما شاید برای افراد علاقه مند به برنامه نویسی نکته جالبی باشد.)
اگر ما نرم افزار logue SDK را در فولدر اصلی MSYS2 نصب کنیم، تمامی کارهایمان آسان تر خواهد شد. برای مثال، هنگام نصب MSYS2 در درایو c از آدرس C:\msys2\home\\korg استفاده کنید.
خب، حالا بیایید شروع به نوشتن اولین کد های خود برای ساخت افکت های خاص باشیم، اما پیش از آن، فایل زیر را دانلود کنید.

دانلود تمپلیت افکت های NTS-1

پس از دانلود کردن آن، آن را از حالت فشرده خارج کرده و در فولدر زیر قرار دهید. Korg\v1.1\platform\nutekt-digital
در اینجا ما تمپلیت هایی را در اختیار داریم که می توانیم با استفاده از افکت های ماژولر، دیلی ها و ریورب ها را بسازیم. البته شایان ذکر است که تمپلیت دیگری نیز در نرم افزار logue SDK قرار داده شده است، اما ما به روش ساده خود عمل می کنیم تا آموزش کد نویسی دشوار تر نشود. نکته مورد توجه این است که اگر شما با ساختار فولدرها آشنا نباشید، امکان اشتباه توسط شما بسیار زیاد است و همین موضوع ممکن است باعث شود تا ندانید بسیاری از فایل ها را به چه شکلی و در کدام فولدر کپی کنید.
در مورد ساختار تمپلیت فولدر هایی که در حال استفاده از آن ها هستیم:
تمپلیت هایی که توسط شرکت DOTEC-AUDIO ساخته می شوند، در حال حاضر ساختار زیر را دارند:
- ld (folder)
- tpl (folder)
- main.c
- Makefile
- manifest.json
- project.mk
فولدر اول به نام "ld" در واقع فایل Definition برای افکت هایی است که ما تولید می کنیم. بدون آن که خیلی وارد جزئیات شویم، این را بدانید که افکت هایی که در حال تولید آن ها هستیم افکت های Mod، دیلی و ریورب می باشند و اطلاعاتی که در فولدر آن ها وجود دارد با این فولدر متفاوت است.
به همین منوال، فولدر "tpl" شامل فایل هایی می شود که هر کدام تمپلیتی برای افکت های مختلف هستند. فولدر های "ld" و "tpl" با توجه افکتی که می خواهید تولید کنید، باید به درستی انتخاب شوند اما نیازی به ادیت و تغییر آن ها نخواهید داشت.
فایل های Makefile، manifest.json و project..mk هم فایل های Definition به شمار می روند. با توجه به افکتی که در حال تولید آن هستید، بازنویسی فایل های manifest.json و project.mk ممکن است نیاز باشد. در مورد نحوه ادیت و بازنویسی این فایل ها در آخر این مقاله توضیحات تکمیلی به شما خواهیم داد.
فایل main.c فایل اصلی ای است که نرم افزار افکت را در آن قرار داده شده است. در ابتدا، ما شروع به ساخت افکت bitcrusher می کنیم که در واقع نسخه ای ساده تر شده از bitcruhser ای است که در پکیج DeeFX مشاهده می شود.
ابتدا بیایید ساخت و کد نویسی را کنار گذاشته و نگاهی به افکتی بیندازیم که پس از این آموزش در اختیار خواهیم داشت. به نتیجه نهایی و با آن به صدا های مختلف افکت مورد نظر خود را اضافه کنیم.
ابتدا فایل های افکت bitcrusher را از اینجا دانلود کنید و پس از آن که آن ها را از حالت فشرده خارج کردید، آن ها را در پوشه زیر بریزید.
Korg\v1.1\platform\nutekt-digital
با استفاده از فضای MSYS2، ما به فولدر
korg\v1.1\platform\nutekt-digital\bitcrusher
می رویم که اگر از روش استفاده از دکمه TAB ای که پیش تر به شما آموزش دادم استفاده کنید، پیدا کردن آن بسیار آسان خواهد بود.
هنگامی که با استفاده از فرمان cd وارد پوشه bitcrusher شدید، از فرمان Make استفاده کنید. این فرمان را در مقاله قبل به شما توضیح دادیم. تنها کاری که باید انجام دهید، تایپ کردن Make و فشردن دکمه Enter می باشد. پس از این، شما حروف بسیاری را می بینید که در حال فلش شدن هستند و در نهایت، همه آن ها در bitcrusher.ntkdigunit پکیج می شوند.
و تمام .
اگر همه چیز به درستی پیش برود، در نهایت فایلی با نام bitcrusher.ntkdigunit باید در فولدر Build ساخته شود. همانند دفعه قبل، این فایل را باید به محصول NTS-1 منتقل کنیم. استفاده از این افکت مستلزم استفاده از ناب A دستگاه شما می باشد.
خیلی خب، حالا بیایید به کد مرجع آن نگاهی بیندازیم.
با استفاده از Notepad، Hidemaru و یا هر نرم افزار ادیت نوشته ای که بر روی سیستم خود دارید، فایل main.c را در فولدر bitcrusher باز کنید.
در ابتدای این فایل، کد های زیر را مشاهده می کنید.
#include "usermodfx.h"
#include "float_math.h"
ما به خط اول برای ساخت modfx نیاز داریم. خط دوم برای عملیات Floating Point ضروری است.
به طور کلی، دو روش مختلف برای نمایش دادن اندازه اعداد در داده های دیجیتالی صدا وجود دارد: روش Fixed Decimal و روش Floating Point.
در بسیاری از موارد، شاید نزدیک به بيش از 50% اوقات، از روش Floating Point استفاده می شود. دلیل آن این است که مردم راحت تر سازوکار آن را درک می کنند. اما نکته منفی در مورد آن این است که هنگامی که این روش در حال انجام محاسبات خود است، سرعت پردازش به شدت افت می کند.
از طرف دیگر، روش Fixed Decimal روشی است که در آن سرعت پردازش بسیار بالاست اما درک کردن آن برای عموم مردم کاری دشوار است. همچنین کنترل کردن آن کار سخت تری خواهد بود زیرا این روش از فرمت های مختلفی (همانند فرمت Q) برای تعیین کردن اعداد بر اساس دیجیت ها (صفر و یک) به شکل اعشاری استفاده می کند. اما به هر ترتیب، محصول NTS-1 شامل یک پردازنده بسیار قدرتمند است که به طور اختصاصی برای پردازش های Floating Point طراحی و ساخته شده است. به همین خاطر هیچ دلیلی وجود ندارد که ما از این روش استفاده نکنیم!
حال به سراغ قسمت بعدی می رویم
;static float rate, lastSampleL,lastSampleR
;static uint32_t count
این کدها برای گذاشتن لیبلی بر روی Box هایی است که در آن اطلاعات انواع پارامتر ها را قرار می دهیم. با استفاده از این ها می توانیم سه پارامتر Float Type Static را به نام های Rate، lastSampleL، lastSampleR و یک unit32_t-type در آوریم. یک پارامتر ثابت Count نامیده می شود.
این پارامتر ها را Global Variable Declaration می نامیم و آن ها یکی از اجزای کلیدی ساخت این کد ها به شمار می روند. شما می توانید در مورد آن ها با استفاده از جمله C Variable Declarations در اینترنت تحقیق کنید. به این ترتیب و پس از تحقیق، می توانید اطلاعات بیشتری در مورد Static ها به دست آورید.
به طور ساده تر، اگر نمی خواهید که اطلاعات پارامتر های شما هربار پس از اجرا پاک شوند، باید از Static استفاده کنید و به این ترتیب، اطلاعات شما باقی خواهند ماند. اما شما می توانید از Static ها استفاده دیگری نیز بکنید. برای این کار در مورد Static Variables تحقیق کنید.
اگر همه چیز به درستی پیش رفت، به سراغ مرحله بعدی می رویم.
void MODFX_INIT(uint32_t platform, uint32_t api) { lastSampleL = 0.f; lastSampleR = 0.f; count = 0; }
کد بالا، کدی است که ما آن را Function می نامیم.
نام یک فانکشن را با استفاده از لیبل هایی که برای نام آن ها در هر نرم افزار قرار می دهیم، به دست می آوریم که به آن Function Name گفته می شود. بر این اساس، شما می توانید فانکشن های مختلف را بر اساس نام آن ها هنگام کد نویسی در اختیار داشته باشید و از آن ها استفاده کنید. فانکشن ها را می توان همانند اجزای یک اتومبیل دانست، که با استفاده از تعدادی از آن ها به طور متوالی می توانید زنجیره ای از دستورات را برنامه ریزی کنید.
Value returned Function name (argument)
}
{ Processes to execute
ما از فرمت بالا برای فانکشن ها استفاده می کنیم. قسمت Value Returned در این کد به ما نشان می دهد که چه نوع داده ای برای به دست آوردن نتایج پردازش هایی که توسط این فانکشن اجرا شده است، مورد استفاده قرار گرفته. قسمت Argument داده و نوعی از داده است که است که به هنگام اجرا فانکشن به آن معرفی می کنیم.
ما در حال حاضر، در حال نوشتن یک فرایند مقدماتی هستیم. محتوای تمامی متغیرهای را به 0 تغییر دادیم. اما شاید از خود بپرسید که حرف f در دستور 0.f چیست؟ این حرف به طور ساده بیان می کند که ما در حال نوشتن یک کد Float Type هستیم. بهتر است که در مورد این موضوع تحقیقی را انجام دهید. شاید از خود بپرسد که چرا در Returned Value کلمه Void را دریافت کرده اید، و این به این معناست که هیچ داده ای در نتایج نهایی وجود ندارد و این طبیعیست، زیرا برای اولین و آخرین بار است که پردازش مقدماتی را انجام می دهیم و پس از آن، دیگر نیاز به تکرار این مراحل نیست.
این تمام کاری است که این کد انجام می دهد، بسیار خب
قدم بعدی آن است که به سراغ پردازش اصلی برویم. ما ابتدا توضیح در مورد این پردازش به آخر موکول می کنیم.
void MODFX_PARAM(uint8_t index, int32_t value)
}
; const float valf = q31_to_f32(value)
} switch (index)
: case k_user_modfx_param_time
; rate = valf
; break
: default
; break
{
{
شاید در ابتدا با خود بگویید "خدای من این بسیار سخت است!"
اما تمام کاری که این کد انجام می دهد، دریافت اطلاعات از ناب های A و B است. و پس از آن، انتقال این اطلاعات به متغیر های ما. هنگامی که شما ناب را بر روی دستگاه NTS-1 تکان می دهید، دستگاه دستورات بالا را صادر می کند و دستورات Index و Value به عنوان یک Argument دریافت می شود.
جالب تر آن که این value ها به شکل اعشار ثابت یا Fixed Decimal دریافت می شوند و وظیفه ما این است که آن ها را به Floating Point تبدیل کنیم. در این مثال، ما value اعشار ثابت Q31 را به فرمت 32-bit Floating Point تبدیل کردیم و نتیجه آن متغیری به نام valf شد. ما از دستور "const" به هنگامی استفاده می کنیم که اطلاعات و داده نباید در اجرا تغییر کنند. برای اطلاعات بیشتر در این باره می توانید در مورد این دستورات تحقیق کنید.
این دستورات در نهایت با دستور switch case پردازش می شوند. اگر بخواهیم به طور ساده توضیح دهیم، این پردازشی را نشان می دهد که ما هنگام استفاده از دستور switch به دست می آوریم.
در این جا، ما تنها از داده های ناب A دستگاه استفاده کرد ایم. بنابراین محتوای دستور valf در متغیر rate قرار داده شده است. هنگامی که دستور k_user_modfx_param_time (index name of knob A دریافت می شود، متغیر rate برای پردازش اصلی مورد استفاده قرار می گیرد. به همین دلیل است که ما این دستور را در ابتدا توضیح دادیم.
حال به سراغ قسمت اصلی می رویم
,void MODFX_PROCESS(const float *main_xn, float *main_yn
,const float *sub_xn, float *sub_yn
(uint32_t frames
با استفاده از فانکشنی به نام MODFX_PROCESS، می توانیم این 6 دستور را دریافت کنیم
Main input: main_xn
Main output: main_yn
Sub input from the oscillator: sub_xn
Sub output from the oscillator: sub_yn
Total number of frames: frames
در این دستور، متغیرهایی که با علامت ستاره نمایش داده شده اند، متغیر های خاصی هستند که نشان می دهد در این فانکشن هنگامی که یک مقدار تغییر کند، متغیر آن نیز تغییر می کند. به عبارت دیگر این موضوع به این معناست که داده های دریافتی در واقع اصل بوده و کپی نیستند. برای اطلاعات بیشتر در این مورد می توانید در مورد رفرنس ها و دستورات آن ها بیشتر تحقیق کنید.
یا این که ممکن است با نگاه کردن به این دستور متوجه شده باشید، اما تنها کاری که باید انجام دهید این است که پردازش افکت های مختلف را به همان تعدادی بنویسید که عدد در دستور "main_xn" قرار داده شده است و سپس این را به عنوان خروجی به main_yn قرار دهید. ما از ورودی ها و خروجی های اضافه در این قسمت استفاده نمی کنیم. این قسمت ابتدایی است:
}for(uint32_t i = 0; i < frames; i++)
این به این معناست که تنها کاری که باید انجام دهیم، تکرار دستور داخل پرانتز به تعداد عدد وارد شده در دستور اصلی است. این نوع دستور، به دستور "for" مشهور است و ما از آن برای تکرار یک پردازش به تعداد مشخص استفاده می کنیم.
Prepare the L and R audio //
; const float inL = main_xn[i * 2]
; const float inR = main_xn[i * 2 + 1]
دو اسلشی که در ابتدا قرار گرفته است، یک کامنت را نشانه گذاری می کند. با استفاده از این دستور می توانید اطلاعات و یا نوشته ای را برای نرم افزار در حال تولید خود قرار دهید. در نظر داشته باشید این دستور تاثیری بر روی نحوه عملکرد افکت شما نخواهد داشت.
حال، برای ورودی "main_xn"، ورودی صدای استریو و یا چنل های آن، میان چنل چپ و راست مدام تغییر می کنند. ما می توانیم آن ها را به صورت جداگانه پردازش کنیم، اما برای واضح تر بودن، از دستورات "inL" و "inR" استفاده می کنیم.
بیایید به توضیح در مورد خط "main_xn" بازگردیم. در این قسمت می توانیم نوشته ای تحت نام LRLRLR مشاهده کنیم. بر اساس تعداد فریمی که در اختیار داشتیم، این کد تعداد چپ و راست یا LR را برای ما در نظر گرفته است. تعداد داده ای که برای این موضوع در نظر گرفته شده، دو برابر تعداد فریم ها ما می باشد. متغیر ها شامل چند ست از داده هستند که به آن "متغیر های منظم" گفته می شود. برای فهمیدن بهتر و عمیق تر این موضوع می توانید در مورد آن تحقیق کنید. از طرفی، تعداد داده ای که وجود دارد به تعداد المان نیز مشهور است. در واقع، تعداد المان هایی که در "main_xn" وجود دارد، دو برابر تعداد فریم های نوشته شده است.
ما با استفاده از علامت های [] تعیین میکنیم که کدم المان را می خواهیم استفاده کنیم. نکته سخت قضیه آن جاست که این اعداد با عدد صفر شروع می شوند. بنابراین، اولین المان قابل دسترسی المان main_xn[0] می باشد.
بنابراین، در این دستور for، مقار متغیر i به اندازه 1 عدد در هر لوپ افزایش می یابد. این اتفاق تا زمانی رخ می دهد که عدد ختم شده کمتر از عدد فریم باشد. شاید با خود فکر کنید که چرا اعداد با عدد 1 آغاز نمی شوند؟ در آن صورت لوپ مورد نظر هنگامی که عدد به عدد فریم ها رسید متوقف می شود.با این وجود، تنها یک امکان وجود دارد که این اعداد برابر باشند… بنابراین اگر اشتباهی را در کد نویسی خود انجام دهید و به سراغ پردازش بروید، با یک لوپ بی نهایت مواجه می شوید. اگر این اتفاق بیفتد، نرم افزار شما به احتمال زیاد فریز می شود. بنابراین راحت ترین کار این است که پردازش خود را با صفر آغاز کنید.
پس از آن که دیدی که اعداد به شکل [i * 2] یا [i * 2 +1] ظاهر شدند؛ این به دلیل در نظر گرفتن ورودی ها می باشد. همانطور که گفته شد، ورودی این محصول به شکل چپ و راست با کد LR نمایش داده می شود. بنابراین عدد 0 برابر با L و عدد 1 برابر با R می باشد. بنابراین به آسانی می توانیم این کد ها را به [0 * 2] و غیره تبدیل کنید. تنها باید در نظر داشته باشید که مقدار متغیر i را به 1 یا 0 تغییر دهید.
پس از آن که تمامی این موضوعات تکنیکی را با هم مرور کردیم، بیایید در مورد نحوه عملکرد افکت bitcrusher بیشتر بدانیم.
برای آن که شروع به توضیح دادن در مورد افکت bitcrusher کنیم، باید بدانید که این افکت در واقع صدایی را به شما می دهد که انگار Sample Rate شما در حال کاهش است و در واقع وضوح صدای شما را کمتر و صدا را خش دار تر می کند. اینجا ما نه تنها در کاهش سمپل ریت هستیم، بلکه اطلاعات را خروجی پس از عدد خاصی سوییچ می کنیم. برای مثال، اگر اطلاعات ورودی ما به طور ادامه دار باشد و به شکل "12345678" باشد، این افکت به شما اطلاعات "11335577" را در خروجی می دهد. به این ترتیب، شما سمپل ریت پایین تری را در اختیار دارید. اما شاید با خود بگویید که این وظیفه افکت bitcrusher نیست، و من در این شما را درک می کنم!
در واقع حقیقت این است که اگر ما در آغاز به پردازش های مرتبط به بیت ها بپردازیم، این موضوع بسیاری از مردم را گیج می کند. همچنین، افکت های bitcrusher ای که در بازار وجود دارد، صدای بسیار خاص خود را از طریق پایین آوردن سمپل ریت تولید می کنند، نه با کم کردن بیت های مختلف در صدا! به همین دلیل است که من توضیحات مختصری در مورد سمپل ریت ها دادم. بگذریم…
The larger the value, the grainier the sample //
; uint32_t skip = rate * 64
این همان جایی است که ما از داده هایی که پیش تر از ناب ها دریافت کرده ایم، استفاده می کنیم. داده ای که ما دریافت کرده ایم از 0-1 می باشد. بنابراین اگر بخواهیم بیشتر مقدار از 64 را از ماکزیمم (عدد 1) به دست آوریم، باید آن را 64 برابر کنیم. برای راحت تر شدن این کار، آن را با متغیر skip جا به جا می کنیم.
Update lastSample only when count is 0 //
} if(count == 0)
; lastSampleL = inL
; lastSampleR = inR
{
شما این قسمت را هر چقدر به جلو بریم، بیشتر متوجه می شوید. ابتدا در مورد پردازش آن به شما توضیح می دهم.
این دستور در واقع نه تنها متغیری که به عنوان خروجی قرار گرفته است را به روز رسانی می کند، بلکه این کار را تنها به هنگامی انجام می دهد که متغیر count برابر با 0 شود. به عبارت دیگر، هنگامی که مقدار 0 نباشد، مقدار دستور lastSampleL/R ثابت باقی می ماند.
متغیر count با عدد 0 شروع می شود (همانطور که پیش تر آن را توضیح دادیم) و به مرور به مقدار inL/R می رسد.
Continue lastSample sound // 
; main_yn[i * 2] = lastSampleL
; main_yn[i * 2 + 1] = lastSampleR
; ++count
این کد در واقع برعکس کاری را انجام می دهد که پیش تر با جدا کردن ورودی به L/R انجام داده ایم. در واقع خروجی اینجا بر اساس صدای چپ و راست برای "main_yn" نوشته شده است. در واقع، ما همان صدایی را می نویسیم که در ورودی "inL/R" وارد کردیم. هیچ چیز تغییر نکرده است. از طرفی، پس از این کار ما "count++" را مشاهده می کنیم که به ما نشان می دهد تا مقدار count را به اندازه یک واحد افزایش دهیم. به همین دلیل است که مقدار 0 به 1 تغییر کرده است. شما همچنین برای اجرای دستور for می توانید "i++" را وارد کنید. به طوری که به سیستم بفهمانید که مقدار "i" را تا یک مقدار بیشتر کند.
اتفاقی که پس از این می افتد این است که lastSampleL/R به روز رسانی نمی شود و همان سمپل ریت قدیمی به خروجی می شود. پس درست هنگامی که به صفر باز می گردیم،
reset count to 0 if skip exceeded // 
;  if(count > (int)skip) count = 0
بله، درست در اینجا. پیش از این، ما مقدار مشخصی را از ناب به دست آوردیم، آن را بر اساس مقدار 64 برابر کردیم تا به count برسیم. سپس این مقدار به صفر می رسد.
در واقع اتفاقی که می افتد این است که بر اساس مقدار های بزرگ از متغیر skip، همان مقدار داده به خروجی می رسد، بدون آن که به مقدار ورودی توجهی داشته باشد. به همین دلیل است که ما در refresh rate داده سمپل افت خواهیم داشت.
کار به پایان رسید!
در نهایت، این نماد ها را نیز داریم:
}
{
در واقع، این دو نماد، نماد های مهمی هستند. ما از نماد خط اول برای شروع دستور for خود استفاده می کنیم و نماد خط دوم را برای پایان دادن به آن استفاده می کنیم. در واقع، ما از این براکت ها {} برای باز کردن و یا بستن هر دستور یا پردازشی استفاده می کنیم. نکته جالب توجه این است که هر چه پردازش ما بلندتر و پیچیده تر باشد، احتمال این که بستن این براکت را فراموش کنیم نیز بیشتر می شود. بنابراین به این موضوع توجه ویژه ای کنید زیرا فراموش کردن آن باعث از بین رفتن کل کد شما خواهد شد.
از طرفی، پیدا کردن این اشتباه نیز کار بسیار دشواری است و برای بسیاری از برنامه نویسان بسیار عادیست تا زمان زیادی را صرف پیدا کردن اشتباهی به این کوچکی کنند. من نیز از این موضوع مستثنی نیستم! این اشتباه، جزو اشتباهاتی است که پس از پیدا کردن آن، دوست دارید تا سیستم خود را از پنجره به بیرون پرت کنید! و یا سر خود را به میز بزنید!
نرم افزاری که این بار تولید می کنیم، جزو نرم افزارهای "Modfx" می باشد و می توانیم آن را با استفاده از تمپلیت "tmpMod" تولید کنیم.
من پیشنهاد می کنم که این فایل را با فایل main.c مقایسه کرده و ویژگی های اضافه شده به آن را مشاهده کنید. همچنین سعی کنید تا مقدار متغیر skip را با مقادیر دیگر پر کرده و نتیجه آن را مشاهده کنید.
در نهایت، ما می توانیم نام افکت ساخته شده را در پارامتر Name در فایل manifest.json وارد کرده و یا این کار را در پارامتر PROJECT فایل project.mk انجام دهیم. برای این کار می توانید از یک ادیتور برای نوشته ها استفاده کنید.
افکت بعدی که به ساخت آن می پردازیم، افکت StopFX می باشد.
این افکت ممکن است کمی چالش برانگیز باشد. بنابراین امیدوارم برای شروع به ساخت آن هیجان زده باشید.
از شما بابت مطالعه این مقاله بلند تشکر می کنیم!

مقاله شماره 4: ساخت یک افکت جدید، قسمت دوم

سلام به همگی، من فرانک شیگتورا هستم، مهندس صدا در شرکت DOTEC-AUDIO این بار با یکدیگر به سراغ ساخت یک افکت دیگر می رویم، بنابراین به عنوان یک طراح در زمینه DSP من مسئولیت نوشتار این قسمت از مقاله را بر عهده گرفته ام.
این بار، موضوعاتی که در مقاله سوم به آن‌ها پرداختیم را حذف می کنیم بنابراین سعی کنید نکاتی که از مقاله قبلی به یاد دارید را در این مرحله نیز به کار بگیرید. این بار، سعی می کنیم تا یک افکت پیچیده تر تولید کنیم. حتی پیچیده تر از افکت قبلی.
این افکت صدای بسیار جالبی تولید می کند. مانند این است که یک رکورد را متوقف کنید. حال در ادامه هر آنچه که باید در مورد این افکت بدانید را به شما توضیح خواهم داد.
ابتدا، سمپلی از این افکت را دانلود کرده و در آن را از حالت فشرده خارج کرده و در مسیر زیر بریزید.
Korg\v1.1\platform\nutekt-digital
اول بیایید نحوه عملکرد این افکت را ببینیم. با استفاده از نرم افزار MSYS2 به این فولدر بروید.
Korg\v1.1\platform\nutekt-digital\stopfx
سپس دستور make را اجرا کنید. اگر دستور make را به یاد ندارید، به مقاله شماره 3 مراجعه کنید.
پس از آن که دستور اجرا شد، به کد مرجع نگاهی می اندازیم. فایل main.c را در فولدر stopfx باز می کنیم.
در ابتدای این فایل، این کد را مشاهده می کنید.
"include "userdelfx.h"#
"include "float_math.h#
"include "buffer_ops.h#
ما به خط اول برای ساخت delfx (نوع دیلی) نیاز داریم. پس از آن، خط دوم را به خاطر دارید؟
بله، همانند دفعه قبل، ما این به این خط برای اجرای floating point ها نیاز داریم.
خط سوم، ما دستور جدیدی را در اختیار داریم. این خط برای ذخیره کردن بسیاری از صدا ها در مموری NTS-1 ضروری می باشد.
همانطور که می توانید تصور کنید، شما به مموری با فضای زیادی نیاز دارید تا بتوانید فایل های داده موسیقی را در آن ذخیره کنید. قسمت SDK محصول NTS-1 شامل دستوری برای مموری است که به آن handling memory گفته می شود. در خط سوم ما دستور #include buffer_ops.h را در اختیار داریم که برای همین کار در نظر گرفته شده است.
یکی از کلمات جدیدی که باید در نظر داشته باشید، کلمه buffer است. شاید این کلمه را قبلا شنیده باشید.
کلمه buffer در حقیقت به معنای فضایی است که داده ای که به طور موقتی پردازش می شود در آن ذخیره می شود. این بار، ما می خواهیم فضایی را درست کنیم که بتوانید بسیاری از داده های خود را در آن ذخیره کنیم.
پس از آن، به سراغ فانکشن ها می رویم، همان طور که در مقاله قبل به آن پرداختیم.
} void DELFX_INIT(uint32_t platform, uint32_t api)
;buf_clr_f32(s_delay_ram, BUFFER_LEN);z = 0;z2 = 0;prev = 0
;next = 0;p = 0.f;slope = 0.f;isStop = 0
{
در نظر داشته باشید که این فانکشن به طور اختصاصی برای delfx طراحی شده است. تنها چیزی که در آن متفاوت است، نام آن است.
برای دیگر متغیر ها، می توانیم تنها از "0" به عنوان پیش فرض استفاده کنیم. اما برای buffer، ما از فانکشن buf_clr_f32() استفاده می کنیم.
بگذارید توقفی داشته باشیم و در مورد آخرین فانکشن کمی بیشتر صحبت کنیم.
void DELFX_PARAM(uint8_t index, int32_t value)
این فانکشن، همان فانکشنی است که در مقاله قبلی از آن استفاده کردیم، اما حال نام آن تغییر کرده است. اگر آن را به یاد نمی آورید، به مقاله شماره 3 نگاهی بیندازید.
حال به قلب پردازش، یعنی پردازش DSP رسیده ایم.
void DELFX_PROCESS(float *xn, uint32_t frames)
با استفاده از فانکشنی به نام DELFX_PROCESS، ما به این دو استدلال می رسیم.
Main Input/output: main_xn
Total number of frames: frames
جالب آنجاست که این بار تنها دو استدلال به دست آمد، در صورتی که در افکت قبلی شش استدلال داشتیم. کارمان این بار مقداری آسان تر است.
نکته مهم اینجا، modfx ما می باشد که در افکت قبلی، برای ورودی و خروجی به طور مجزا به دست آمده بود. اما این بار با "xn" این اتفاق به طور یکسان برای ورودی و خروجی می افتد.
نحوه عملکرد این موضوع به این شکل است که دستور "xn" حاوی اطلاعات ورودی می باشد و این اطلاعات به رغم آن که پردازش شده اند، دو مرتبه اجرا می شود و در end point به شکل یک فانکشن برای خروجی عمل می کند.
Copy to sampling buffer // 
; for(uint32_t i = 0; i < frames * 2; i++){ s_delay_ram[z++] = xn[i]
{ ;if(z > BUFFER_LEN - 1) z = 0
این دستور، تمامی اطلاعات ورودی ما را در داخل بافری که پیش تر آماده کرده بودیم قرار می دهد. این دستور در واقع همان دستور for ای است که دفعه قبل برای لوپ کردن از آن استفاده کردیم. حجم if در این دستور، به گونه ای عمل می کند که این دستور، تصمیمات خود را بر اساس شرایط می گیرد. Frames در واقع تعداد فریم ها برای یک چنل است، بنابراین ما مقدار آن را دو برابر می کنیم تا برای چنل های LR مورد استفاده قرار بگیرد. اما نکته ای که باعث گیج شدن می شود دستور ++ می باشد که پس از z آمده است. Z در واقع پس از ورودی zth به بافر افزایش می یابد.
برای منظم کردن، باید از صفر شروع کنیم، درست است؟ به این دلیل که نرم افزار هنگام ادامه کد نویسی و رسیدن به عدد مورد نظر برای BUFFER_LEN کرش نکند. اما همانطور که دفعه پیش نیز گفتم، می توانیم این دستور را به روش های مختلف اجرا کنیم. ما این بار به طور استاندارد این روش را در نظر گرفتیم تا مقادیر با یکدیگر همخوانی داشته باشند. این نکته را در نظر داشته باشید که اگر نرم افزار شما کرش کند، مشکلی برای دستگاه NTS-1 شما رخ نخواهد داد بنابراین نگران اشتباه کردن در مسیر کد نویسی نباشید. سپس ما مقدار را به صفر باز می گردانیم اما اجازه می دهیم تا بافر ادامه دهد (در واقع در قسمت بافر به نوشتن ادامه می دهیم.) این روش به ring buffer یا cyclic buffer شهرت دارد.
پس از آن، ما مقدار را آماده می کنیم تا سرعت پلی بک را کاهش دهیم.
Reset when knob is turned all the way to the left //
}if(rate < 0.1f){ isStop = 0; rate = 0.f; }else
ما از این پردازش برای بازگشت به سرعت اصلی پلی بک هنگامی که ناب را به طور کامل به سمت بچرخانید، استفاده می کنیم. اگر کاندیشن ها به rate==0.f ست شده باشند، استفاده از این دستور بسیار سخت خواهد بود. بنابراین بیایید آن را به 0.1f یا کمتر ست کنیم تا به این ترتیب، راحت تر بتوانیم کار کنیم. نکته ای که وجود دارد این است که ما نمی خواهیم تنها با کمترین مقدار فشار، ناب ما تغییر زیادی داشته باشد.
دستور isStop نشان می دهد که افکت استاپ ما اکتیو است یا خیر. در زبان C، ما می توانیم از اعداد 0 و 1 برای جایگزین کردن درست و غلط بودن یک عبارت استفاده کنیم. پس ما این متغیر را به 0 ست می کنیم تا به این ترتیب هنگامی که ناب را تغییر می دهیم، پارامتر مورد نظر ما نیز تغییر کند. بنابراین برای این کار باید متغیر rate را نیز ریست کنیم. دقت کنید که در پایان کد، دستور else آمده است. این دستور هنگامی مورد استفاده قرار می گیرد که می خواهیم پردازشی را تنها در هنگامی اجرا کنیم که دستورات قبلی پردازش نشده باشند. اولین باری که این کد را دیدم، آن را erase خواندم که بسیار احمقانه به نظر می رسید!
پس، هنگامی که شرایطی دستور else وجود داشت، ناب چرخانده می شود و به این ترتیب، افکت استاپ ما پردازش خود را انجام می دهد. حال ما باید مقدار اصلی را به هنگامی که ناب برای اولین بار چرخانده می شود وارد کنیم. از این جا به بعد داریم وارد جز
ئیات ساخت این افکت می شویم.
//
Determine the beginning stop point of the knob This is disabled when the knob is turning, since “isStop” is “1'
if(!isStop){ isStop = 1; rate = 0.f; p = (z - frames * 2.f) / 2.f; if(p < 0.f)p = (BUFFER_LEN - 2.f * p) / 2.f; } // this is not the closing bracket for “else”, but for the “if” statement just before
علامت تعجبی که قبل از دستور isStop آورده شده به دلیل عصبانیت نیست! بلکه در کد نویسی به معنی منفی کردن یک دستور می باشد. هنگامی که دستور isStop درست نمی باشد یا به عبارت دیگر غلط یا False است، کدی که داخل دستور if در نظر گرفته شده پردازش می شود. از آن جایی که ما قبلا مقدار آن را 0 قرار دادیم، این پردازش انجام شده است. اما، ما نمی خواهیم تا این پردازش هنگامی که ناب در حال چرخش است اتفاق بیفتد. بنابراین ما مقدار isStop را پس از آن، 1 قرار می دهیم. این به این معناست که پردازش تا هنگامی که ناب به طور کامل به سمت چپ چرخانده نشود، صورت نمی گیرد تا پس از آن، مقدار ما ریست شود. این نوع پردازش به پردازش flag مشهور است.
در برخی موارد، ممکن است ناب در قسمت خاصی قرار داده شده باشد که پیش از این در مورد آن صحبت شد، در این مواقع ما از کاندیشن قبلی رد می شویم و متغیر rate را ریست می کنیم تا پردازشی انجام نشود.
متغیر p در واع نشان دهنده playback point در بافر می باشد. از آن جایی که ما دو برابر مقدار فریم را از نظر داده در بافر ذخیره کردیم، ما شروع به کم کردن این داده ها می کنیم تا جایی که به مقدار فضایی دست پیدا کنیم که ذخیره را در آن آغاز کردم. و سپس مقدار آن را باز می گردانیم. ممکن است با خود بپرسید "آیا ما باز داریم همه چیز را بر دو تقسیم می کنیم؟" اما این موضوع کمی جلوتر واضح می شود. در آخر، ما پردازشی را برای دستور if می نویسیم که در آن، متغیر p به شکل منفی وجود داشته باشید. برای مثال، گر بافر یک دور بچرخد و نوشتن داده ها را تمام کند، کم کردن عدد کل از آن به ما عددی منفی را ارائه می دهد.
با این که در NTS-1 ما فضای بافر زیادی داریم و نگرانی خاصی در مورد منفی شدن مقدار آن وجود ندارد، اما خوب است که این عادت را پیدا کنیم که در بافر ها به اعداد منفی نیز فکر کنیم.
به نظر می آید که مطالب ناگهان بسیار پیچیده تر از افکت قبلی شد، اما مشکلی نیست! شما از پس آن بر خواهید آمد.
در ضمن، اگر دقت کنید متوجه می شوید که دستور if این بار از براکت ها بهره نمی برد. از آن جایی که ما تنها در حال پردازش خط آخر این کد هستیم، می توانیم بدون براکت به کار خود ادامه دهیم.به یاد آوردن این بسیار آسان است هنگامی که می خواهید یک تست کوچک را با اضافه کردن if انجام دهید.
کار ما هنوز با دستور عمیق else تمام نشده است.
for(uint32_t i = 0; i < frames; i++){ uint32_t length_mono =
;BUFFER_LEN / 2
از آنجایی که دستور for در این جا ظاهر شده است، ما افکت را اجرا می کنیم و شروع به بازنویسی متغیر xn می کنیم. شاید با خود بگویید که چرا مقدار فریم را دو برابر نمی کنیم؟ این به این دلیل است که این بار با یک سیگنال استریو کار داریم بنابراین باید دو ورودی مختلف را به طور همزمان پردازش کنیم.
اگر هنوز هم این موضوع برایتان واضح نیست، ایرادی ندارد، در ادامه متوجه آن خواهید شد.
در ابتدا، ما از معادل طولی قسمت monaural بافر استفاده می کنیم تا نامی را برای این متغیر در نظر بگیریم که فهمیدن آن راحت باشد.
این که بخواهیم همواره مقادیر مختلف را نصف کنیم، کاری بسیار دشوار می باشد و کد نیز به دلیل بهره مندی از فرمول‌های مختلف سخت تر می شود.
از آن جایی که عدد ما، عدد صحیح است، نوع متغیر را به uint32_t تغییر می دهیم.
Get the before-after index of the playback position, and the interpolating//
coefficient prev = (uint32_t)p;
prev = (uint32_t)p; slope = p - prev; next = prev + 1; if(next >
;length_mono - 1) next = 0
 قسمت مهم اما اینجاست
چهارچوب ما برای پایین آوردن سرعت پلی بک، این است که ما مقدار عددی میان دو سمپل را محاسبه کنیم و سپس سمپل را پیش ببریم. همانطور که به آرامی شروع به شمارش اعداد به شکل یــــک، دو— می کنیم. ما فاصله طولی میان دو قسمت را محاسبه می کنیم. متغیر p در این کد، یک عدد اعشاری است بنابراین با اعدادی سروکار داریم که گرد نشدند مانند 1.2 یا 5.4. هنگامی که نوبت به مرتب کردن می رسد، چیزی تحت عنوان موقعیت 1.2 وجود ندارد. به همین دلیل است که می گوییم در مورد موقعیت 1.2، مقدار 20% به مقدار اولیه نزدیک تر است.
با همین ذهنیت می توانیم فرض کنیم که مقادیر 1 و2 و3 و… در واقع به شکل 1.3 و 1.6 و 1.9 و 2.2 و 2.5 و… باشند. در خصوص طول موج آن‌ها، این مقادیر نشان دهنده نقطه اوج طول موج می باشد.
در ادامه این توضیحات، ما مقادیر p را به اعداد صحیح در خط اول تبدیل می کنیم. این روش از کدنویسی به casting مشهور است. ما از این روش برای تغییر تایپ ها استفاده می کنیم.
با تبدیل اعداد به اعداد صحیح، برای مثال می توانیم مقدار 7.4 در p را به 7 تبدیل کنیم. به این ترتیب اعشار را حذف می کنیم و عدد را به مقدار قبلی خود گرد می کنیم.
در خط دوم، عددی که از مقدار prev کم شده، همان مقداری است که به یک عدد صحیح در p اصلی تغییر داده شد و در slope ذخیره شد.
درست متوجه شدید، گرد کردن در این سیستم به سمت پایین رخ می دهد. بنابراین در مثال قبلی، عددی که به دست می آمد برابر با 0.4 بود.
ممکن است بسیاری از شما این موضوع را متوجه شده باشید اما ما از این متود برای به دست آوردن مقادیری استفاده می کنیم که 40% بیشتر از مقداری است که در محل pth وجود دارد.
پس، این مقادیر کجا می روند، به خط سوم، در واقع نظمی که پس از نظم pth در نظر گرفته شده است. سپس آن را به دستور next می بریم. این برای آخرین دستور for ما می باشد بنابراین بنابراین دستور next از مقداری که منظم شده تجاوز نمی کند. ما درباره این موضوع پیش تر صحبت کرده بودیم. به یاد دارید؟
Get the sound of the playback position//
;float s1L = s_delay_ram[prev * 2]
;float s2L = s_delay_ram[next * 2]
;float s1R = s_delay_ram[prev * 2 + 1]
;float s2R = s_delay_ram[next * 2 + 1]
; بالاخره، به اوج داستان رسیدیم!
در کد بالا، s1 اولین صدایی است که میان دو نقطه ای پیش تر در مورد آن ها صحبت کردیم، وجود دارد. S2 در واقع سیگنال های چپ و راستی است که آماده کردیم، یعنی صدای نهایی.
مقادیر prev و next، در واقع نظمی از اعداد هستند که میان دو نقطه ای که داریم وجود دارند.
قسمتی که در مورد دو برابر کردن مقادیر وجود دارد، به همان دلایلی است که پیش تر توضیح دادیم. اما از آنجایی که LR ورودی است که متناوب با بافر در نظر گرفته شده است. باید این ووردی ها را جدا کرده و ورودی L را برای اعداد زوج درج شده در دنباله قرار دهیم و ورودی R را برای اعداد فرد درج شده در دنباله قرار دهیم.
متغیر i در دستور for به شکل پله ای و یک به یک افزایش می یابد. بنابراین اگر ما اعداد را به شکل 0 و 1 و 2 و… محاسبه کنیم، می توانیم آن ها را به اعداد زوج و فرد تقسیم کنیم.
حال می توانید دلیل آن که ما اعداد را در ابتدا بر دو تقسیم کردیم تا بتوانیم مقادیر p را به دست بیاوریم را متوجه شوید.
;float currentL = 0.f,currentR = 0.f
;currentL = s1L + (s2L - s1L)*slope
;currentR = s1R + (s2R - s1R)*slope
ما اولین متغیر را ساختیم تا به طور موقتی صدا را در موقعیت مناسب خود قرار دهد.
ما بدون هیچ صدایی این دستور را آغاز کردیم. فرمول بعدی، در واقع محاسبه مقداری است که از استخراج کردن نقطه میانگین قبلی به دست می آید. ما تنها درصد کمی را در اینجا اضافه می کنیم که در واقع اختلاف بین مقدار بعدی و مقدار ابتدایی می باشد. برای مثال اگر مقدار مورد نظر به شکل 0، 10 پیشروی کند، مقدار مکانی که ما 20% از 0 آن را افزایش دادیم برابر خواهد بود با
0+(10-0)*0.2 =
2 این همان مقداری است که p ای که پیش تر در مورد آن صحبت کردیم در موقعیت 1.2ام قرار داشت.
می توانم به شما تبریک بگویم زیرا حالا وارد سخت ترین مرحله شدیم.
.Overwrite as output//
;xn[i * 2] = currentL
;xn[i * 2 + 1] = currentR
از آنجایی ما به راحتی می توانیم مقادیری که می خواهیم را برای صداهای مختلف به دست آوریم، مقدار xn را در ترتیب LR به روز می کنیم.
بیشتر عدد در این لوپ فریم ها بودند که از همان مقدار i برای پردازش LR بهره می بردند. بنابراین ما اگر ناب را تا نصفه هم بچرخانیم، مشکلی به وجود نمی آید.
ما این کار را از ابتدا نیز می توانیم انجام دهیم. از آن جایی که دیگر نیازی به جدا کردن آن ها نیست، تنها کافی است تا ناب را بچرخانیم. در مورد استفاده از این ناب نیز جسور باشید!
//
Advance the playback point according to the “rate” amount p += 1.f - rate; if(p > (float)length_mono - 1.f) p = 0.f; } // “for” ends here } // “else” ends here
سپس، ما مقدار p را ادامه می دهیم تا به rate لوپ بعدی برسیم. علامت =+ در این کد به این معناست که ما مقدار را راست را به مقدار چپ باید اضافه کنیم. دلیل آن که ما این عدد را به شکل یک عدد معکوس در آورده ایم این است که هنگامی که ناب را به طور کامل می چرخانید، مقدار rate به عدد 0 باز گردد. این عدد به سرعت پیشروی می کند و هنگامی که به 1 رسید متوقف می شود. در مقدار 0، دنباله به شکل واحد افزایش می یابد، که در واقع سرعت استاندارد پلی بک نیز می باشد. هر چه قدر ناب را بیشتر به سمت راست بچرخانید، برای مثال، دنباله به اندازه 0.3 افزایش پیدا کند، سرعت پلی بک کمتر می شود.
دستور if بعدی به مقدار rate صفر باز می گردد پس از آن که p به اندازه یک چنل پیشروی کند.
این کد را با بستن براکت ها برای دستورات for و else تمام می کنیم.
ماجراجویی ما در اینجا به پایان رسید.
نرم افزار به دست آمده، Delfx می باشد و می توانیم بار دیگر این نرم افزار را با استفاده از تمپلیت tmpDelay تولید کنیم.
اگر این فایل را با فایل main.c مقایسه کنیم، متوجه می شوید که از کجا باید شروع به نوشتن کد های این برنامه کنید.
در نهایت، همانند افکت قبلی نام این افکت را در پارامتر name در فایل manifest.json وارد می کنیم و پس از آن، همین نام را باید در پارامتر PROJECT فایل project.mk نیز وارد کنیم.
با این که این افکت در واقع نسخه ای ساده شده از افکت stop Effect شرکت DOTEC-AUDIO در پلاگین DeeFX می باشد، اما اساس آن ها یکسان است. بنظر من برای ساخت این افکت نیاز به این دارید که با حواس بسیار جمع به کد نویسی بپردازید.
در اینجا کار من برای توضیح مقالات مربوط به DSP به پایان رسید. در مقاله بعدی یک جمع بندی پایانی خواهیم داشت.
متشکرم که این مقاله بلند را مطالعه کردید. 

مقاله شماره 5: ساخت یک وکودر

سلامی دوباره به همه. من شینجی ایجیما از شرکت DOTEC-AUDIO هستم. امیدوارم از دو مقاله قبل که دوستم، فرانک شیگتورا در مورد پردازش DSP توضیحات کاملی داد، لذت برده باشید.
در واقع، ممکن است اطلاعاتی که در دو مقاله قبل دیده اید کمی سخت و طاقت فرسا بنظر بیاید اما پردازشی که مشاهده کردید که شامل ورودی، خروجی و تکرار است، فرایندی است که در تمامی افکت‌ های تولید شده مشاهده می شود.
افکت‌ هایی که در قسمت قبل تولید شد، افکت‌هایی بودند که کدنویسی آن‌ها کمتر از 100 خط بود و به نوعی، افکت‌ های ساده ای به شمار می رفتند. امیدوارم از این فرصت استفاده کرده و در مورد موضوعاتی که در مقاله‌ های قبلی در مورد آن‌ها صحبت شد، تحقیق کرده باشید. متاسفانه ما تنها می توانستیم روش ساخت افکت ها را به شما نشان دهیم و وقت کافی برای نشان دادن روش ساخت Oscillator ها نداشتیم.
در این قسمت اما، ما به جمع بندی مقالات می پردازیم بنابراین خیلی در مورد نرم افزارهای مختلف صحبت نمی کنیم.
با این حال، در این قسمت دوست دارم تا این خبر را به شما بدهم که در شرکت DOTEC-AUDIO، ما موفق شدیم تا یک وکودر 16 بانده بسیار با کیفیت تولید کنیم که نحوه کارکرد آن، بر اساس بخش Oscillator های محصول NTS-1 می باشد. بنابراین برای فهم بهتر این افکت، من توضیحاتی ابتدایی در مورد نحوه کار این افکت و دیگر پلاگین هایی که شرکت ما برای PC ها تولید کرده است خدمت شما ارائه خواهم کرد.
خب، در باب وکودری که ما توانسته ایم طراحی کنیم، باید بدانید که این افکت، یک وکودر حرفه ای 16 بانده است که با اتصال یک میکروفون به محصول NTS-1 می توانید از آن استفاده کرده و صدای خود را به صدایی ربات گونه تبدیل کنید.
آیا از صدای این افکت خوشتان آمد؟ بنظرتان امکان این که توانید یک وکودر 16 بانده را در یک سینت سایزر کوچک در اختیار داشته باشید، فوق العاده نیست؟
ما برای ساخت این افکت از برخی ویژگی‌های پنهان در NTS-1 استفاده کردیم که کمی پیچیده بنظر می رسد، اما تلاش خود را می کنم تا بتوانم آن را به خوبی برای شما شرح دهم.
اولین نکته ای که باید در نظر داشته باشید، این است که NTS-1 از یک جک ورودی Audio IN بهره می برد.
ما می توانیم ورودی Line Level Audio را با استفاده از این جک وارد این محصول کنیم و سپس با استفاده از افکت‌ ها و Oscillator هایی که برای این سینت سایزر ساخته شده است، صدای آن را تغییر دهیم. (این ویژگی یکی از خاص ترین ویژگی های NTS-1 به شمار می رود.) با این حال، سیگنال ورودی ما باید Line Level باشد و این صدا با صدای Oscillator های این دستگاه ترکیب می شود. این در واقع مشکلی بود که ما باید به دنبال راه حل آن می گشتیم.
در مورد ورودی Line، با توجه به این که NTS-1 تنها از ورودی Line پشتیبانی می کند، ما به نوعی آمپلی فایر یا میکسر برای تشدید صدای نیاز داشتیم تا بتوانیم میکروفون را به این محصول متصل کنیم. از طرفی، به این دلیل که این جک برای ورودی Line طراحی شده است، این محصول شامل یک Attenuator یا کم کننده صدا نیز می باشد تا صدای ورودی دستگاه را به حد مناسب برساند.
خوشبختانه، NTS-1 شامل تنظیمات Global Parameters می باشد که می توانیم از آن برای تغییر برخی تنظیمات بنیادی استفاده کنید. برای مشکل ما، در صفحه 16 دفترچه راهنمای NTS-1، پارامتری نوشته شده به نام Input Trim.
اگر اطلاعات مربوط به این پارامتر را در دفترچه راهنمای دستگاه خود پیدا نمی کنید، می توانید آخرین نسخه دفترچه راهنمای این محصول را از اینجا دانلود کنید. همچنین برای انجام این کار لازم است تا دستگاه خود را با اتصال به سیستم کامپیوتری خود، به روزرسانی کنید.
تنظیمات کارخانه برای این پارامتر، 6:-6db می باشد. اما با تغییر آن به 0:0db می توانیم ویژگی Attenuation این محصول را عملا از کار بیاندازیم. پس از انجام این کار، می توانیم میکروفون خود را بدون نیاز به یک آمپلی فایر به NTS-1 متصل کنیم. (نیازی به استفاده از این تنظیمات برای ورودی Line دستگاه وجود ندارد.)
اگر سیگنال ورودی شما همچنان از Volume مورد نظر برخوردار نیست، می توانیم پارامتر A وکودر را به گین لینک کرده و با استفاده از این ناب، بتوانید Volume آن را تا 100 برابر بیشتر کنید.

درباره ورودی صدا و صدای Oscillator

یک وکودر صدایی را از ورودی میکروفون دریافت می کند (ماژولاتور) و آن را با صدای یک سنت سایزر ترکیب می کند (حامل)
با این که هر دو المان نیاز به ورودی‌های جداگانه دارند، اما NTS-1 از این قابلیت پشتیبانی نمی کند. اتفاقی که در این محصول رخ می دهد، این است که صدای سینت سایزر و ورودی ای که به شکل اکسترنال به محصول متصل می شود با یک دیگر ترکیب می شود و سپس با استفاده از افکت مورد پردازش قرار می گیرد. می توانید این کار را انجام داده تا متوجه منظور من شوید.
برای پیش دستی کردن این اتفاق، ما به یک ایده بسیار خلاقانه دست پیدا کردیم که اساس آن، تقسیم کردن صدا به دو حالت بود تا بتوانیم صدایی استریو را در اختیار داشته باشیم. اگر شما صدای سینت سایزر یکسانی را در چنل های چپ و راست در اختیار داشته باشید، و سپس بعد از آن ورودی میکروفون را به یکی از آن ها متصل کنید، می توانید صدای خارج شده از میکروفون را به دو سیگنال جداگانه تقسیم کرده و از آن برای دستیابی به صدایی استریو استفاده کنید. آیا متوجه منظور این پاراگراف شدید؟
پس بیایید آن را به شکل فرمول زیر بنویسیم:

(mic signals + synth signals) – synth signals = mic signals

با استفاده از این متود در NTS-1، ما می توانیم صدای Oscillator را به دو سیگنال مجزا تقسیم بندی کنیم و این بار یک وکودر واقعی را تولید کنیم!
در کنار این موضوع اما، باید این نکته را در نظر داشته باشید که برای این کار، نیاز به یک روش کوچک برای اتصال میکروفون به دستگاه دارید که عکس های آن را می توانید در قسمت پایین مشاهده کنید.
با استفاده از یک میکروفون داینامیک با خروجی Monaural. برای این کار، صدای خود را به گونه ای تنظیم کنید که تنها از چنل چپ بتوانید آن را بشنوید (چنل راست باید بی صدا باشد.) سپس از ورودی Line برای متصل کردن صدای استریو به NTS-1 استفاده کنید. با استفاده از ورودی Line میکسر، می توانیم سیگنال استریو را که شامل صدای میکروفون در چنل L می شود را به NTS-1 متصل کنیم. سپس از یک کابل اسپلیتر استفاده می کنیم تا میکروفون را به چنل L متصل کنید.

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


استفاده از یک میکروفون با خروجی Monaural راحت ترین روش برای دست یابی به این نتیجه است. شما می توانید از میکروفون هایی که دارای خروجی استریو هستند نیز استفاده کنید و همین نتیجه را با کابل اسپلیتر به دست آورید. ما پیشنهاد می دهیم تا این کار را نیز به عنوان یک آزمایش انجام دهید.
با تمامی این تفاسیر، شما می توانید نسخه آزمایشی این وکودر را به همراه Oscillator آن آن به شکل رایگان دریافت کنید. در نسخه آزمایشی شما می توانید برای 3 دقیقه از این افکت استفاده کنید. نسخه کامل این افکت به قیمت 10 دلار (به همراه مالیات) در داخل وبسایت DOTEC-AUDIO قابل دسترسی است.

https://dotec-audio.com/nts1.html?lang=en

به شخصه از اینکه توانستیم از سینت سایزر NTS-1 به عنوان وکودر استفاده کنیم، بسیار شوکه شدم!
حال که در حال مطالعه این مقاله هستید، دوست دارم در مورد خودمان، شرکت DOTEC-AUDIO و محصولاتی که تاکنون تولید کرده ایم بیشتر صحبت کنم.
شرکت DOTEC-AUDIO یک شرکت نرم افزاری است که توسط موزیسین و مهندس صدا، فرانک شیگتورا و شرکت fmfmsoft اداره می شود.
هدف اصلی ما، ساخت و فروش نرم افزار ها و پلاگین های مناسب برای نرم افزار های میزبان مختلف است که می توانید در سیستم های ویندوز، مک و یا iOS (برخی محصولات) آن ها را نصب و از آن ها استفاده کنید.
محصول Gadget2 شرکت کرگ، شامل دستگاه ماکسیمایزر است که توسط شرکت ما ساخته شده و نام DeeMax بر روی آن قرار داده شده است. بنابراین بسیاری از شما ممکن است نام شرکت ما را از این محصول به یاد آورید.
6 سال از زمانی که شرکت ما فعالیت خود را آغاز کرد می گذرد و در حال حاضر، محصولات ما تعدد بسیار خوبی دارد. پلاگین های مناسب افرادی است که به ساخت موسیقی بر روی سیستم های کامپیوتری خود می پردازند و از طرفی، افرادی که به پخش محتوای تولید شده می پردازند نیز می توانند از پلاگین های ما استفاده کنند. اگر علاقه داشتید، می توانید از وبسایت ما دیدن کنید. ما پلاگین های مختلفی ساختیم که با بسیاری از مطالب این مقاله ها هم راستا می باشند.

آیا از صدای این افکت خوشتان آمد؟ بنظرتان امکان این که توانید یک وکودر 16 بانده را در یک سینت سایزر کوچک در اختیار داشته باشید، فوق العاده نیست؟
ما برای ساخت این افکت از برخی ویژگی‌های پنهان در NTS-1 استفاده کردیم که کمی پیچیده بنظر می رسد، اما تلاش خود را می کنم تا بتوانم آن را به خوبی برای شما شرح دهم.

First of all, the NTS-1 features an AUDIO IN jack.


We can plug in a line-level audio input to this jack and apply effects or mix the oscillator sound with this input. (This is one of the fantastic specs that this unit offers.) However, the input needs to be line-level, and the input audio gets mixed with the oscillator sound, which are hurdles we had to figure out how to overcome.

- About the line input (audio input level)
Since the NTS-1 input requires line input, we would ordinarily need a mic amp or a mixer to amplify the sound if we wanted to plug in a mic.
Also, since this jack was designed for line input, this unit also features an attenuator that is necessary to attenuate the levels.

Luckily, the NTS-1 has “global parameter” settings, which can be used to change how various operations work on this unit.
I’d like you to refer to the “Global Parameters” section in the Owner’s Manual that comes with the NTS-1 (on the lower right-hand part of page 16). There’s a parameter called “Input Trim.”

If you can’t find it in your Owner’s Manual, please download the latest one from here. It also might be necessary to update your NTS-1 via PC.

The factory default setting for this parameter is “6:-6DB”, but by setting this to “0:0DB” we can disable the attenuation. Use this setting when you want to plug in a dynamic mic or similar device without using an amp. (You don't need to make this setting for a line input device.)

If the input volume is still too low, we can overcome this by setting the vocoder parameter A to “Gain” and adjusting this knob to amplify the volume by 100 times maximum.

- About the input audio and oscillator sound
A vocoder uses the audio from a mic input (the “modulator”) to process the sound of a synthesizer (the “carrier”). Although both of these elements require separate inputs, the NTS-1 does not have this feature.
What happens is that the sounds of the synth and external input get mixed together and then processed by the effect. You can try it out and see what I mean.

To circumvent this, we came upon a bold idea to separate the sounds by using the differential in the stereo audio.
For example, if you have the same synthesizer sound in both the left and right channels, but then add the mic sound to just one channel, you’re able to extract the audio from the mic by using the differential from both signals. Does this line of reasoning make sense?

So, it can be shown as the following formula;

(mic signals + synth signals) – synth signals = mic signals

Using this method on the NTS-1, we separate the audio from the oscillator sound and process them to make our vocoder this time a reality!

That aside, we should note that there’s a little trick involved in connecting the mic, some examples of which are shown below. (Prerequisite: get the L channel as mic input)

- Use a monaural-output dynamic microphone - From the beginning, prepare a sound source where your voice is heard only on the L channel (R channel should be silent), and use line input to bring the stereo signal into the NTS-1 - Use the line input from a mixer to bring the stereo signal containing only the mic sound on the L channel into the NTS-1 - Use a splitter cable to connect the mic to only the L channel

  • Example of connection using a dynamic microphone

  • Example of connection using a splitter cable

Using a monaural-output microphone is the simplest way. If you use a stereo-output microphone, you can get the same result with a splitter cable. Have a try!

With all that said, you can download a trial version of our vocoder together with the oscillator as a set for free. You can try it for 3 minutes in a trial version. And a full version is now sold for $10 (excluding tax) on the DOTEC-AUDIO website.

https://dotec-audio.com/nts1.html?lang=en

Frankly, I’m just blown away by the fact that we can use the NTS-1 as a vocoder.

Since you’re here, I’d like to give you a rundown of who we are at DOTEC-AUDIO as well as our original product lineup.

DOTEC-AUDIO is a software brand that’s managed and operated cooperatively by musician and engineer Frank Shigetora and by fmfmsoft Corp.
Our general business is the development and sales of plugins for music-related software like DAWs that operate on Windows, macOS and iOS (for some products).

The KORG Gadget2 includes a maximizer made by DOTEC-AUDIO called “DeeMax,” so you might have heard of us from that.

Six years have passed since DOTEC-AUDIO got started, and we now have a much larger lineup of products, including products for musicians doing music production on a PC and products for content distribution. If you’re interested, please check out our website. There are a few products there in particular that have a deep connection with what we’ve talked about in this article series.

- DeeFX Multi-Effect

وبسایت به زبان انگلیسی: : https://dotec-audio.com/deefx.html

ما به طور مختصر در مورد این محصول در اولین مقاله این صفحه صبحت کردیم. این مولتی افکت به گونه ای طراحی شده که به شما امکان استفاده از دیستورشن، فیلتر و دیلی را می دهد، اما این افکت‌ ها در یک پکیج قرار گرفته اند که ما برای ساخت بدون نقص آن، زحمات زیادی را کشیده ایم. این باعث شده تا این افکت ظاهری بسیار ساده داشته باشید و به راحتی بتوانید هر کدام از این افکت ها را خاموش یا روشن کرده و مقدار آن را تغییر دهید.
این پلاگین را به افکت های bitcrusher و vinyl stop اضافه کنید، افکت هایی که در این مقاله ها نسخه ساده شده آن ها برای محصول NTS-1 شرح دادیم. این محصولی است که بسیاری از موزیسین های حرفه ای نیز از آن استفاده می کنند.

وکودر DeeVocoder

وبسایت به زبان انگلیسی: https://www.dotec-audio.com/deevocoder.html
همانطور که از نام این محصول پیداست، این افکت یک وکودر است که توسط شرکت ما ساخته شده است. در این وکودر از یک filter bank-type vocoder استفاده شده است (که در حال حاضر در حال احیا شدن است.) که امکان سوئیچ میان 8، 16 و یا 32 باند را به شما می دهد. همچنین این افکت از قابلیت Formant Shift نیز بهره می برد.
برخلاف محصولات FFT-Type، وکودر ما به گونه ای طراحی شده که هیچ تاخیری را با آن احساس نمی کنید و این قابلیت، این امکان را به شما می دهد تا همان حسی را که با استفاده از وکودرهای آنالوگ به دست می آورید را از این محصول به دست آورید.
ما بر روی استفاده از این محصول به عنوان افکت تاکید بسیاری داریم زیرا با استفاده از این پلاگین به شکل ورودی Sidechain، ایده های بسیاری را می توانید به واقعیت تبدیل کنید. البته، هر ورودی صدا به Sidechain قابلیت استفاده به شکل حامل را دارد، بنابراین می توانید از این افکت در کنار سینت سایزر های خود بر روی گیتار، بیس، وکال و یا درامز آهنگ های خود نیز استفاده کنید.
به این ترتیب، از آن جا که این افکت یک پلاگین برای نرم افزار های میزبان می باشد، آزادی عمل بیشتری را در قیاس با افکت وکودر ما برای NTS-1 در اختیار شما قرار می دهد.
تمامی محصولات شرکت DOTEC-AUDIO شامل نسخه آزمایشی می باشد که می توانید به صورت رایگان از آن ها استفاده کنید. (نیاز به احراز هویت و یا دیگر روش ها نیز وجود ندارد.) اگر شما از نرم افزارهای میزبانی استفاده می کنید که از پلاگین هایی با فرمت VST یا AU بهره می برند، امیدواریم تا از محصولات ما نیز استفاده و از آن ها لذت ببرید.

در پایان
این سری مقاله ها به عنوان قسمتی از طرح پیشنهادی ما به شرکت کرگ در دسترس شما قرار گرفته است. دلیل آن این بود که ما می خواستیم تا در مورد محصول NTS-1 و ویژگی های انقلابی آن در زمینه برنامه نویسی صحبت کنیم.
یکی از نکات بی نظیر در مورد محصول NTS-1 این است که به عنوان یک سینت سایزر کوچک، دست شما را از نظر برنامه نویسی تا حد بسیار زیادی باز می گذارد. از طرف دیگر، به عنوان متخصصان برنامه نویسی نرم افزاری، ما بسیار خوشحالیم که محصول NTS-1 دارای یک ورودی صدا می باشد و این امکان را به ما می دهد تا از آن هم به عنوان سینت سایزر و هم به عنوان یک یونیت افکت استفاده کنیم. این بسیار جالب است که NTS-1 تمامی این امکانات را با قیمتی بسیار مناسب در اختیار کاربران قرار می دهد. به همین دلیل است که ما این مقاله ها را آماده کردیم، تا مردم بیشتری را در جریان امکانات جذاب این محصول قرار دهیم.
همانطور که بار ها و بار ها در این مقاله به آن اشاره کردیم، پایه اصلی برنامه نویسی نرم افزاری یکسان است. فرقی نمی کند که شما در حال ساخت یک افکت برای NTS-1 باشید و یا در حال ساخت یک پلاگین برای نرم افزار میزبان خود.
با این که ممکن است بی شمار راه برای رسیدن به جواب های مورد نظر خود داشته باشید، اما باید بدانید که چگونه می خواهید به صدای مورد نظر خود دست پیدا کنید. و این را باید از میان ورودی ها و خروجی ها پیدا کنید.
ما امیدواریم که این سری از مقالات این فرصت را به بسیاری از افراد داده باشد تا به نحوه ساخت اپلیکیشن های موزیک و سینت سایزر مورد علاقه خود، علاقه مند شده باشند. و این علاقه در کنار ساخت افکت های گوناگون برای محصول NTS-1 اتفاق بیفتد.
من دوست دارم تا از صمیم قلب از تمامی افرادی که این سری از مقالات را دنبال کردند تشکر کنم. همچنین از شرکت کرگ نیز ممنونم که این مقالات را منتشر کردند.
امیدوارم روزی همه شما را از نزدیک ببینم. فرانک و ایجیما از شرکت DOTEC-AUDIO.
We use cookies to give you the best experience on this website. Learn more Got it