برنامه نویسی

نحوه ایجاد یک ساعت دیجیتال Launchpad Mini با استفاده از Node.js

Launchpad Mini یک کنترلر MIDI با دکمه های 8×8 است که می تواند برای راه اندازی کلیپ ها، پخش یادداشت ها و کنترل برنامه های نرم افزاری مختلف استفاده شود. یکی از پروژه های سرگرم کننده ای که می توانید با Launchpad Mini انجام دهید، تبدیل آن به یک ساعت دیجیتال است. این پروژه از NodeJS و بسته midi-stream npm برای ارتباط با دستگاه استفاده می کند.

در این پست وبلاگ، مراحلی که طی کردم و مشکلاتی که با آن مواجه شدم را شرح خواهم داد.

توضیحات تصویر

ساعت را خودتان تست کنید

قبل از شروع، مطمئن شوید که موارد زیر را دارید:

  • یک دستگاه Launchpad Mini
  • NodeJS روی کامپیوتر شما نصب شده است

مرحله 1: راه اندازی پروژه

مرحله 2: برنامه را اجرا کنید

  • پروژه را با npx ts-node src/application/console.ts

یک پورت را انتخاب کنید (در حال اجرا در Raspberry Pi)

ساخت ساعت

برای شروع، من با تنظیم یک سری آزمایش برای اطمینان از اینکه می توانم با موفقیت دکمه های جداگانه را روشن کنم، شروع کردم. از آنجا، یک برنامه کاربردی جاوا اسکریپت را توسعه دادم تا مفاهیمی مانند نگاشت رنگ و نگاشت داده ها را از لانچ پد به یک شبکه کشف کنم.

var MidiStream = require("midi-stream");
//https://www.youtube.com/watch?v=JatNuVsbsEQ

var duplex = MidiStream("Launchpad Mini");

duplex.write([176, 0, 0]); //clear all
//duplex.pipe(duplex);
duplex.on("data", function (data) {
  console.log(data);
  //console.log(mapToGrid(data[1]));

  //buttons across top 104 - 111
  //botton down right 8,24,40,56,72,88,104,120

  play(mapToGrid(data[1]).row, mapToGrid(data[1]).col, randomVelocity());
});

const play = (row, col, velocity, delay) => {
  var note = mapToMidi(row, col);

  setTimeout(() => {
    duplex.write([144, note, velocity]);
  }, delay || 0);
};

const mapToGrid = (data) => {
  const row = Math.floor(data / 16);
  const col = data % 8;
  return { row, col };
};
const mapToMidi = (row, col) => {
  return row * 16 + col;
};
const randomVelocity = () => {
  return Math.floor(Math.random() * 100);
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگام پیکربندی یک دکمه در رابط MIDI، آرایه ای از مقادیر ارسال می شود تا رفتار مورد نظر را مشخص کند. برای مثال، stream.write([176,0,0]) ممکن است برای خاموش کردن یک دکمه استفاده شود، در حالی که stream.write([144,0,3]) آن را روشن می کرد اولین مقدار موجود در آرایه وضعیت مورد نظر را نشان می دهد که 176 نشان دهنده “خاموش کردن” و 144 نشان دهنده “روشن کردن” است. مقدار دوم مربوط به دکمه خاصی است که در حال پیکربندی است، و در حالی که برای درک کامل نگاشت بین اعداد و دکمه ها کمی آزمایش لازم بود، در نهایت به آن دست یافتم. در نهایت، مقدار سوم رنگ دکمه را مشخص می‌کند، و مجدداً برای درک رابطه بین مقادیر و رنگ‌ها، مقداری آزمایش لازم بود.

طرح شبکه

پایه کد به طور آزاد با معماری شش ضلعی طراحی شده است که دارای سه جزء اصلی است:

برنامه – این جزء مسئول راه اندازی برنامه ساعت است.
دامنه – در اینجا، اشیاء دامنه بخش عمده ای از عملکرد برنامه را مدیریت می کنند.
زیرساخت – در نهایت، مؤلفه زیرساخت، نهادهای خارجی، مانند کد سطح پایین Launchpad Mini را کنترل می کند.
از بین تمام تست های واحد، تست های GridManager حیاتی ترین بودند. این آزمایش‌ها تأیید کردند که شبکه به درستی با تماس MIDI نگاشت می‌شود و از عملکرد صحیح ساعت اطمینان می‌دهد.

به طور خلاصه، این پروژه یک تلاش لذت بخش بود که به من اجازه داد تا جان تازه ای به یک دستگاه قدیمی بدم. من حتی تا آنجا پیش رفتم که برنامه را روی Raspberry Pi نصب کردم، جایی که 24/7 اجرا می شود و به عنوان یک دکوراسیون شیک و کاربردی برای میز کار من عمل می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا