<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mido | You Look Too Cool</title>
	<atom:link href="https://stabucky.com/wp/archives/tag/mido/feed" rel="self" type="application/rss+xml" />
	<link>https://stabucky.com/wp</link>
	<description>ゆるくつくる stabuckyのブログ</description>
	<lastBuildDate>Wed, 05 Mar 2025 11:48:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://stabucky.com/wp/wp-content/uploads/2024/05/cropped-stabucky-32x32.png</url>
	<title>Mido | You Look Too Cool</title>
	<link>https://stabucky.com/wp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Mido入門</title>
		<link>https://stabucky.com/wp/archives/16109</link>
					<comments>https://stabucky.com/wp/archives/16109#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Thu, 21 Sep 2023 10:11:08 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Mido]]></category>
		<category><![CDATA[入門]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=16109</guid>

					<description><![CDATA[PythonでMIDIファイルを生成することができるライブラリ「Mido」の使い方についてメモします。 目次 準備基本基本の説明音符の説明 準備 Midoをインストールします。 $ pip install mido 基本 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PythonでMIDIファイルを生成することができるライブラリ「Mido」の使い方についてメモします。<span id="more-16109"></span></p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">準備</a></li><li><a href="#toc2" tabindex="0">基本</a></li><li><a href="#toc3" tabindex="0">基本の説明</a></li><li><a href="#toc4" tabindex="0">音符の説明</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">準備</span></h2>
<p>Midoをインストールします。</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$ pip install mido</div></div>
<h2><span id="toc2">基本</span></h2>
<p>下のコードは「ドレミファ」と鳴らすMIDIファイルを生成します。</p>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;height:400px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #ff7700;font-weight:bold;">import</span> mido<br />
<span style="color: #ff7700;font-weight:bold;">from</span> mido <span style="color: #ff7700;font-weight:bold;">import</span> Message<span style="color: #66cc66;">,</span> MidiFile<span style="color: #66cc66;">,</span> MidiTrack<span style="color: #66cc66;">,</span>MetaMessage<br />
<br />
bpm <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">150</span><br />
program <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">41</span><br />
fn_midi <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;sample.mid&quot;</span><br />
<br />
mid <span style="color: #66cc66;">=</span> MidiFile<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
track <span style="color: #66cc66;">=</span> MidiTrack<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'program_change'</span><span style="color: #66cc66;">,</span> program<span style="color: #66cc66;">=</span>program<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>MetaMessage<span style="color: black;">&#40;</span><span style="color: #483d8b;">'set_tempo'</span><span style="color: #66cc66;">,</span> tempo<span style="color: #66cc66;">=</span>mido.<span style="color: black;">bpm2tempo</span><span style="color: black;">&#40;</span>bpm<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_on'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">60</span><span style="color: #66cc66;">,</span> velocity<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_off'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">60</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">360</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_on'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">62</span><span style="color: #66cc66;">,</span> velocity<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">120</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_off'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">62</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">360</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_on'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span> velocity<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">120</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_off'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">360</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_on'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">65</span><span style="color: #66cc66;">,</span> velocity<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">120</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_off'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">65</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">360</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
mid.<span style="color: black;">tracks</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>track<span style="color: black;">&#41;</span><br />
<br />
mid.<span style="color: black;">save</span><span style="color: black;">&#40;</span>fn_midi<span style="color: black;">&#41;</span></div></div>
<p>生成したMIDIファイルは次のとおりです。</p>
<p><a href="https://stabucky.com/wp/wp-content/uploads/2023/09/sample.mid">sample.mid</a></p>
<p>MIDIファイルをWAVファイルに変換しました。</p>
<audio class="wp-audio-shortcode" id="audio-16109-1" preload="none" style="width: 100%;" controls="controls"><source type="audio/wav" src="https://stabucky.com/wp/wp-content/uploads/2023/09/sample.wav?_=1" /><a href="https://stabucky.com/wp/wp-content/uploads/2023/09/sample.wav">https://stabucky.com/wp/wp-content/uploads/2023/09/sample.wav</a></audio>
<h2><span id="toc3">基本の説明</span></h2>
<p>変数は次のとおりです。<br />
bpmでテンポを指定します。<br />
programで音色を指定します。41はバイオリンです。<br />
fn_midiで生成ファイル名を指定します。</p>
<p>MidiFileでMIDIファイルを作って、MidiTrackでトラックを作り、トラックに命令を次々に追加していくイメージです。</p>
<h2><span id="toc4">音符の説明</span></h2>
<p>note_onとnote_offで音符を追加します。<br />
noteは音の高さを表します。60はドです。<br />
velocityは音の強さ、大きさを表します。<br />
timeが音を出すタイミングです。単位はティックです。デフォルトでは一拍が480ティックに相当します。<br />
このtimeがわかりにくいです。<br />
図で表すと次のとおりです。</p>
<p><svg width="400" height="200" viewBox="-20 -10 420 210">
<line x1="0" y1="0" x2="0" y2="200" stroke="silver" stroke-width="1" />
<line x1="100" y1="0" x2="100" y2="200" stroke="silver" stroke-width="1" />
<line x1="200" y1="0" x2="200" y2="200" stroke="silver" stroke-width="1" />
<line x1="300" y1="0" x2="300" y2="200" stroke="silver" stroke-width="1" />
<line x1="400" y1="0" x2="400" y2="200" stroke="silver" stroke-width="1" />
<rect x="0" y="120" width="75" height="20" fill="blue" stroke="lightblue" stroke-width="3" />
<rect x="100" y="80" width="75" height="20" fill="blue" stroke="lightblue" stroke-width="3" />
<rect x="200" y="40" width="75" height="20" fill="blue" stroke="lightblue" stroke-width="3" />
<rect x="300" y="20" width="75" height="20" fill="blue" stroke="lightblue" stroke-width="3" />
<line x1="0" y1="170" x2="75" y2="170" stroke="blue" stroke-width="3" />
<line x1="75" y1="170" x2="100" y2="170" stroke="red" stroke-width="3" />
<line x1="100" y1="170" x2="175" y2="170" stroke="blue" stroke-width="3" />
<line x1="175" y1="170" x2="200" y2="170" stroke="red" stroke-width="3" />
<line x1="200" y1="170" x2="275" y2="170" stroke="blue" stroke-width="3" />
<line x1="275" y1="170" x2="300" y2="170" stroke="red" stroke-width="3" />
<line x1="300" y1="170" x2="375" y2="170" stroke="blue" stroke-width="3" />
<line x1="375" y1="170" x2="400" y2="170" stroke="red" stroke-width="3" />
<text x="0" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">0</text>
<text x="38" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">360</text>
<text x="88" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">120</text>
<text x="138" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">360</text>
<text x="188" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">120</text>
<text x="238" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">360</text>
<text x="288" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">120</text>
<text x="338" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">360</text>
<text x="388" y="178" fill="black" text-anchor="middle" dominant-baseline="hanging" font-size="16">120</text>
<text x="0" y="120" fill="black" text-anchor="end" dominant-baseline="hanging" font-size="16">60</text>
<text x="100" y="80" fill="black" text-anchor="end" dominant-baseline="hanging" font-size="16">62</text>
<text x="200" y="40" fill="black" text-anchor="end" dominant-baseline="hanging" font-size="16">64</text>
<text x="300" y="20" fill="black" text-anchor="end" dominant-baseline="hanging" font-size="16">65</text>
</svg></p>
<p>考え方としては「timeの分だけ待って音を出す」と「timeの分だけ待って音を止める」の繰り返しです。</p>
<p>下は1音目のドです。<br />
最初なので「0ティック待って音を出す」「360ティック待って音を止める」となります。</p>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_on'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">60</span><span style="color: #66cc66;">,</span> velocity<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_off'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">60</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">360</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div></div>
<p>下は2音目のレです。<br />
前の音の続きで「120ティック待って音を出す」「360ティック待って音を止める」となります。</p>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_on'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">62</span><span style="color: #66cc66;">,</span> velocity<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">120</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
track.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Message<span style="color: black;">&#40;</span><span style="color: #483d8b;">'note_off'</span><span style="color: #66cc66;">,</span> note<span style="color: #66cc66;">=</span><span style="color: #ff4500;">62</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">360</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/16109/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://stabucky.com/wp/wp-content/uploads/2023/09/sample.mid" length="82" type="audio/midi" />
<enclosure url="https://stabucky.com/wp/wp-content/uploads/2023/09/sample.wav" length="0" type="audio/wav" />

			</item>
	</channel>
</rss>
