{"id":99812,"date":"2025-03-03T00:03:52","date_gmt":"2025-03-02T20:33:52","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/"},"modified":"2025-03-03T00:03:52","modified_gmt":"2025-03-02T20:33:52","slug":"%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/","title":{"rendered":"\u062e\u0648\u062f\u06a9\u0627\u0631 \u0633\u0627\u0632\u06cc \u0646\u0633\u0644 MIDI \u0628\u0627 Python: \u06cc\u06a9 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062c\u0627\u0645\u0639"},"content":{"rendered":"<div data-article-id=\"2306946\" id=\"article-body\">\n<p>MIDI (\u0631\u0627\u0628\u0637 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0627\u0628\u0632\u0627\u0631 \u0645\u0648\u0633\u06cc\u0642\u06cc) \u06cc\u06a9 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0645\u062d\u0628\u0648\u0628 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u0648\u0633\u06cc\u0642\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644\u06cc \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0628\u0647 \u0622\u0647\u0646\u06af\u0633\u0627\u0632\u0627\u0646 \u0648 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0645\u0648\u0633\u06cc\u0642\u06cc \u0631\u0627 \u0628\u0627 \u0641\u0631\u0645\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0627\u06cc\u062c\u0627\u062f \u060c \u0627\u0635\u0644\u0627\u062d \u0648 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc \u06a9\u0646\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u060c \u0645\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u067e\u0627\u06cc\u062a\u0648\u0646 \u0642\u062f\u0645 \u0645\u06cc \u0632\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u060c \u0637\u0648\u0644 \u060c \u0633\u0631\u0639\u062a \u0648 \u062d\u062a\u06cc \u0645\u0627\u06a9\u0631\u0648 \u0628\u0631\u0627\u06cc \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0645\u0648\u0633\u06cc\u0642\u06cc \u0645\u06a9\u0631\u0631 \u060c \u06cc\u06a9 \u0641\u0627\u06cc\u0644 MIDI \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#%D9%86%D9%85%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C_%D9%81%DB%8C%D9%84%D9%85%D9%86%D8%A7%D9%85%D9%87\" >\u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u0641\u06cc\u0644\u0645\u0646\u0627\u0645\u0647<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#1_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%85%D8%AD%DB%8C%D8%B7\" >1 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#2_%D9%86%D9%82%D8%B4%D9%87_%D8%A8%D8%B1%D8%AF%D8%A7%D8%B1%DB%8C_%D8%A7%D8%B2_%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA_%D9%87%D8%A7_%D8%A8%D9%87_%D8%B4%D9%85%D8%A7%D8%B1%D9%87_%D9%87%D8%A7%DB%8C_MIDI\" >2 \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0627\u0632 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 \u0647\u0627\u06cc MIDI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#3_%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA_%D9%87%D8%A7_%D9%88_%D8%A7%DA%A9%D8%AA%D8%A7%D9%88_%D9%87%D8%A7_%D8%A8%D9%87_%D8%B4%D9%85%D8%A7%D8%B1%D9%87_MIDI\" >3 \u062a\u0628\u062f\u06cc\u0644 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u0648 \u0627\u06a9\u062a\u0627\u0648 \u0647\u0627 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 MIDI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#4_%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_%D8%B7%D9%88%D9%84_%D8%A8%D9%87_%DA%A9%D9%86%D9%87_%D9%87%D8%A7%DB%8C_MIDI\" >4 \u062a\u0628\u062f\u06cc\u0644 \u0637\u0648\u0644 \u0628\u0647 \u06a9\u0646\u0647 \u0647\u0627\u06cc MIDI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#5_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87_MIDI\" >5 \u062a\u0648\u0644\u06cc\u062f \u067e\u0631\u0648\u0646\u062f\u0647 MIDI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#6_%D8%AF%D8%B1_%D8%AD%D8%A7%D9%84_%DA%AF%D8%B3%D8%AA%D8%B1%D8%B4_%D9%85%D8%A7%DA%A9%D8%B1%D9%88\" >6 \u062f\u0631 \u062d\u0627\u0644 \u06af\u0633\u062a\u0631\u0634 \u0645\u0627\u06a9\u0631\u0648<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#7_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DB%8C%DA%A9_%D8%AF%D9%86%D8%A8%D8%A7%D9%84%D9%87_%D9%85%D9%88%D8%B3%DB%8C%D9%82%DB%8C\" >7 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062f\u0646\u0628\u0627\u0644\u0647 \u0645\u0648\u0633\u06cc\u0642\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#8_%D9%85%D8%B1%D8%A7%D8%AD%D9%84_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\" >8 \u0645\u0631\u0627\u062d\u0644 \u0646\u0647\u0627\u06cc\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\" >\u067e\u0627\u06cc\u0627\u0646<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%b2%db%8c-%d9%86%d8%b3%d9%84-midi-%d8%a8%d8%a7-python-%db%8c%da%a9-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/#%D8%B1%D9%85%D8%B2_%DA%A9%D8%A7%D9%85%D9%84\" >\u0631\u0645\u0632 \u06a9\u0627\u0645\u0644<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D9%85%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C_%D9%81%DB%8C%D9%84%D9%85%D9%86%D8%A7%D9%85%D9%87\"><\/span>\n<p>  \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u0641\u06cc\u0644\u0645\u0646\u0627\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0641\u06cc\u0644\u0645\u0646\u0627\u0645\u0647 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>mido<\/code> \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u060c \u06cc\u06a9 \u0628\u0633\u062a\u0647 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u067e\u0627\u06cc\u062a\u0648\u0646 \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u0627 \u0641\u0627\u06cc\u0644\u0647\u0627\u06cc MIDI \u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f. \u0647\u062f\u0641 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062a\u0648\u0644\u06cc\u062f \u06cc\u06a9 \u0641\u0627\u06cc\u0644 MIDI \u0628\u0631 \u0627\u0633\u0627\u0633 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u0648 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0622\u0646\u0647\u0627 \u0645\u0627\u0646\u0646\u062f \u0637\u0648\u0644 \u0648 \u0633\u0631\u0639\u062a \u0627\u0633\u062a. \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646 \u060c \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u062f\u0631 \u06af\u0633\u062a\u0631\u0634 \u0645\u0627\u06a9\u0631\u0648\u0647\u0627 \u0628\u0647 \u062a\u0648\u0627\u0644\u06cc \u0647\u0627\u06cc \u0645\u0648\u0633\u06cc\u0642\u06cc \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0631\u0627 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u062c\u0632\u0627\u06cc \u0627\u0635\u0644\u06cc \u0641\u06cc\u0644\u0645\u0646\u0627\u0645\u0647 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645 \u0648 \u062a\u0648\u0636\u06cc\u062d \u062f\u0647\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"1_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%85%D8%AD%DB%8C%D8%B7\"><\/span>\n<p>  1 <strong>\u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0645\u0627\u0698\u0648\u0644 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u062f\u0631 <code>mido<\/code> \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0641\u0627\u06cc\u0644 MIDI \u060c \u0627\u0631\u0633\u0627\u0644 \u067e\u06cc\u0627\u0645 \u0648 \u062a\u0646\u0638\u06cc\u0645 \u0633\u0631\u0639\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u062f\u0631 <code>os<\/code> \u0645\u0627\u0698\u0648\u0644 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u067e\u0648\u0634\u0647 \u062e\u0631\u0648\u062c\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u067e\u0631\u0648\u0646\u062f\u0647 \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">import<\/span> <span class=\"n\">mido<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">mido<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">MidiFile<\/span><span class=\"p\">,<\/span> <span class=\"n\">MidiTrack<\/span><span class=\"p\">,<\/span> <span class=\"n\">Message<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">os<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"2_%D9%86%D9%82%D8%B4%D9%87_%D8%A8%D8%B1%D8%AF%D8%A7%D8%B1%DB%8C_%D8%A7%D8%B2_%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA_%D9%87%D8%A7_%D8%A8%D9%87_%D8%B4%D9%85%D8%A7%D8%B1%D9%87_%D9%87%D8%A7%DB%8C_MIDI\"><\/span>\n<p>  2 <strong>\u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0627\u0632 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 \u0647\u0627\u06cc MIDI<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 MIDI \u060c \u0647\u0631 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0628\u0627 \u06cc\u06a9 \u0634\u0645\u0627\u0631\u0647 \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c \u06cc\u0627\u062f\u062f\u0627\u0634\u062a &#8220;C4&#8221; \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 60 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0632 \u06cc\u06a9 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>NOTE_TO_MIDI<\/code> \u0628\u0631\u0627\u06cc \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0646\u0627\u0645 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 (\u0645\u0627\u0646\u0646\u062f &#8220;C&#8221; \u060c &#8220;D#&#8221; \u0648 \u063a\u06cc\u0631\u0647) \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 \u0647\u0627\u06cc \u06cc\u0627\u062f\u062f\u0627\u0634\u062a MIDI.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"n\">NOTE_TO_MIDI<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">C<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">D<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">D#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">E<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">F<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">5<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">F#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">6<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">7<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">A<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">9<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">A#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">10<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">B<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">11<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"3_%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA_%D9%87%D8%A7_%D9%88_%D8%A7%DA%A9%D8%AA%D8%A7%D9%88_%D9%87%D8%A7_%D8%A8%D9%87_%D8%B4%D9%85%D8%A7%D8%B1%D9%87_MIDI\"><\/span>\n<p>  3 <strong>\u062a\u0628\u062f\u06cc\u0644 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u0648 \u0627\u06a9\u062a\u0627\u0648 \u0647\u0627 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 MIDI<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 <code>note_to_midi<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f \u06cc\u06a9 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a (\u0645\u0627\u0646\u0646\u062f &#8220;C4&#8221; \u06cc\u0627 &#8220;D#3&#8221;) \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u0634\u0645\u0627\u0631\u0647 MIDI \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0641\u0631\u0645\u0648\u0644 \u0628\u0631\u0627\u06cc \u0627\u06a9\u062a\u0627\u0648 \u0646\u06cc\u0632 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u0634\u0648\u062f \u060c \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 C4 \u0647\u0645\u06cc\u0634\u0647 MIDI \u0634\u0645\u0627\u0631\u0647 60 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"k\">def<\/span> <span class=\"nf\">note_to_midi<\/span><span class=\"p\">(<\/span><span class=\"n\">note<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">note_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">note<\/span><span class=\"p\">[:<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span>  <span class=\"c1\"># Extract the note name (e.g., 'A', 'B', etc.)\n<\/span>    <span class=\"n\">octave<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">note<\/span><span class=\"p\">[<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">])<\/span>  <span class=\"c1\"># Extract the octave (e.g., '0', '2', etc.)\n<\/span>    <span class=\"k\">return<\/span> <span class=\"n\">NOTE_TO_MIDI<\/span><span class=\"p\">[<\/span><span class=\"n\">note_name<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">12<\/span> <span class=\"o\">*<\/span> <span class=\"p\">(<\/span><span class=\"n\">octave<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"4_%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_%D8%B7%D9%88%D9%84_%D8%A8%D9%87_%DA%A9%D9%86%D9%87_%D9%87%D8%A7%DB%8C_MIDI\"><\/span>\n<p>  4 <strong>\u062a\u0628\u062f\u06cc\u0644 \u0637\u0648\u0644 \u0628\u0647 \u06a9\u0646\u0647 \u0647\u0627\u06cc MIDI<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0632\u0645\u0627\u0646 MIDI \u0628\u0647 \u06a9\u0646\u0647 \u062a\u0642\u0633\u06cc\u0645 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0641\u0648\u0627\u0635\u0644 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0648\u0686\u06a9 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f. \u062f\u0631 <code>length_to_ticks<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f \u0637\u0648\u0644 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627\u06cc \u0645\u0648\u0633\u06cc\u0642\u06cc (\u0645\u0627\u0646\u0646\u062f \u06a9\u0644 \u060c \u0646\u06cc\u0645\u06cc \u060c \u0686\u0647\u0627\u0631\u0645 \u0648 \u063a\u06cc\u0631\u0647) \u0631\u0627 \u0628\u0647 \u0645\u062f\u062a \u0632\u0645\u0627\u0646 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0622\u0646\u0647\u0627 \u062f\u0631 \u06a9\u0646\u0647 \u0647\u0627\u06cc MIDI \u060c \u0628\u0631 \u0627\u0633\u0627\u0633 \u06a9\u0646\u0647 \u062f\u0631 \u0647\u0631 \u0645\u0642\u062f\u0627\u0631 \u0636\u0631\u0628 \u0648 \u0634\u062a\u0645 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"k\">def<\/span> <span class=\"nf\">length_to_ticks<\/span><span class=\"p\">(<\/span><span class=\"n\">length<\/span><span class=\"p\">,<\/span> <span class=\"n\">ticks_per_beat<\/span><span class=\"p\">):<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">4<\/span>  <span class=\"c1\"># Whole note\n<\/span>    <span class=\"k\">elif<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">2<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">2<\/span>  <span class=\"c1\"># Half note\n<\/span>    <span class=\"k\">elif<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">4<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span>  <span class=\"c1\"># Quarter note\n<\/span>    <span class=\"k\">elif<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">8<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">\/\/<\/span> <span class=\"mi\">2<\/span>  <span class=\"c1\"># Eighth note\n<\/span>    <span class=\"k\">elif<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">16<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">\/\/<\/span> <span class=\"mi\">4<\/span>  <span class=\"c1\"># Sixteenth note\n<\/span>    <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span>  <span class=\"c1\"># Default to quarter note\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"5_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87_MIDI\"><\/span>\n<p>  5 <strong>\u062a\u0648\u0644\u06cc\u062f \u067e\u0631\u0648\u0646\u062f\u0647 MIDI<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 <code>generate_piano_midi<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0627\u0648\u0644\u06cc\u0646 \u0622\u0647\u0646\u06af \u0648 \u062a\u0639\u0631\u06cc\u0641 \u0633\u0627\u0632 (\u06cc\u06a9 \u067e\u06cc\u0627\u0646\u0648 \u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u060c \u06cc\u06a9 \u0641\u0627\u06cc\u0644 MIDI \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f (\u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u067e\u06cc\u0627\u0646\u0648 \u0645\u06cc \u0634\u0648\u062f). \u0633\u067e\u0633 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0627\u0632 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u060c \u0637\u0648\u0644 \u0647\u0627 \u0648 \u0633\u0631\u0639\u062a \u0647\u0627 \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc MIDI \u0645\u0646\u0627\u0633\u0628 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f (\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u0648 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u06a9\u0646\u06cc\u062f).<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"k\">def<\/span> <span class=\"nf\">generate_piano_midi<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">,<\/span> <span class=\"n\">tempo<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_file<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">output\/piano_piece_2.mid<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">instrument_program<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">output_folder<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">output<\/span><span class=\"sh\">\"<\/span>\n    <span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">exists<\/span><span class=\"p\">(<\/span><span class=\"n\">output_folder<\/span><span class=\"p\">):<\/span>\n        <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">makedirs<\/span><span class=\"p\">(<\/span><span class=\"n\">output_folder<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">midi<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">MidiFile<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">track<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">MidiTrack<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">midi<\/span><span class=\"p\">.<\/span><span class=\"n\">tracks<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">track<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">program_change<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">program<\/span><span class=\"o\">=<\/span><span class=\"n\">instrument_program<\/span><span class=\"p\">))<\/span>\n    <span class=\"n\">microseconds_per_beat<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">60<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000000<\/span> <span class=\"o\">\/\/<\/span> <span class=\"n\">tempo<\/span>\n    <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">mido<\/span><span class=\"p\">.<\/span><span class=\"nc\">MetaMessage<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">set_tempo<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">tempo<\/span><span class=\"o\">=<\/span><span class=\"n\">microseconds_per_beat<\/span><span class=\"p\">))<\/span>\n\n    <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">480<\/span>\n    <span class=\"n\">current_time<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>  <span class=\"c1\"># Start at time 0\n<\/span>\n    <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nf\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">),<\/span> <span class=\"mi\">3<\/span><span class=\"p\">):<\/span>\n        <span class=\"n\">note<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">]<\/span>  <span class=\"c1\"># Note name (e.g., 'A0')\n<\/span>        <span class=\"n\">length<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">]<\/span>  <span class=\"c1\"># Length (e.g., 4 for quarter note)\n<\/span>        <span class=\"n\">velocity<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">2<\/span><span class=\"p\">]<\/span>  <span class=\"c1\"># Velocity (e.g., 100 for volume)\n<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">note<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">'<\/span><span class=\"s\">X<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span>  <span class=\"c1\"># Handle pauses (no sound)\n<\/span>            <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">note_on<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">note<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">velocity<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">=<\/span><span class=\"n\">current_time<\/span><span class=\"p\">))<\/span>\n            <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">note_off<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">note<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">velocity<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">=<\/span><span class=\"nf\">length_to_ticks<\/span><span class=\"p\">(<\/span><span class=\"n\">length<\/span><span class=\"p\">,<\/span> <span class=\"n\">ticks_per_beat<\/span><span class=\"p\">)))<\/span>\n            <span class=\"n\">current_time<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n            <span class=\"k\">continue<\/span>\n\n        <span class=\"n\">midi_note<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">note_to_midi<\/span><span class=\"p\">(<\/span><span class=\"n\">note<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">duration<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">length_to_ticks<\/span><span class=\"p\">(<\/span><span class=\"n\">length<\/span><span class=\"p\">,<\/span> <span class=\"n\">ticks_per_beat<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">note_on<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">note<\/span><span class=\"o\">=<\/span><span class=\"n\">midi_note<\/span><span class=\"p\">,<\/span> <span class=\"n\">velocity<\/span><span class=\"o\">=<\/span><span class=\"n\">velocity<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">=<\/span><span class=\"n\">current_time<\/span><span class=\"p\">))<\/span>\n        <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">note_off<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">note<\/span><span class=\"o\">=<\/span><span class=\"n\">midi_note<\/span><span class=\"p\">,<\/span> <span class=\"n\">velocity<\/span><span class=\"o\">=<\/span><span class=\"n\">velocity<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">=<\/span><span class=\"n\">duration<\/span><span class=\"p\">))<\/span>\n\n        <span class=\"n\">current_time<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n\n    <span class=\"n\">midi<\/span><span class=\"p\">.<\/span><span class=\"nf\">save<\/span><span class=\"p\">(<\/span><span class=\"n\">output_file<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">MIDI file <\/span><span class=\"sh\">'<\/span><span class=\"si\">{<\/span><span class=\"n\">output_file<\/span><span class=\"si\">}<\/span><span class=\"sh\">'<\/span><span class=\"s\"> has been saved!<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"6_%D8%AF%D8%B1_%D8%AD%D8%A7%D9%84_%DA%AF%D8%B3%D8%AA%D8%B1%D8%B4_%D9%85%D8%A7%DA%A9%D8%B1%D9%88\"><\/span>\n<p>  6 <strong>\u062f\u0631 \u062d\u0627\u0644 \u06af\u0633\u062a\u0631\u0634 \u0645\u0627\u06a9\u0631\u0648<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0622\u0646 \u062f\u0631 \u06af\u0633\u062a\u0631\u0634 \u0645\u0627\u06a9\u0631\u0648\u0647\u0627 \u0627\u0633\u062a. \u0645\u0627\u06a9\u0631\u0648\u0647\u0627 \u062a\u0648\u0627\u0644\u06cc \u0647\u0627\u06cc \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u06cc \u0627\u0632 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0627 \u06cc\u06a9 \u0639\u0644\u0627\u0645\u062a \u06a9\u0648\u062a\u0627\u0647 \u0627\u0631\u062c\u0627\u0639 \u0634\u0648\u0646\u062f. \u0627\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u062f\u0648\u0646 \u062a\u06a9\u0631\u0627\u0631 \u0647\u0645\u0627\u0646 \u06a9\u062f \u060c \u0627\u0632 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u062f\u0631 \u06a9\u0644 \u062f\u0646\u0628\u0627\u0644\u0647 \u0645\u0648\u0633\u06cc\u0642\u06cc \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"k\">def<\/span> <span class=\"nf\">expand_macros<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">,<\/span> <span class=\"n\">macros<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">expanded_sequence<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n    <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n    <span class=\"k\">while<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">):<\/span>\n        <span class=\"k\">if<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">],<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">].<\/span><span class=\"nf\">startswith<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">M<\/span><span class=\"sh\">'<\/span><span class=\"p\">):<\/span>  <span class=\"c1\"># Macro starts with 'M'\n<\/span>            <span class=\"n\">macro_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">]<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">macro_name<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">macros<\/span><span class=\"p\">:<\/span>\n                <span class=\"n\">expanded_sequence<\/span><span class=\"p\">.<\/span><span class=\"nf\">extend<\/span><span class=\"p\">(<\/span><span class=\"n\">macros<\/span><span class=\"p\">[<\/span><span class=\"n\">macro_name<\/span><span class=\"p\">])<\/span>  <span class=\"c1\"># Expand the macro\n<\/span>            <span class=\"n\">i<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>  <span class=\"c1\"># Skip the macro name\n<\/span>        <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">expanded_sequence<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">])<\/span>\n            <span class=\"n\">i<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">expanded_sequence<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"7_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DB%8C%DA%A9_%D8%AF%D9%86%D8%A8%D8%A7%D9%84%D9%87_%D9%85%D9%88%D8%B3%DB%8C%D9%82%DB%8C\"><\/span>\n<p>  7 <strong>\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062f\u0646\u0628\u0627\u0644\u0647 \u0645\u0648\u0633\u06cc\u0642\u06cc<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0627\u0632 \u0645\u0627\u06a9\u0631\u0648 \u0648 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627\u06cc \u0641\u0631\u062f\u06cc \u060c \u06cc\u06a9 \u062f\u0646\u0628\u0627\u0644\u0647 \u0645\u0648\u0633\u06cc\u0642\u06cc \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"n\">macros<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M001<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">C3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">E3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C4<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M002<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">C3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">F3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">A3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C4<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M003<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">B2<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">D3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">B3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">]<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"n\">sequence<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">M001<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">M002<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">M003<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">M003<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">M001<\/span><span class=\"sh\">'<\/span><span class=\"p\">]<\/span>\n<span class=\"n\">expanded_sequence<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">expand_macros<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">,<\/span> <span class=\"n\">macros<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"8_%D9%85%D8%B1%D8%A7%D8%AD%D9%84_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\"><\/span>\n<p>  8 <strong>\u0645\u0631\u0627\u062d\u0644 \u0646\u0647\u0627\u06cc\u06cc<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u0633 \u0627\u0632 \u06af\u0633\u062a\u0631\u0634 \u062f\u0646\u0628\u0627\u0644\u0647 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u06a9 \u0633\u0631\u0639\u062a (\u062f\u0631 \u0636\u0631\u0628\u0627\u0646 \u062f\u0631 \u062f\u0642\u06cc\u0642\u0647) \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u060c \u06cc\u06a9 \u0633\u0627\u0632 (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c \u067e\u06cc\u0627\u0646\u0648 \u06cc\u0627 \u0641\u0644\u0648\u062a) \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0641\u0627\u06cc\u0644 MIDI \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f <code>generate_piano_midi<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"n\">tempo_bpm<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">120<\/span>  <span class=\"c1\"># Tempo in beats per minute\n<\/span><span class=\"n\">instrument_program<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span>  <span class=\"c1\"># Flute\n<\/span>\n<span class=\"nf\">generate_piano_midi<\/span><span class=\"p\">(<\/span><span class=\"n\">expanded_sequence<\/span><span class=\"p\">,<\/span> <span class=\"n\">tempo_bpm<\/span><span class=\"p\">,<\/span> <span class=\"n\">instrument_program<\/span><span class=\"o\">=<\/span><span class=\"n\">instrument_program<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\"><\/span>\n<p>  \u067e\u0627\u06cc\u0627\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u067e\u0627\u06cc\u0647 \u0627\u06cc \u0645\u062d\u06a9\u0645 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627\u06cc MIDI \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>mido<\/code> \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u062a\u0628\u062f\u06cc\u0644 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0628\u0647 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627 \u060c \u06af\u0633\u062a\u0631\u0634 \u06a9\u0644\u0627\u0646 \u0648 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u062f\u062a \u0632\u0645\u0627\u0646 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0627\u06cc\u062c\u0627\u062f \u0622\u0647\u0646\u06af \u0647\u0627\u06cc \u0645\u0648\u0633\u06cc\u0642\u06cc \u0631\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u06a9\u0647 \u0622\u06cc\u0627 \u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u06a9\u0627\u0631 \u0628\u0631 \u0631\u0648\u06cc \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0645\u0648\u0633\u06cc\u0642\u06cc \u060c \u0627\u06cc\u062c\u0627\u062f \u0645\u0648\u0633\u06cc\u0642\u06cc \u0645\u062a\u0646 \u0641\u06cc\u0644\u0645 \u0647\u0633\u062a\u06cc\u062f \u06cc\u0627 \u0641\u0642\u0637 \u0628\u0627 MIDI \u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u060c \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627\u0639\u062b \u0635\u0631\u0641\u0647 \u062c\u0648\u06cc\u06cc \u062f\u0631 \u0648\u0642\u062a \u0634\u0645\u0627 \u0634\u0648\u062f \u0648 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u062e\u0644\u0627\u0642\u0627\u0646\u0647 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u062f. <\/p>\n<p>\u0627\u06af\u0631 \u0647\u0646\u0648\u0632 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u060c \u0622\u0646 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0647\u0646\u06af \u0647\u0627\u06cc MIDI \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f!<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D9%85%D8%B2_%DA%A9%D8%A7%D9%85%D9%84\"><\/span>\n<p>  \u0631\u0645\u0632 \u06a9\u0627\u0645\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">import<\/span> <span class=\"n\">mido<\/span>\n<span class=\"kn\">from<\/span> <span class=\"n\">mido<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">MidiFile<\/span><span class=\"p\">,<\/span> <span class=\"n\">MidiTrack<\/span><span class=\"p\">,<\/span> <span class=\"n\">Message<\/span>\n<span class=\"kn\">import<\/span> <span class=\"n\">os<\/span>\n\n<span class=\"c1\"># Mapping of note names to MIDI numbers\n<\/span><span class=\"n\">NOTE_TO_MIDI<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">C<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">D<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">D#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">E<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">F<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">5<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">F#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">6<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">7<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">A<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">9<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">A#<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">10<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">B<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"mi\">11<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\"># Function to convert note and octave to MIDI number\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">note_to_midi<\/span><span class=\"p\">(<\/span><span class=\"n\">note<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">note_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">note<\/span><span class=\"p\">[:<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span>  <span class=\"c1\"># Extract the note name (e.g., 'A', 'B', etc.)\n<\/span>    <span class=\"n\">octave<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">note<\/span><span class=\"p\">[<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">])<\/span>  <span class=\"c1\"># Extract the octave (e.g., '0', '2', etc.)\n<\/span>    <span class=\"k\">return<\/span> <span class=\"n\">NOTE_TO_MIDI<\/span><span class=\"p\">[<\/span><span class=\"n\">note_name<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">12<\/span> <span class=\"o\">*<\/span> <span class=\"p\">(<\/span><span class=\"n\">octave<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># Function to convert length notation to MIDI ticks\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">length_to_ticks<\/span><span class=\"p\">(<\/span><span class=\"n\">length<\/span><span class=\"p\">,<\/span> <span class=\"n\">ticks_per_beat<\/span><span class=\"p\">):<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">4<\/span>  <span class=\"c1\"># Whole note\n<\/span>    <span class=\"k\">elif<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">2<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">2<\/span>  <span class=\"c1\"># Half note\n<\/span>    <span class=\"k\">elif<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">4<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span>  <span class=\"c1\"># Quarter note\n<\/span>    <span class=\"k\">elif<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">8<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">\/\/<\/span> <span class=\"mi\">2<\/span>  <span class=\"c1\"># Eighth note\n<\/span>    <span class=\"k\">elif<\/span> <span class=\"n\">length<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">16<\/span><span class=\"p\">:<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">\/\/<\/span> <span class=\"mi\">4<\/span>  <span class=\"c1\"># Sixteenth note\n<\/span>    <span class=\"k\">return<\/span> <span class=\"n\">ticks_per_beat<\/span>  <span class=\"c1\"># Default to quarter note\n<\/span>\n<span class=\"c1\"># Function to generate MIDI file based on the given sequence and tempo\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">generate_piano_midi<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">,<\/span> <span class=\"n\">tempo<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_file<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">output\/piano_piece_2.mid<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">instrument_program<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">output_folder<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">output<\/span><span class=\"sh\">\"<\/span>\n    <span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">exists<\/span><span class=\"p\">(<\/span><span class=\"n\">output_folder<\/span><span class=\"p\">):<\/span>\n        <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">makedirs<\/span><span class=\"p\">(<\/span><span class=\"n\">output_folder<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">midi<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">MidiFile<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">track<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">MidiTrack<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">midi<\/span><span class=\"p\">.<\/span><span class=\"n\">tracks<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">track<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">program_change<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">program<\/span><span class=\"o\">=<\/span><span class=\"n\">instrument_program<\/span><span class=\"p\">))<\/span>\n    <span class=\"n\">microseconds_per_beat<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">60<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000000<\/span> <span class=\"o\">\/\/<\/span> <span class=\"n\">tempo<\/span>\n    <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">mido<\/span><span class=\"p\">.<\/span><span class=\"nc\">MetaMessage<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">set_tempo<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">tempo<\/span><span class=\"o\">=<\/span><span class=\"n\">microseconds_per_beat<\/span><span class=\"p\">))<\/span>\n\n    <span class=\"n\">ticks_per_beat<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">480<\/span>\n    <span class=\"n\">current_time<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n\n    <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nf\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">),<\/span> <span class=\"mi\">3<\/span><span class=\"p\">):<\/span>\n        <span class=\"n\">note<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">]<\/span>  <span class=\"c1\"># Note name (e.g., 'A0')\n<\/span>        <span class=\"n\">length<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">]<\/span>  <span class=\"c1\"># Length (e.g., 4 for quarter note)\n<\/span>        <span class=\"n\">velocity<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">2<\/span><span class=\"p\">]<\/span>  <span class=\"c1\"># Velocity (e.g., 100 for volume)\n<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">note<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">'<\/span><span class=\"s\">X<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span>  <span class=\"c1\"># Handle pauses (no sound)\n<\/span>            <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">note_on<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">note<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">velocity<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">=<\/span><span class=\"n\">current_time<\/span><span class=\"p\">))<\/span>\n            <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">note_off<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">note<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">velocity<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">=<\/span><span class=\"nf\">length_to_ticks<\/span><span class=\"p\">(<\/span><span class=\"n\">length<\/span><span class=\"p\">,<\/span> <span class=\"n\">ticks_per_beat<\/span><span class=\"p\">)))<\/span>\n            <span class=\"n\">current_time<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n            <span class=\"k\">continue<\/span>\n\n        <span class=\"n\">midi_note<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">note_to_midi<\/span><span class=\"p\">(<\/span><span class=\"n\">note<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">duration<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">length_to_ticks<\/span><span class=\"p\">(<\/span><span class=\"n\">length<\/span><span class=\"p\">,<\/span> <span class=\"n\">ticks_per_beat<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">note_on<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">note<\/span><span class=\"o\">=<\/span><span class=\"n\">midi_note<\/span><span class=\"p\">,<\/span> <span class=\"n\">velocity<\/span><span class=\"o\">=<\/span><span class=\"n\">velocity<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">=<\/span><span class=\"n\">current_time<\/span><span class=\"p\">))<\/span>\n        <span class=\"n\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"nc\">Message<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">note_off<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"n\">note<\/span><span class=\"o\">=<\/span><span class=\"n\">midi_note<\/span><span class=\"p\">,<\/span> <span class=\"n\">velocity<\/span><span class=\"o\">=<\/span><span class=\"n\">velocity<\/span><span class=\"p\">,<\/span> <span class=\"n\">time<\/span><span class=\"o\">=<\/span><span class=\"n\">duration<\/span><span class=\"p\">))<\/span>\n\n        <span class=\"n\">current_time<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n\n    <span class=\"n\">midi<\/span><span class=\"p\">.<\/span><span class=\"nf\">save<\/span><span class=\"p\">(<\/span><span class=\"n\">output_file<\/span><span class=\"p\">)<\/span>\n    <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">MIDI file <\/span><span class=\"sh\">'<\/span><span class=\"si\">{<\/span><span class=\"n\">output_file<\/span><span class=\"si\">}<\/span><span class=\"sh\">'<\/span><span class=\"s\"> has been saved!<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># Function to expand macros\n<\/span><span class=\"k\">def<\/span> <span class=\"nf\">expand_macros<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">,<\/span> <span class=\"n\">macros<\/span><span class=\"p\">):<\/span>\n    <span class=\"n\">expanded_sequence<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n    <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n    <span class=\"k\">while<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">):<\/span>\n        <span class=\"k\">if<\/span> <span class=\"nf\">isinstance<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">],<\/span> <span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">].<\/span><span class=\"nf\">startswith<\/span><span class=\"p\">(<\/span><span class=\"sh\">'<\/span><span class=\"s\">M<\/span><span class=\"sh\">'<\/span><span class=\"p\">):<\/span>  <span class=\"c1\"># Macro starts with 'M'\n<\/span>            <span class=\"n\">macro_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">]<\/span>\n            <span class=\"k\">if<\/span> <span class=\"n\">macro_name<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">macros<\/span><span class=\"p\">:<\/span>\n                <span class=\"n\">expanded_sequence<\/span><span class=\"p\">.<\/span><span class=\"nf\">extend<\/span><span class=\"p\">(<\/span><span class=\"n\">macros<\/span><span class=\"p\">[<\/span><span class=\"n\">macro_name<\/span><span class=\"p\">])<\/span>  <span class=\"c1\"># Expand the macro\n<\/span>            <span class=\"n\">i<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>  <span class=\"c1\"># Skip the macro name\n<\/span>        <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n            <span class=\"n\">expanded_sequence<\/span><span class=\"p\">.<\/span><span class=\"nf\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">])<\/span>\n            <span class=\"n\">i<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">expanded_sequence<\/span>\n\n<span class=\"c1\"># Example macros definition\n<\/span><span class=\"n\">macros<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M001<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">C3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">E3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C4<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M002<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">C3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">F3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">A3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C4<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M003<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">B2<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">D3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">B3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M004<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">C3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">E3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C4<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M005<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">C3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">E3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">A3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C4<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M006<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">D3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">F#3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">A3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C4<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M007<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"sh\">'<\/span><span class=\"s\">G2<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">B2<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">85<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">D3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"sh\">'<\/span><span class=\"s\">G3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">75<\/span><span class=\"p\">],<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M008<\/span><span class=\"sh\">'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span> <span class=\"sh\">'<\/span><span class=\"s\">C3<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span> <span class=\"p\">]<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\"># Example sequence\n<\/span><span class=\"n\">sequence<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M001<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M001<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M002<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M002<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M003<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M003<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M004<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M004<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M005<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M005<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M006<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M006<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M007<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M007<\/span><span class=\"sh\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"sh\">'<\/span><span class=\"s\">M008<\/span><span class=\"sh\">'<\/span>\n<span class=\"p\">]<\/span>\n\n<span class=\"c1\"># Expand macros in the sequence\n<\/span><span class=\"n\">expanded_sequence<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">expand_macros<\/span><span class=\"p\">(<\/span><span class=\"n\">sequence<\/span><span class=\"p\">,<\/span> <span class=\"n\">macros<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># Tempo in beats per minute (e.g., 120 BPM)\n<\/span><span class=\"n\">tempo_bpm<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">120<\/span>\n\n<span class=\"c1\"># Choose an instrument (e.g., piano, flute, violin, etc.)\n<\/span><span class=\"n\">instrument_program<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span>  <span class=\"c1\"># Flute\n<\/span>\n<span class=\"c1\"># Generate the MIDI file with the expanded sequence and tempo\n<\/span><span class=\"nf\">generate_piano_midi<\/span><span class=\"p\">(<\/span><span class=\"n\">expanded_sequence<\/span><span class=\"p\">,<\/span> <span class=\"n\">tempo_bpm<\/span><span class=\"p\">,<\/span> <span class=\"n\">instrument_program<\/span><span class=\"o\">=<\/span><span class=\"n\">instrument_program<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>MIDI (\u0631\u0627\u0628\u0637 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0627\u0628\u0632\u0627\u0631 \u0645\u0648\u0633\u06cc\u0642\u06cc) \u06cc\u06a9 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0645\u062d\u0628\u0648\u0628 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u0648\u0633\u06cc\u0642\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644\u06cc \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0628\u0647 \u0622\u0647\u0646\u06af\u0633\u0627\u0632\u0627\u0646 \u0648 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0645\u0648\u0633\u06cc\u0642\u06cc \u0631\u0627 \u0628\u0627 \u0641\u0631\u0645\u062a \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0627\u06cc\u062c\u0627\u062f \u060c \u0627\u0635\u0644\u0627\u062d \u0648 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc \u06a9\u0646\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u060c \u0645\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u067e\u0627\u06cc\u062a\u0648\u0646 \u0642\u062f\u0645 \u0645\u06cc \u0632\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":99813,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media2.dev.to\/dynamic\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozsvm4nxpqoyd0eew3wj.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-99812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/99812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=99812"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/99812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/99813"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=99812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=99812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=99812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}