{"id":2315,"date":"2026-01-05T08:17:01","date_gmt":"2026-01-04T23:17:01","guid":{"rendered":"https:\/\/rfsec.ddns.net\/db\/?p=2315"},"modified":"2026-03-04T10:36:57","modified_gmt":"2026-03-04T01:36:57","slug":"llm%e4%bb%bb%e3%81%9b%e3%81%a7%e3%83%9e%e3%82%a4%e3%82%b3%e3%83%b3%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%82%b7%e3%83%b3%e3%82%bb%e3%82%b5%e3%82%a4%e3%82%b6%e3%83%bc%e3%82%92%e4%bd%9c%e3%82%8b","status":"publish","type":"post","link":"https:\/\/rfsec.ddns.net\/db\/?p=2315","title":{"rendered":"LLM\u4efb\u305b\u3067\u30de\u30a4\u30b3\u30f3\u3092\u4f7f\u3063\u305f\u30b7\u30f3\u30bb\u30b5\u30a4\u30b6\u30fc\u3092\u4f5c\u308b"},"content":{"rendered":"\n<p>\u4ee5\u4e0b\u306f\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u304c\u901a\u308b\u307e\u3067\u306e\u904e\u7a0b\u3067\u3001\u5b9f\u884c\u3057\u3066\u671f\u5f85\u901a\u308a\u306e\u52d5\u4f5c\u306b\u306a\u308b\u304b\u306f\u3001\u5225\u306e\u554f\u984c\u3067\u3059\u3002<br><strong>LLM\u306b\u5bfe\u3059\u308b\u6700\u521d\u306e\u554f\u3044\u304b\u3051<\/strong>\uff1a\u30de\u30a4\u30b3\u30f3\u3001\u5c0f\u578bLCD\u3001USB \u63a5\u7d9a\u306eMIDI\u30ad\u30fc\u30dc\u30fc\u3092\u4f7f\u3063\u3066\u30a2\u30ca\u30ed\u30b0\u30b7\u30f3\u30bb\u30b5\u30a4\u30b6\u30fc\u3092\u4f5c\u308b\u306b\u306f\uff1f<\/p>\n\n\n<div class=\"wp-block-ub-content-toggle wp-block-ub-content-toggle-block\" id=\"ub-content-toggle-block-8ec9f34a-a1cc-4cff-b32a-9f43f3d05dc7\" data-mobilecollapse=\"false\" data-desktopcollapse=\"true\" data-preventcollapse=\"false\" data-showonlyone=\"false\">\n<div class=\"wp-block-ub-content-toggle-accordion\" style=\"border-color: #f1f1f1;\" id=\"ub-content-toggle-panel-block-\">\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-title-wrap\" style=\"background-color: #f1f1f1;\" aria-controls=\"ub-content-toggle-panel-0-8ec9f34a-a1cc-4cff-b32a-9f43f3d05dc7\" tabindex=\"0\">\n\t\t\t<p class=\"wp-block-ub-content-toggle-accordion-title ub-content-toggle-title-8ec9f34a-a1cc-4cff-b32a-9f43f3d05dc7\" style=\"color: #000000; \">LLM\u306e\u56de\u7b54\uff03\uff11<\/p>\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-toggle-wrap right\" style=\"color: #000000;\"><span class=\"wp-block-ub-content-toggle-accordion-state-indicator wp-block-ub-chevron-down\"><\/span><\/div>\n\t\t<\/div>\n\t\t\t<div role=\"region\" aria-expanded=\"false\" class=\"wp-block-ub-content-toggle-accordion-content-wrap ub-hide\" id=\"ub-content-toggle-panel-0-8ec9f34a-a1cc-4cff-b32a-9f43f3d05dc7\">\n\n<p>\u30de\u30a4\u30b3\u30f3\u3092\u4f7f\u7528\u3057\u3066\u300c\u30a2\u30ca\u30ed\u30b0\u30b7\u30f3\u30bb\u30b5\u30a4\u30b6\u30fc\u300d\u3092\u4f5c\u308b\u5834\u5408\u3001\u6280\u8853\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u4e3b\u306b**\u30d0\u30fc\u30c1\u30e3\u30eb\u30a2\u30ca\u30ed\u30b0\uff08VA\uff09**\u65b9\u5f0f\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30a2\u30ca\u30ed\u30b0\u56de\u8def\u306e\u632f\u308b\u821e\u3044\uff08\u30aa\u30b7\u30ec\u30fc\u30bf\u30fc\u3001\u30d5\u30a3\u30eb\u30bf\u30fc\u3001\u30a8\u30f3\u30d9\u30ed\u30fc\u30d7\uff09\u3092\u30de\u30a4\u30b3\u30f3\u5185\u306e\u8a08\u7b97\u3067\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u3001DAC\uff08Digital to Analog Converter\uff09\u304b\u3089\u97f3\u58f0\u3092\u51fa\u529b\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u8981\u4ef6\u306b\u3042\u308b\u300cUSB MIDI\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30db\u30b9\u30c8\u6a5f\u80fd\uff08\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u308b\u5074\uff09\u300d\u3068\u300c\u30aa\u30fc\u30c7\u30a3\u30aa\u751f\u6210\u300d\u3092\u540c\u6642\u306b\u884c\u3046\u306b\u306f\u3001USB\u30db\u30b9\u30c8\u6a5f\u80fd\u3068\u9ad8\u901f\u306a\u6f14\u7b97\u80fd\u529b\u3092\u6301\u3064\u30de\u30a4\u30b3\u30f3\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306b\u3001\u73fe\u5728\u6700\u3082\u5165\u624b\u6027\u304c\u826f\u304f\u3001\u958b\u767a\u60c5\u5831\u304c\u8c4a\u5bcc\u306a<strong>Raspberry Pi Pico (RP2040)<\/strong> \u3092\u4f7f\u7528\u3057\u305f\u69cb\u6210\u6848\u3068\u3001\u52d5\u4f5c\u306e\u6838\u3068\u306a\u308b\u30b3\u30fc\u30c9\u3092\u63d0\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u30b7\u30b9\u30c6\u30e0\u69cb\u6210\u6848<\/h3>\n\n\n\n<p>Arduino\u74b0\u5883\uff08C++\uff09\u3067\u306e\u958b\u767a\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u91cd\u8981:<\/strong> MIDI\u30ad\u30fc\u30dc\u30fc\u30c9\u3078\u96fb\u6e90\u3092\u4f9b\u7d66\u3059\u308b\u305f\u3081\u3001Pico\u306eVBUS\u30d4\u30f3\u306b5V\u304c\u4f9b\u7d66\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30de\u30a4\u30b3\u30f3:<\/strong> Raspberry Pi Pico (RP2040)<\/p>\n\n\n\n<p>\u7406\u7531: \u30c7\u30e5\u30a2\u30eb\u30b3\u30a2\u306b\u3088\u308a\u3001Core0\u3067USB\/UI\u51e6\u7406\u3001Core1\u3067\u30aa\u30fc\u30c7\u30a3\u30aa\u751f\u6210\u3068\u5f79\u5272\u5206\u62c5\u304c\u3067\u304d\u3001\u97f3\u5207\u308c\u3092\u9632\u3052\u307e\u3059\u3002\u307e\u305f\u3001<code>Adafruit TinyUSB<\/code>\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u3088\u308aUSB MIDI\u30db\u30b9\u30c8\u306e\u5b9f\u88c5\u304c\u5bb9\u6613\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>DAC:<\/strong> PCM5102A (I2S\u63a5\u7d9a)<\/p>\n\n\n\n<p>\u7406\u7531: \u30de\u30a4\u30b3\u30f3\u306ePWM\u51fa\u529b\u3088\u308a\u3082\u5727\u5012\u7684\u306b\u9ad8\u97f3\u8cea\u3067\u3001\u5b89\u4fa1\u306b\u5165\u624b\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4:<\/strong> ST7789 \u307e\u305f\u306f ILI9341 (SPI\u63a5\u7d9a)<\/p>\n\n\n\n<p><strong>USB\u63a5\u7d9a:<\/strong> USB OTG\u30b1\u30fc\u30d6\u30eb\uff08Micro-B \u30aa\u30b9 &#8211; USB-A \u30e1\u30b9\uff09<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u914d\u7dda\u30a4\u30e1\u30fc\u30b8<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/strong><\/td><td><strong>\u30d4\u30f3(RP2040)<\/strong><\/td><td><strong>\u5f79\u5272<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>PCM5102A<\/strong><\/td><td>GPIO 26<\/td><td>I2S Bit Clock (BCK)<\/td><\/tr><tr><td><\/td><td>GPIO 27<\/td><td>I2S Word Select (LRCK)<\/td><\/tr><tr><td><\/td><td>GPIO 28<\/td><td>I2S Data (DIN)<\/td><\/tr><tr><td><strong>ST7789 LCD<\/strong><\/td><td>GPIO 16-19<\/td><td>SPI (MISO\/CS\/CLK\/MOSI) \u7b49<\/td><\/tr><tr><td><strong>MIDI Key<\/strong><\/td><td>USB\u30dd\u30fc\u30c8<\/td><td>OTG\u30b1\u30fc\u30d6\u30eb\u7d4c\u7531\u3067\u63a5\u7d9a<\/td><\/tr><\/tbody><\/table><\/figure>\n\n<\/div>\n\t\t<\/div>\n<\/div>\n\n<div class=\"wp-block-ub-content-toggle wp-block-ub-content-toggle-block\" id=\"ub-content-toggle-block-9c13f63c-dbdb-43a5-a95d-1e71117c2714\" data-mobilecollapse=\"false\" data-desktopcollapse=\"true\" data-preventcollapse=\"false\" data-showonlyone=\"false\">\n<div class=\"wp-block-ub-content-toggle-accordion\" style=\"border-color: #f1f1f1;\" id=\"ub-content-toggle-panel-block-\">\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-title-wrap\" style=\"background-color: #f1f1f1;\" aria-controls=\"ub-content-toggle-panel-0-9c13f63c-dbdb-43a5-a95d-1e71117c2714\" tabindex=\"0\">\n\t\t\t<p class=\"wp-block-ub-content-toggle-accordion-title ub-content-toggle-title-9c13f63c-dbdb-43a5-a95d-1e71117c2714\" style=\"color: #000000; \">LLM\u306e\u56de\u7b54\u30b3\u30fc\u30c9\uff03\uff11<\/p>\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-toggle-wrap right\" style=\"color: #000000;\"><span class=\"wp-block-ub-content-toggle-accordion-state-indicator wp-block-ub-chevron-down\"><\/span><\/div>\n\t\t<\/div>\n\t\t\t<div role=\"region\" aria-expanded=\"false\" class=\"wp-block-ub-content-toggle-accordion-content-wrap ub-hide\" id=\"ub-content-toggle-panel-0-9c13f63c-dbdb-43a5-a95d-1e71117c2714\">\n\n<p><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code>\/\/ code_name: pico_usb_synth_basic.ino\n\/\/ version: 1.0.1\n\/\/ description: USB MIDI Host to I2S Audio Synthesizer (Sawtooth) for RP2040\n\n#include &lt;Arduino.h&gt;\n#include &lt;Adafruit_TinyUSB.h&gt;\n#include &lt;Adafruit_GFX.h&gt;    \/\/ Core graphics library\n#include &lt;Adafruit_ST7789.h&gt; \/\/ Hardware-specific library for ST7789\n#include &lt;SPI.h&gt;\n#include &lt;I2S.h&gt;\n\n\/\/ --- \u8a2d\u5b9a: \u30c7\u30a3\u30b9\u30d7\u30ec\u30a4 (ST7789) ---\n#define TFT_CS        17\n#define TFT_RST       20 \/\/ \u307e\u305f\u306f\u30ea\u30bb\u30c3\u30c8\u30d4\u30f3\u304c\u306a\u3044\u5834\u5408\u306f -1\n#define TFT_DC        16\n#define TFT_MOSI      19\n#define TFT_SCLK      18\n\n\/\/ \u753b\u9762\u89e3\u50cf\u5ea6 (240x240\u306a\u3069\u3001\u624b\u6301\u3061\u306e\u30c7\u30d0\u30a4\u30b9\u306b\u5408\u308f\u305b\u3066\u8abf\u6574)\nAdafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);\n\n\/\/ --- \u8a2d\u5b9a: \u30aa\u30fc\u30c7\u30a3\u30aa (I2S PCM5102A) ---\nconst int I2S_BCLK = 26;\nconst int I2S_LRCK = 27;\nconst int I2S_DOUT = 28;\nconst int SAMPLE_RATE = 44100;\n\n\/\/ --- \u30b7\u30f3\u30bb\u30b5\u30a4\u30b6\u30fc\u5909\u6570 ---\nvolatile float currentFreq = 0.0;\nvolatile bool isNoteOn = false;\nfloat phase = 0.0;\nfloat phaseIncrement = 0.0;\n\n\/\/ --- USB MIDI Host \u30aa\u30d6\u30b8\u30a7\u30af\u30c8 ---\nAdafruit_USBH_Midi  MidiHost;\n\n\/\/ --- \u95a2\u6570\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7 ---\nvoid noteOn(uint8_t channel, uint8_t pitch, uint8_t velocity);\nvoid noteOff(uint8_t channel, uint8_t pitch, uint8_t velocity);\n\n\/\/ --- \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 (Core 0: UI &amp; USB\u51e6\u7406) ---\nvoid setup() {\n  Serial.begin(115200);\n\n  \/\/ 1. LCD\u521d\u671f\u5316\n  tft.init(240, 240); \/\/ \u89e3\u50cf\u5ea6\u306f\u30c7\u30d0\u30a4\u30b9\u306b\u5408\u308f\u305b\u308b\n  tft.setRotation(2);\n  tft.fillScreen(ST77XX_BLACK);\n  tft.setTextColor(ST77XX_WHITE);\n  tft.setTextSize(2);\n  tft.setCursor(10, 10);\n  tft.println(\"USB Synth Ready\");\n\n  \/\/ 2. I2S\u521d\u671f\u5316 (\u51fa\u529b\u30e2\u30fc\u30c9)\n  I2S.setBCLK(I2S_BCLK);\n  I2S.setDATA(I2S_DOUT);\n  I2S.setBitsPerSample(16);\n  \n  \/\/ \u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u3092\u5c0f\u3055\u304f\u8a2d\u5b9a\u3057\u306a\u3044\u3068\u30ec\u30a4\u30c6\u30f3\u30b7\u304c\u767a\u751f\u3057\u307e\u3059\u304c\u3001\n  \/\/ \u521d\u671f\u30c6\u30b9\u30c8\u3067\u306f\u5b89\u5b9a\u6027\u91cd\u8996\u3067\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\n  if (!I2S.begin(SAMPLE_RATE)) {\n    tft.println(\"I2S Init Failed!\");\n    while (1);\n  }\n\n  \/\/ 3. USB MIDI Host\u521d\u671f\u5316\n  \/\/ \"Tools-&gt;USB Stack-&gt;Adafruit TinyUSB\" \u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u3053\u3068\n  USBHost.begin(0); \/\/ USB Controller 0 (RP2040 default)\n  \n  \/\/ MIDI\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u8a2d\u5b9a\n  MidiHost.setNoteOnCallback(noteOn);\n  MidiHost.setNoteOffCallback(noteOff);\n  MidiHost.begin();\n}\n\n\/\/ --- \u30e1\u30a4\u30f3\u30eb\u30fc\u30d7 (Core 0) ---\nvoid loop() {\n  \/\/ USB\u30bf\u30b9\u30af\u306e\u5b9f\u884c\uff08\u5fc5\u9808\uff09\n  USBHost.task();\n  MidiHost.read();\n}\n\n\/\/ --- MIDI \u30ce\u30fc\u30c8ON \u30b3\u30fc\u30eb\u30d0\u30c3\u30af ---\nvoid noteOn(uint8_t channel, uint8_t pitch, uint8_t velocity) {\n  if (velocity == 0) {\n    noteOff(channel, pitch, velocity);\n    return;\n  }\n  \n  \/\/ MIDI\u30ce\u30fc\u30c8\u756a\u53f7\u304b\u3089\u5468\u6ce2\u6570\u3078\u5909\u63db\n  \/\/ f = 440 * 2^((d - 69) \/ 12)\n  currentFreq = 440.0 * pow(2.0, (pitch - 69.0) \/ 12.0);\n  \n  \/\/ \u4f4d\u76f8\u5897\u5206\u3092\u8a08\u7b97 (2PI * freq \/ sample_rate)\n  \/\/ \u3053\u3053\u3067\u306f\u7c21\u6613\u7684\u306b 0.0 - 1.0 \u306e\u7bc4\u56f2\u3067\u4f4d\u76f8\u3092\u7ba1\u7406\u3057\u307e\u3059\n  phaseIncrement = currentFreq \/ (float)SAMPLE_RATE;\n  isNoteOn = true;\n\n  \/\/ \u753b\u9762\u66f4\u65b0 (\u30c7\u30d0\u30c3\u30b0\u7528)\n  tft.fillScreen(ST77XX_BLACK);\n  tft.setCursor(10, 50);\n  tft.print(\"Note: \");\n  tft.println(pitch);\n  tft.print(\"Freq: \");\n  tft.println(currentFreq);\n}\n\n\/\/ --- MIDI \u30ce\u30fc\u30c8OFF \u30b3\u30fc\u30eb\u30d0\u30c3\u30af ---\nvoid noteOff(uint8_t channel, uint8_t pitch, uint8_t velocity) {\n  \/\/ \u7c21\u6613\u5b9f\u88c5: \u6700\u5f8c\u306b\u62bc\u3055\u308c\u305f\u30ad\u30fc\u306e\u307f\u7ba1\u7406\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u5358\u7d14\u306bOFF\u306b\u3059\u308b\n  \/\/ \u672c\u683c\u7684\u306b\u306f\u30dc\u30a4\u30b9\u30a2\u30b5\u30a4\u30f3\u7ba1\u7406\u304c\u5fc5\u8981\u3067\u3059\n  isNoteOn = false;\n  \n  tft.fillScreen(ST77XX_BLACK);\n  tft.setCursor(10, 50);\n  tft.println(\"Release\");\n}\n\n\/\/ --- \u30aa\u30fc\u30c7\u30a3\u30aa\u51e6\u7406 (Core 1) ---\n\/\/ RP2040\u306e\u30c7\u30e5\u30a2\u30eb\u30b3\u30a2\u3092\u5229\u7528\u3057\u3001Core1\u3092\u30aa\u30fc\u30c7\u30a3\u30aa\u751f\u6210\u5c02\u7528\u306b\u56de\u3057\u307e\u3059\nvoid setup1() {\n  \/\/ Core1\u7528\u306e\u521d\u671f\u5316\u304c\u5fc5\u8981\u306a\u3089\u3053\u3053\u306b\u8a18\u8ff0\n  delay(100); \n}\n\nvoid loop1() {\n  \/\/ \u30aa\u30fc\u30c7\u30a3\u30aa\u30b5\u30f3\u30d7\u30eb\u751f\u6210\u30eb\u30fc\u30d7\n  \/\/ I2S\u30d0\u30c3\u30d5\u30a1\u304c\u3044\u3063\u3071\u3044\u306b\u306a\u308b\u307e\u3067\u66f8\u304d\u8fbc\u307f\u7d9a\u3051\u308b\u3068\u30d6\u30ed\u30c3\u30af\u3055\u308c\u307e\u3059\n  \n  \/\/ \u30ce\u30b3\u30ae\u30ea\u6ce2\u306e\u751f\u6210 (-32768 to 32767)\n  int16_t sample = 0;\n\n  if (isNoteOn) {\n    \/\/ \u4f4d\u76f8\u3092\u9032\u3081\u308b\n    phase += phaseIncrement;\n    if (phase &gt;= 1.0) phase -= 1.0;\n\n    \/\/ 0.0 - 1.0 \u3092 -32768 - 32767 \u306b\u5909\u63db (\u30ce\u30b3\u30ae\u30ea\u6ce2)\n    \/\/ \u5b9f\u969b\u306f\u30a8\u30a4\u30ea\u30a2\u30b7\u30f3\u30b0\u5bfe\u7b56\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001\u307e\u305a\u306f\u7c21\u6613\u5b9f\u88c5\n    sample = (int16_t)((phase * 65535.0) - 32768.0);\n  } else {\n    sample = 0;\n    phase = 0; \/\/ \u30ea\u30bb\u30c3\u30c8\u3059\u308b\u304b\u306f\u6319\u52d5\u306b\u3088\u308b\n  }\n\n  \/\/ \u30b9\u30c6\u30ec\u30aa\u51fa\u529b (\u5de6\u30fb\u53f3\u306b\u540c\u3058\u30c7\u30fc\u30bf\u3092\u9001\u308b)\n  \/\/ write\u306f\u30d6\u30ed\u30c3\u30ad\u30f3\u30b0\u95a2\u6570\u306a\u306e\u3067\u3001DAC\u306e\u901f\u5ea6\u306b\u5408\u308f\u305b\u3066\u5f85\u6a5f\u3057\u307e\u3059\n  I2S.write(sample); \/\/ Left\n  I2S.write(sample); \/\/ Right\n}<\/code><\/pre><\/div>\n\n<\/div>\n\t\t<\/div>\n<\/div>\n\n<div class=\"wp-block-ub-content-toggle wp-block-ub-content-toggle-block\" id=\"ub-content-toggle-block-d9df24b4-67e3-4ecc-9ea0-8a44bcffd3f0\" data-mobilecollapse=\"false\" data-desktopcollapse=\"true\" data-preventcollapse=\"false\" data-showonlyone=\"false\">\n<div class=\"wp-block-ub-content-toggle-accordion\" style=\"border-color: #f1f1f1;\" id=\"ub-content-toggle-panel-block-\">\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-title-wrap\" style=\"background-color: #f1f1f1;\" aria-controls=\"ub-content-toggle-panel-0-d9df24b4-67e3-4ecc-9ea0-8a44bcffd3f0\" tabindex=\"0\">\n\t\t\t<p class=\"wp-block-ub-content-toggle-accordion-title ub-content-toggle-title-d9df24b4-67e3-4ecc-9ea0-8a44bcffd3f0\" style=\"color: #000000; \">\u5b9f\u884c\u7d50\u679c\uff03\uff11<\/p>\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-toggle-wrap right\" style=\"color: #000000;\"><span class=\"wp-block-ub-content-toggle-accordion-state-indicator wp-block-ub-chevron-down\"><\/span><\/div>\n\t\t<\/div>\n\t\t\t<div role=\"region\" aria-expanded=\"false\" class=\"wp-block-ub-content-toggle-accordion-content-wrap ub-hide\" id=\"ub-content-toggle-panel-0-d9df24b4-67e3-4ecc-9ea0-8a44bcffd3f0\">\n\n<p>C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:35:1: error: &#8216;Adafruit_USBH_Midi&#8217; does not name a type; did you mean &#8216;Adafruit_USBH_CDC&#8217;?<br>35 | Adafruit_USBH_Midi MidiHost;<br>| ^<del>~<\/del><del>~<\/del><del>~<\/del><del> | Adafruit_USBH_CDC C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino: In function &#8216;void setup()&#8217;: C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:55:6: error: expected unqualified-id before &#8216;.&#8217; token 55 | I2S.setBCLK(I2S_BCLK); | ^ C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:56:6: error: expected unqualified-id before &#8216;.&#8217; token 56 | I2S.setDATA(I2S_DOUT); | ^ C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:57:6: error: expected unqualified-id before &#8216;.&#8217; token 57 | I2S.setBitsPerSample(16); | ^ C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:61:11: error: expected primary-expression before &#8216;.&#8217; token 61 | if (!I2S.begin(SAMPLE_RATE)) { | ^ C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:68:3: error: &#8216;USBHost&#8217; was not declared in this scope 68 | USBHost.begin(0); \/\/ USB Controller 0 (RP2040 default) | ^<\/del><del>~~ C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:71:3: error: &#8216;MidiHost&#8217; was not declared in this scope 71 | MidiHost.setNoteOnCallback(noteOn); | ^<\/del><del>~<\/del><br>C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino: In function &#8216;void loop()&#8217;:<br>C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:79:3: error: &#8216;USBHost&#8217; was not declared in this scope<br>79 | USBHost.task();<br>| ^<del>~<\/del>~<br>C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:80:3: error: &#8216;MidiHost&#8217; was not declared in this scope<br>80 | MidiHost.read();<br>| ^<del>~<\/del>~~<br>C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino: In function &#8216;void loop1()&#8217;:<br>C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:148:6: error: expected unqualified-id before &#8216;.&#8217; token<br>148 | I2S.write(sample); \/\/ Left<br>| ^<br>C:\\Users\\mars\\AppData\\Local\\Temp.arduinoIDE-unsaved202605-25548-rsalr.vk5v6\\sketch_jan5a\\sketch_jan5a.ino:149:6: error: expected unqualified-id before &#8216;.&#8217; token<br>149 | I2S.write(sample); \/\/ Right<br>| ^<br>exit status 1<\/p>\n\n\n\n<p>Compilation error: &#8216;Adafruit_USBH_Midi&#8217; does not name a type; did you mean &#8216;Adafruit_USBH_CDC&#8217;?<\/p>\n\n<\/div>\n\t\t<\/div>\n<\/div>\n\n<div class=\"wp-block-ub-content-toggle wp-block-ub-content-toggle-block\" id=\"ub-content-toggle-block-e9924a28-9697-462f-9cd3-ee0e46827488\" data-mobilecollapse=\"false\" data-desktopcollapse=\"true\" data-preventcollapse=\"false\" data-showonlyone=\"false\">\n<div class=\"wp-block-ub-content-toggle-accordion\" style=\"border-color: #f1f1f1;\" id=\"ub-content-toggle-panel-block-\">\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-title-wrap\" style=\"background-color: #f1f1f1;\" aria-controls=\"ub-content-toggle-panel-0-e9924a28-9697-462f-9cd3-ee0e46827488\" tabindex=\"0\">\n\t\t\t<p class=\"wp-block-ub-content-toggle-accordion-title ub-content-toggle-title-e9924a28-9697-462f-9cd3-ee0e46827488\" style=\"color: #000000; \">\u5b9f\u884c\u7d50\u679c\u3092LLM\u3078\u5831\u544a\u3057\u3066\u5f97\u305f\u56de\u7b54<\/p>\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-toggle-wrap right\" style=\"color: #000000;\"><span class=\"wp-block-ub-content-toggle-accordion-state-indicator wp-block-ub-chevron-down\"><\/span><\/div>\n\t\t<\/div>\n\t\t\t<div role=\"region\" aria-expanded=\"false\" class=\"wp-block-ub-content-toggle-accordion-content-wrap ub-hide\" id=\"ub-content-toggle-panel-0-e9924a28-9697-462f-9cd3-ee0e46827488\">\n\n<p>\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u5171\u6709\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\u539f\u56e0\u306f\u4e3b\u306b2\u70b9\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>I2S\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f7f\u3044\u65b9\u306e\u9f5f\u9f6c:<\/strong> RP2040\uff08Earle Philhower\u7248\u30b3\u30a2\uff09\u306eI2S\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3001<code>I2S<\/code>\u3068\u3044\u3046\u300c\u30af\u30e9\u30b9\u300d\u3092\u63d0\u4f9b\u3059\u308b\u3060\u3051\u306a\u306e\u3067\u3001<strong>\u5b9f\u4f53\uff08\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\uff09\u3092\u4f5c\u6210\u3057\u3066\u304b\u3089<\/strong>\u4f7f\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\uff08\u79c1\u306e\u524d\u56de\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u30af\u30e9\u30b9\u3092\u76f4\u63a5\u64cd\u4f5c\u3057\u3088\u3046\u3068\u3057\u3066\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff09\u3002<\/li>\n\n\n\n<li><strong>USB\u30db\u30b9\u30c8\u5b9a\u7fa9\u306e\u4e0d\u8db3:<\/strong> <code>USBHost<\/code> \u3084 <code>Adafruit_USBH_Midi<\/code> \u304c\u8a8d\u8b58\u3055\u308c\u3066\u3044\u306a\u3044\u306e\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u6f0f\u308c\u3001\u307e\u305f\u306fIDE\u306e\u300cUSB Stack\u300d\u8a2d\u5b9a\u304c\u9069\u7528\u3055\u308c\u3066\u3044\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u3092\u4fee\u6b63\u3057\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u304c\u901a\u308b\u3088\u3046\u306b\u4fee\u6b63\u3057\u305f\u30b3\u30fc\u30c9\uff08v1.0.2\uff09\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4fee\u6b63\u524d\u306e\u91cd\u8981\u78ba\u8a8d\u4e8b\u9805<\/h3>\n\n\n\n<p>\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u8fbc\u3080\u524d\u306b\u3001Arduino IDE\u306e\u30e1\u30cb\u30e5\u30fc\u3067\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u304c<strong>\u78ba\u5b9f\u306b<\/strong>\u884c\u308f\u308c\u3066\u3044\u308b\u304b\u518d\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u3068\u3001\u30b3\u30fc\u30c9\u304c\u6b63\u3057\u304f\u3066\u3082\u540c\u3058\u30a8\u30e9\u30fc\uff08<code>Adafruit_USBH_Midi does not name a type<\/code>\uff09\u304c\u51fa\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30e9\u30a4\u30d6\u30e9\u30ea\u30de\u30cd\u30fc\u30b8\u30e3\u3067 <strong>&#8220;Adafruit TinyUSB Library&#8221;<\/strong> \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3002<\/p>\n\n\n\n<p><strong>Tools (\u30c4\u30fc\u30eb)<\/strong> &gt; <strong>USB Stack<\/strong> \u30e1\u30cb\u30e5\u30fc\u3067\u3001<strong>&#8220;Adafruit TinyUSB&#8221;<\/strong> \u3092\u9078\u629e\u3057\u3066\u3044\u308b\u3053\u3068\u3002\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\u306e &#8220;Pico SDK USB&#8221; \u3067\u306f\u52d5\u304d\u307e\u305b\u3093\uff09<\/p>\n\n<\/div>\n\t\t<\/div>\n<\/div>\n\n<div class=\"wp-block-ub-content-toggle wp-block-ub-content-toggle-block\" id=\"ub-content-toggle-block-baa2c6fb-a364-4b0b-8be5-782f38665da0\" data-mobilecollapse=\"false\" data-desktopcollapse=\"true\" data-preventcollapse=\"false\" data-showonlyone=\"false\">\n<div class=\"wp-block-ub-content-toggle-accordion\" style=\"border-color: #f1f1f1;\" id=\"ub-content-toggle-panel-block-\">\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-title-wrap\" style=\"background-color: #f1f1f1;\" aria-controls=\"ub-content-toggle-panel-0-baa2c6fb-a364-4b0b-8be5-782f38665da0\" tabindex=\"0\">\n\t\t\t<p class=\"wp-block-ub-content-toggle-accordion-title ub-content-toggle-title-baa2c6fb-a364-4b0b-8be5-782f38665da0\" style=\"color: #000000; \">\u4fee\u6b63\u7248\u56de\u7b54\u306e\u30b3\u30fc\u30c9<\/p>\n\t\t\t<div class=\"wp-block-ub-content-toggle-accordion-toggle-wrap right\" style=\"color: #000000;\"><span class=\"wp-block-ub-content-toggle-accordion-state-indicator wp-block-ub-chevron-down\"><\/span><\/div>\n\t\t<\/div>\n\t\t\t<div role=\"region\" aria-expanded=\"false\" class=\"wp-block-ub-content-toggle-accordion-content-wrap ub-hide\" id=\"ub-content-toggle-panel-0-baa2c6fb-a364-4b0b-8be5-782f38665da0\">\n\n<p><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-cpp\" data-lang=\"C++\"><code>\/\/ code_name: pico_usb_synth_fixed.ino\n\/\/ version: 1.0.2\n\/\/ description: Fixed I2S instantiation and USB Host objects for RP2040\n\n#include &lt;Arduino.h&gt;\n#include &lt;Adafruit_TinyUSB.h&gt;\n#include &lt;Adafruit_GFX.h&gt;\n#include &lt;Adafruit_ST7789.h&gt;\n#include &lt;SPI.h&gt;\n#include &lt;I2S.h&gt;\n\n\/\/ --- \u8a2d\u5b9a: \u30c7\u30a3\u30b9\u30d7\u30ec\u30a4 (ST7789) ---\n#define TFT_CS        17\n#define TFT_RST       20\n#define TFT_DC        16\n#define TFT_MOSI      19\n#define TFT_SCLK      18\n\n\/\/ \u753b\u9762\u89e3\u50cf\u5ea6\nAdafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);\n\n\/\/ --- \u8a2d\u5b9a: \u30aa\u30fc\u30c7\u30a3\u30aa (I2S PCM5102A) ---\n\/\/ I2S\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210 (OUTPUT\u30e2\u30fc\u30c9)\n\/\/ \u3053\u308c\u304c\u306a\u3044\u3068 \"expected unqualified-id before '.' token\" \u30a8\u30e9\u30fc\u306b\u306a\u308a\u307e\u3059\nI2S i2s(OUTPUT); \n\nconst int I2S_BCLK_PIN = 26;\nconst int I2S_LRCK_PIN = 27;\nconst int I2S_DOUT_PIN = 28;\nconst int SAMPLE_RATE = 44100;\n\n\/\/ --- \u30b7\u30f3\u30bb\u30b5\u30a4\u30b6\u30fc\u5909\u6570 ---\nvolatile float currentFreq = 0.0;\nvolatile bool isNoteOn = false;\nfloat phase = 0.0;\nfloat phaseIncrement = 0.0;\n\n\/\/ --- USB MIDI Host \u30aa\u30d6\u30b8\u30a7\u30af\u30c8 ---\n\/\/ USBHost\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068MidiHost\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u660e\u793a\u7684\u306b\u4f5c\u6210\u3057\u307e\u3059\nAdafruit_USBH_Host USBHost;\nAdafruit_USBH_Midi MidiHost;\n\n\/\/ --- \u95a2\u6570\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7 ---\nvoid noteOn(uint8_t channel, uint8_t pitch, uint8_t velocity);\nvoid noteOff(uint8_t channel, uint8_t pitch, uint8_t velocity);\n\n\/\/ --- \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 (Core 0) ---\nvoid setup() {\n  Serial.begin(115200);\n\n  \/\/ 1. LCD\u521d\u671f\u5316\n  tft.init(240, 240);\n  tft.setRotation(2);\n  tft.fillScreen(ST77XX_BLACK);\n  tft.setTextColor(ST77XX_WHITE);\n  tft.setTextSize(2);\n  tft.setCursor(10, 10);\n  tft.println(\"USB Synth v1.0.2\");\n\n  \/\/ 2. I2S\u521d\u671f\u5316\n  \/\/ \u30af\u30e9\u30b9(I2S)\u3067\u306f\u306a\u304f\u3001\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9(i2s)\u3092\u4f7f\u3044\u307e\u3059\n  i2s.setBCLK(I2S_BCLK_PIN);\n  i2s.setDATA(I2S_DOUT_PIN);\n  i2s.setBitsPerSample(16);\n  \n  if (!i2s.begin(SAMPLE_RATE)) {\n    tft.println(\"I2S Init Failed!\");\n    while (1);\n  }\n\n  \/\/ 3. USB MIDI Host\u521d\u671f\u5316\n  USBHost.begin(0);\n  \n  MidiHost.setNoteOnCallback(noteOn);\n  MidiHost.setNoteOffCallback(noteOff);\n  MidiHost.begin();\n}\n\n\/\/ --- \u30e1\u30a4\u30f3\u30eb\u30fc\u30d7 (Core 0) ---\nvoid loop() {\n  USBHost.task();\n  MidiHost.read();\n}\n\n\/\/ --- MIDI \u30ce\u30fc\u30c8ON ---\nvoid noteOn(uint8_t channel, uint8_t pitch, uint8_t velocity) {\n  if (velocity == 0) {\n    noteOff(channel, pitch, velocity);\n    return;\n  }\n  \n  currentFreq = 440.0 * pow(2.0, (pitch - 69.0) \/ 12.0);\n  phaseIncrement = currentFreq \/ (float)SAMPLE_RATE;\n  isNoteOn = true;\n\n  tft.fillScreen(ST77XX_BLACK);\n  tft.setCursor(10, 50);\n  tft.print(\"Note: \");\n  tft.println(pitch);\n  tft.print(\"Freq: \");\n  tft.println(currentFreq);\n}\n\n\/\/ --- MIDI \u30ce\u30fc\u30c8OFF ---\nvoid noteOff(uint8_t channel, uint8_t pitch, uint8_t velocity) {\n  isNoteOn = false;\n  tft.fillScreen(ST77XX_BLACK);\n  tft.setCursor(10, 50);\n  tft.println(\"Release\");\n}\n\n\/\/ --- \u30aa\u30fc\u30c7\u30a3\u30aa\u51e6\u7406 (Core 1) ---\nvoid setup1() {\n  delay(100); \n}\n\nvoid loop1() {\n  int16_t sample = 0;\n\n  if (isNoteOn) {\n    phase += phaseIncrement;\n    if (phase &gt;= 1.0) phase -= 1.0;\n    sample = (int16_t)((phase * 65535.0) - 32768.0);\n  } else {\n    sample = 0;\n    phase = 0;\n  }\n\n  \/\/ write\u3082\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9(i2s)\u7d4c\u7531\u3067\u547c\u3073\u51fa\u3057\u307e\u3059\n  i2s.write(sample);\n  i2s.write(sample);\n}<\/code><\/pre><\/div>\n\n<\/div>\n\t\t<\/div>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">MIDI\u63a5\u7d9a\u306e\u554f\u984c\u89e3\u6c7a<br>Gemini \u306e\u56de\u7b54<\/h2>\n\n\n\n<p>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e <code>undefined reference<\/code>\uff08\u30ea\u30f3\u30af\u30a8\u30e9\u30fc\uff09\u304c\u767a\u751f\u3057\u305f\u3053\u3068\u3067\u3001\u9375\u76e4\u304c\u5168\u304f\u53cd\u5fdc\u3057\u306a\u304b\u3063\u305f<strong>\u672c\u5f53\u306e\u7406\u7531<\/strong>\u304c\u5b8c\u5168\u306b\u5224\u660e\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u30a8\u30e9\u30fc\u306e\u771f\u56e0\u306f\u3001\u65b0\u3057\u3044RP2040\u30b3\u30a2\uff085.5.0\uff09\u306b\u540c\u68b1\u3055\u308c\u3066\u3044\u308bAdafruit TinyUSB\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u521d\u671f\u8a2d\u5b9a\u306b\u304a\u3044\u3066\u3001<strong>\u300cMIDI\u30db\u30b9\u30c8\u6a5f\u80fd\uff08CFG_TUH_MIDI\uff09\u300d\u81ea\u4f53\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u7121\u52b9\u5316\u3055\u308c\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u5bfe\u8c61\u304b\u3089\u5b8c\u5168\u306b\u9664\u5916\u3055\u308c\u3066\u3044\u305f<\/strong>\u305f\u3081\u3067\u3059\u3002 \u524d\u56de\u3001\u30dd\u30fc\u30ea\u30f3\u30b0\u65b9\u5f0f\u3067 <code>tuh_midi_stream_read<\/code> \u95a2\u6570\u3092\u7121\u7406\u3084\u308a\u76f4\u63a5\u547c\u3073\u51fa\u3057\u305f\u3053\u3068\u3067\u3001\u300c\u5b9f\u4f53\u304c\u5b58\u5728\u3057\u306a\u3044\u300d\u3068\u3044\u3046\u4e8b\u5b9f\u304c\u30ea\u30f3\u30af\u30a8\u30e9\u30fc\u3068\u3057\u3066\u8868\u9762\u5316\u3057\u307e\u3057\u305f\uff08\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u65b9\u5f0f\u306e\u969b\u306f\u3001\u4f7f\u7528\u3055\u308c\u306a\u3044\u30b3\u30fc\u30c9\u3068\u3057\u3066\u30b3\u30f3\u30d1\u30a4\u30e9\u306b\u81ea\u52d5\u6d88\u53bb\u3055\u308c\u3066\u3044\u305f\u305f\u3081\u3001\u30a8\u30e9\u30fc\u304c\u96a0\u853d\u3055\u308c\u3066\u3044\u307e\u3057\u305f\uff09\u3002<\/p>\n\n\n\n<p>\u6839\u672c\u7684\u306b\u89e3\u6c7a\u3059\u308b\u306b\u306f\u3001Arduino\u5074\u306e\u30b3\u30a2\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u30921\u7b87\u6240\u3060\u3051\u66f8\u304d\u63db\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b9\u30b1\u30c3\u30c1\u5185\u306e <code>#define<\/code> \u3067\u306f\u3059\u3067\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u6e08\u307f\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u53cd\u6620\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u76f4\u63a5\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u624b\u98061\uff1aTinyUSB\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u8a2d\u5b9a\u5909\u66f4<\/h3>\n\n\n\n<p>\u30c6\u30ad\u30b9\u30c8\u30a8\u30c7\u30a3\u30bf\uff08\u30e1\u30e2\u5e33\u306a\u3069\uff09\u3067\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002 <code>C:\\Users\\mars\\AppData\\Local\\Arduino15\\packages\\rp2040\\hardware\\rp2040\\5.5.0\\libraries\\Adafruit_TinyUSB_Arduino\\src\\arduino\\ports\\rp2040\\tusb_config_rp2040.h<\/code><\/p>\n\n\n\n<p>138\u884c\u76ee\u4ed8\u8fd1\u306b <code>#define CFG_TUH_DEVICE_MAX ...<\/code> \u306e\u3088\u3046\u306a\u8a18\u8ff0\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u76f4\u4e0b\uff08\u307e\u305f\u306f\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u9069\u5f53\u306a\u7a7a\u304d\u884c\uff09\u306b\u3001\u4ee5\u4e0b\u306e3\u884c\u3092\u8ffd\u8a18\u3057\u3066\u4e0a\u66f8\u304d\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>C<\/p>\n\n\n\n<p>#<strong>ifndef<\/strong> CFG_TUH_MIDI\n#<strong>define<\/strong> CFG_TUH_MIDI 1\n#<strong>endif<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u4e0b\u306f\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u304c\u901a\u308b\u307e\u3067\u306e\u904e\u7a0b\u3067\u3001\u5b9f\u884c\u3057\u3066\u671f\u5f85\u901a\u308a\u306e\u52d5\u4f5c\u306b\u306a\u308b\u304b\u306f\u3001\u5225\u306e\u554f\u984c\u3067\u3059\u3002LLM\u306b\u5bfe\u3059\u308b\u6700\u521d\u306e\u554f\u3044\u304b\u3051\uff1a\u30de\u30a4\u30b3\u30f3\u3001\u5c0f\u578bLCD\u3001USB \u63a5\u7d9a\u306eMIDI\u30ad\u30fc\u30dc\u30fc\u3092\u4f7f\u3063\u3066\u30a2\u30ca\u30ed\u30b0\u30b7\u30f3\u30bb\u30b5\u30a4\u30b6\u30fc\u3092\u4f5c\u308b\u306b\u306f\uff1f MIDI [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[21,32,1],"tags":[],"class_list":["post-2315","post","type-post","status-publish","format-standard","hentry","category-llm","category-32","category-uncategorized"],"featured_image_src":null,"author_info":{"display_name":"mars","author_link":"https:\/\/rfsec.ddns.net\/db\/?author=1"},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/posts\/2315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2315"}],"version-history":[{"count":4,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/posts\/2315\/revisions"}],"predecessor-version":[{"id":2331,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=\/wp\/v2\/posts\/2315\/revisions\/2331"}],"wp:attachment":[{"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rfsec.ddns.net\/db\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}