تصور کنید یک دستیار هوشمند نه تنها در نوشتن متن، بلکه در چیدمان نتها و تنظیم پیچیده سینتیسایزرها در محیط موسیقی شما نقش اول را بازی کند. در Blokkily، این تصور به واقعیت تبدیل شده است تا مرز بین ایدهی انسانی و اجرای ماشینی در تولید صدا از بین برود. آیا یک مدل رویداد واحد میتواند سه ویرایشگر متمایز را همگام کند؟ در Blokkily، که یک ایستگاه کاری دیجیتال (DAW) آزمایشی با رویکرد «الگو-محور» است، این معماری به تهیهکننده اجازه میدهد تا یک ترکر (Tracker)، یک پیانو رول (Piano Roll) و یک گرید گامبهگام (Step Grid) را بهطور همزمان مدیریت کند و تضمین نماید که هر ویرایش فوراً در تمام نماها منعکس شود.
بسیاری از نرمافزارهای تولید موسیقی مدرن، این ویرایشگرها را به عنوان حالتهای مجزا یا کلیپهای متمایز میبینند، اما Blokkily آنها را بازتابهایی از یک الگوی واحد و معیار (Canonical Pattern) میداند. این بدان معناست که نتی که در پیانو رول وارد میشود، بلافاصله در ترکر و گرید گامبهگام قابل مشاهده است و اصطکاک ناشی از جابهجایی بین پارادایمهای مختلف توالیسازی از بین میرود.

زمینه و معماری فنی
به نقل از مستندات پروژه در گیتهاب، این ایستگاه کاری بر پایه یک مدل موسیقی مستقل از فریمورک بنا شده است. این مدل دادههای پیچیده توالیسازی، شامل نتها، آکوردهای معنایی، وارونهها (Inversions)، استرام (Strum)، ریززمانبندی (Microtiming)، احتمال پخش (Probability)، رچتها (Ratchets)، شرایط حلقه (Loop conditions) و قفلهای پارامتر (Parameter locks) را مدیریت میکند.
Blokkily فرمت CLAP (CLever Audio Plugin) را نه به عنوان یک افزونه اختیاری، بلکه به عنوان یک استاندارد بومی الزامی در نظر میگیرد. کاتالوگ بومی CLAP وظیفه بارگذاری ماژولها، مقداردهی اولیه نقاط ورود، پرسوجوی فکتوریها و ثبت توصیفگرها و ویژگیهای پلاگین را بر عهده دارد. آداپتور نمونه CLAP، فرآیندهای ایجاد، فعالسازی و رویدادهای نت/پارامتر با دقت نمونهبرداری (Sample-accurate) را همراه با پردازش استریو و جریانهای وضعیت پیادهسازی میکند.
علاوه بر این، سیستم از طریق یک آداپتور مبتنی بر JUCE از VST3 پشتیبانی میکند که دستههای پلاگین و مکانهای پیشفرض سیستم را اسکن میکند. برای اطمینان از اینکه اتوماسیون VST3 دارای دقت نمونهبرداری باشد، آداپتور هر بلوک را در آفستهای پارامتر تقسیم میکند. همچنین، یک آداپتور داخلی FluidSynth فایلهای SF2/SF3 را بارگذاری کرده، رویدادهای نت با آفست نمونه را میپذیرد و صدای استریو رندر میکند. برای اینکه هر تکرار از یک الگو در فاز باقی بماند، آداپتور مجموعهای از رندرهای مشترک دادههای نمونه بانک را نگه میدارد و هر نت را روی رندری پخش میکند که بلوک ۶۴-فریمی آن دقیقاً روی فریم همان نت شروع شود. این امر تضمین میکند که صرفنظر از طول الگو به نمونه، صدا در فاز باقی بماند. کوروس (Chorus) هر بانک روی ساعت مخصوص به خود اجرا میشود، مشابه یک LFO با اجرای آزاد.
برای تضمین کیفیت صدای حرفهای، سیستم از یک انتقال بلادرنگ بدون تخصیص حافظه (Allocation-free real-time transport) استفاده میکند. این امر از ایجاد اختلالات صوتی (Glitches) در حین پخش جلوگیری میکند، زیرا ویرایشها بازترجمه شده و در مرز بلوک بعدی به کالبک رندر تحویل داده میشوند، بدون اینکه رشته صوتی متوقف شود، گراف بازسازی گردد یا مکاننمای پخش (Playhead) جابهجا شود. نتی که در حین پخش پاک میشود، به جای اینکه به صورت ringing باقی بماند، رها (Release) میشود. موتور رندر با نرخی که دستگاه صوتی توافق کرده است عمل میکند؛ برای مثال، یک سینک قفل شده روی ۴۴.۱ کیلوهرتز، آهنگ را با گام و تمپوی خودش پخش میکند، نه به صورت تخت و کند.
هوش مصنوعی و کنترل عاملمحور
قلب تپنده این پروژه، دستیار آهنگسازی مبتنی بر هوش مصنوعی زاینده است. یک نوار پرامپت بالای ویرایشگرها به کاربران اجازه میدهد تا عبارتهای موسیقی درخواست کنند، مانند «هتهای خارج از ضرب» (offbeat hats) یا «یک گام پنتاتونیک مینور صعودی».
این دستیار بهطور پیشفرض به مدل محلی Ollama متصل است، هرچند پشتیبانی از نقاط انتهایی (Endpoints) Gemini و MiniMax را نیز دارد. هوش مصنوعی یک پیشنهاد تولید میکند که تهیهکننده باید برای پذیرش آن روی «Apply» کلیک کند تا تضمین شود که انسان تصمیمگیرنده نهایی در آهنگسازی است. این دستیار صرفاً روی رشته رابط کاربری (GUI thread) عمل میکند و رشته صوتی هرگز با فراخوانیهای LLM مواجه نمیشود. برای کاربرانی که دسترسی به شبکه ندارند، گیت bdd_llm_assistant میتواند نوار پرامپت را بهطور کامل هدایت کند.
اما تحول واقعی در تبدیل Blokkily به یک سرور پروتکل زمینهٔ مدل (MCP) نهفته است. این قابلیت به یک عامل هوش مصنوعی خارجی، مانند Claude Code، اجازه میدهد تا پنجره در حال اجرا را از طریق یک سوکت محلی (در لینوکس در مسیر $XDG_RUNTIME_DIR/blokkily-mcp.sock و در ویندوز از طریق یک Named Pipe) هدایت کند. این پل ارتباطی را میتوان از طریق دستور claude mcp add blokkily -- blokkily --mcp یا از طریق یک پیکربندی JSON با استفاده از دستور blokkily --mcp ثبت کرد.
یک عامل متصل از طریق MCP میتواند طیف گستردهای از وظایف تولید موسیقی را انجام دهد:
- خواندن جلسه جاری و الگوها از طریق
get_sessionوget_pattern. - نوشتن نتها و تنظیم پارامترهای ساز با استفاده از
write_notesوset_parameter(هدف قرار دادن پیشفرضهای یک سینت یا هر پیچک/Knob با نام آن). - کنترل انتقال (پخش/توقف) و گرفتن اسکرینشات برای بازخورد بصری.
- لیست کردن و بارگذاری پلاگینها از سیستم با استفاده از
list_pluginsوset_instrument. - تنظیم پیشفرضهای SoundFont از طریق
set_soundfont_presetبا استفاده از شمارههای بانک و برنامه General MIDI. - دسترسی به هر متد و ویژگی که کنترلهای پنجره استفاده میکنند از طریق
describe،callوget_property؛ شامل میکسر، افکتها، اتوماسیون، کلیپها، تمپو و تیونینگ.
ابزارهای پیشرفته و پردازش صدا
Blokkily فراتر از سیستم استاندارد ۱۲-تونه (Equal Temperament) میرود. این نرمافزار از تیونینگهای مبتنی بر سنت (Cents)، شامل تقسیمهای مساوی هر دوره، تیونینگهای گویا (Rational) و تاریخی، و لیستهای سبک Scala پشتیبانی میکند. هر نت شامل کلید ۱۲-تونه به علاوه یک مقدار بازتنظیم (Retune) است که اجازه میدهد الگوهای ۱۹-تونه یا ربع-تونه به صورت گام دقیق (و نه تقریبی) به سینتهای CLAP، VST3 و SoundFont برسند.
برای اینکه این تیونینگها قابل نوازندگی باشند، نرمافزار چهار سطح رابط کاربری ارائه میدهد:
- یک کیبورد پیانوی استاندارد.
- گریدهای ایزومورفیک در هفت چیدمان: Wicki-Hayden، Bosanquet، جدول هارمونیک و آکاردئون B-system روی کاشیهای ششضلعی، و همچنین Jankó، چهارمها (Fourths) و سومهای بزرگ روی کاشیهای مربعی. اینها به جای نیمپرده، بر اساس سنت در هر گام نوشته شدهاند.
- فرتبوردهای گیتار برای نه نوع تیونینگ رشته مختلف.
- پدهای آکورد که هارمونیها را با اعداد نامگذاری کرده و برای هر وارونه یک ردیف را روی هم میچینند.
این سطوح میتوانند بهصورت افقی یا عمودی جهتدهی شوند. اگر سطحی نتواند در اندازه کلیدهای قابل نوازندگی رسم شود، به جای کوچک کردن کلیدها، اسکرول میشود. یک سوئیچ مقیاس خودکار (Auto-scale) میتواند کلیدهای نواخته شده را روی نتهای گام فعال بچسباند (Snap). وقتی یک جلسه بدون ساز باز میشود، بهطور خودکار SoundFont General MIDI ماشین (بانک پرکاشن برای ترکهای درام) به آن اختصاص مییابد تا ایستگاه کاری بلافاصله صدا تولید کند.
میکس و پردازش صوتی
در بخش میکسر و مسیریابی، ایستگاه کاری شامل یک میکسر کامل با گین (بر حسب دسیبل)، پان با توان ثابت (Constant-power pan)، mute، solo و یک پیکمتر است که همگی از طریق یک فیدر مستر جمع میشوند. سیستم از مسیریابی پیچیده، شامل ارسالهای پس از فیدر (Post-fader sends) و بازگشتهای پیش از پان (Pre-pan returns) پشتیبانی میکند. بازگشتها حتی زمانی که یک ترک منبع solo شده است، شنیدنی باقی میمانند.
سیستم از سایدچین (Sidechaining) پشتیبانی میکند: یک کمپرسور یا هر افکت CLAP/VST3 با ورودی سایدچین میتواند سیگنال ترک دیگری را (بعد از اینسرتها اما قبل از فیدر آن) بشنود. این امر اجازه میدهد یک کیک که mute یا کم شده است، همچنان بیس را Duck کند. موتور ابتدا منبع کلید را رندر میکند و کلیدهای مربوط به ترک خودِ اینسرت یا حلقههای کلید را رد میکند. سازهایی با خروجیهای اضافی (پورتهای خروجی CLAP یا باسهای کمکی VST3) یک چیپ + OUT دریافت میکنند که اجازه میدهد خروجیها به کانالهای مجزای میکسر (مثلاً "PAD AUX 1") تقسیم شوند. این کانالها بخشی از آهنگ هستند و ذخیره، Undo و اکسپورت میشوند. Solo کردن ترک منبع، کانالهای آن را شنیدنی نگه میدارد، در حالی که Solo کردن یک کانال به تنهایی، فقط همان کانال را پخش میکند.
در زمینه دستکاری صدا و افکتها، Blokkily کتابخانه Rubber Band را برای تغییر زمان (Time-stretching) و تغییر گام (Pitch-shifting) کلیپهای صوتی از طریق کنترل W برای دنبال کردن تمپو یا نسبتهای کشش دستی ادغام کرده است. به دلیل GPL بودن Rubber Band، باینریهای ساخته شده با آن مشمول GPL هستند. مرورگر FX، اینسرتهای CLAP، VST3 یا EQ، تأخیر (Delay)، ریورب و کمپرسور داخلی را اضافه میکند.
یک پنل MODULATION، LFOها (سینوسی، مثلثی، دندانارهای، مربعی، تصادفی)، ماکروها (یک پیچک ۰ تا ۱) و دنبالکنندههای پوش (Envelope followers) را اضافه میکند. نرخ LFOها میتواند بر حسب هرتز باشد یا با مقادیر نت از ۱/۱۶ تا ۴ میزان همگام شود. اینها به عنوان آفست روی مقادیر پارامتر و اتوماسیون عمل کرده و به عنوان مدولاسیون پارامتر CLAP ارسال میشوند. چندین مدولاسیون روی یک پارامتر با هم جمع میشوند. سیستم از باونسینگ با کیفیت بالا به فایلهای WAVE ۱۶-بیتی، ۲۴-بیتی یا ۳۲-بیتی float پشتیبانی میکند که نمونه به نمونه با صدای شنیده شده یکسان هستند.
جم زنده و آرایش (Arrangement)
کاربران میتوانند از یک لانچر صحنه (Scene Launcher) برای جم زنده استفاده کنند. این نما دارای صحنهها در محور عمودی و ترکها در محور افقی است. الگوها میتوانند با تنظیمات کوانتایز (بدون، شانزدهمین، ضرب، یک، دو یا چهار میزان) اجرا شوند. یک سلول میتواند برنامهریزی شود تا تعداد دفعات خاصی تکرار شود و سپس از یک قانون (توقف، بعدی، قبلی، اول، آخر، تصادفی یا تکرار مجدد) پیروی کند. لانچها و چرخشهای حلقه دقیقاً روی نمونه مرزی خود در داخل کالبک رندر اتفاق میافتند.
با فعال کردن REC ARRANGEMENT هر ترکی که از یک سلول پخش شود، به عنوان کلیپ در آرایش اصلی چاپ میشود. این فرآیند قابل Undo است و دقیقاً آنچه در حین جم شنیده شده را حفظ میکند. افزودن یا حذف یک ترک در میان جم، موتور را بدون متوقف کردن جم بازسازی میکند و سلولهای لانچ شده را در فاز نگه میدارد.
جزئیات فنی و گردش کار
در بخش ویرایش و ورودی، ترکر از یک چیدمان سنتی (ZSXDCVGBHNJM برای یک اکتاو) با Ctrl+Left/Right برای جابجایی اکتاو ورودی استفاده میکند. Backspace یک ردیف را پاک میکند. پیانو رول اجازه میدهد با کشیدن (Drag) عبارتها رسم شوند و با کشیدن لبهها، طول نت تنظیم گردد. دکمههای فلش، پنجره گام را به صورت اکتاو جابهجا میکنند و به کلیدهای MIDI 0-127 دسترسی میدهند.
کیبوردهای MIDI از طریق یک صف بدون قفل (Lock-free queue) به کالبک رندر هدایت میشوند. ضبط، نتها را روی نزدیکترین گام ثبت کرده و آفست را به عنوان ریززمانبندی (Micro-timing) ذخیره میکند. کیبوردهای MPE را میتوان از طریق پنل MIDI IN فعال کرد که اجازه میدهد Bend هر نت، CC 74 و فشار (Pressure) به صورت مجزا مدیریت شوند. وارد کردن و خروجی گرفتن از فایل استاندارد MIDI (SMF) پشتیبانی میشود. Import فرمتهای ۰ و ۱ را میپذیرد و کانالها را به بخشهای ساز تقسیم میکند. Export نتهای آرایش شده، کنترلرها، نام ترکها، تمپو و متر را مینویسد. تبادل MIDI وضعیت پلاگین و بازتنظیمهای میکروتونال را حذف میکند.
در مدیریت فایل و منابع، پروژهها کل جلسه را ذخیره میکنند: الگوهای نامگذاری شده، آکوردها، قفلها، رچتها، ریززمانبندی، شرایط حلقه، استریپهای کانال و وضعیت کدر (Opaque state) تمام پلاگینها. کلیپهای صوتی که از ۱۲۸ مگابایت بیشتر هستند (قابل تنظیم از طریق BLOKKILY_STREAM_THRESHOLD_BYTES) با استفاده از رینگهای بدون قفل از دیسک استریم میشوند تا از اشباع RAM جلوگیری شود. رینگی که خالی شود، به جای ایجاد صدای کلیک، Fade out و سپس Fade in میشود. تابع COLLECT تمام کلیپهای ارجاع شده و نمونههای سمپلر را در پوشه صوتی پروژه کپی کرده و فایلهای مشترک را حذف تکرار میکند.
محدودیتها و چالشهای فعلی
با وجود این عمق فنی، توسعهدهنده به چندین ویژگی مفقود اشاره کرده است. اکسپرشن هر نت را میتوان ضبط و پخش کرد اما هنوز نمیتوان آن را در ویرایشگر رسم کرد. سازهای VST3 به گام هر نت در محدوده دو نیمپرده Bend کانال محدود هستند و SoundFontها فاقد CC 74 برای تمبر هستند مگر اینکه در SF2 مپ شده باشند.
علاوه بر این، سمپلر داخلی فاقد جادوگر وارد کردن چند-نمونهای (Multi-sample import)، ویرایشگر لایه ولوسیتی (Velocity-layer) و سطح ویرایش شکلموج (Waveform) است. استریم دیسک (آستانه پیشفرض ۱۲۸ مگابایت) در حال حاضر محدود به کلیپهای صوتی بدون Warp است، زیرا کلیپهای Warp شده باید برای پردازش در حافظه رمزگشایی شوند.
سایر کمبودها عبارتند از:
- عدم خواندن ساعت MIDI (MIDI clock).
- سمپلر داخلی فشار پلیفونیک (Poly pressure) را نادیده میگیرد.
- نبود قابلیت Comping (انتخاب پاسهای جایگزین از یک لاین ضبط شده).
- مدولاسیون یک بار در هر بلوک ارزیابی میشود، به این معنی که LFOهای همگام، یک بلوک بعد از ضرب خود فعال میشوند.
- لانچر صحنه فاقد تمپوی مجزا برای هر صحنه است.
- خروجی (Export) همیشه آرایش است و ترکهای لانچ شده شامل نمیشوند.
این ابزار در واقع گامی به سوی «تولید موسیقی عاملمحور» است؛ جایی که DAW دیگر فقط ابزاری برای انسان نیست، بلکه محیطی برنامهریزیپذیر برای همکاری بلادرنگ عاملهای هوش مصنوعی است.




گفتگو