<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Midish_command-line_MIDI_sequencer</id>
	<title>Midish command-line MIDI sequencer - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Midish_command-line_MIDI_sequencer"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Midish_command-line_MIDI_sequencer&amp;action=history"/>
	<updated>2026-09-20T19:29:00Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=Midish_command-line_MIDI_sequencer&amp;diff=250688&amp;oldid=prev</id>
		<title>Joan: /* Time Structure */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Midish_command-line_MIDI_sequencer&amp;diff=250688&amp;oldid=prev"/>
		<updated>2013-09-23T18:26:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Time Structure&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
=Instal.lació=&lt;br /&gt;
*http://www.midish.org/&lt;br /&gt;
Midish is an open-source MIDI sequencer/filter for Unix-like operating systems (tested on OpenBSD and Linux). Implemented as a simple command-line interpreter (like a shell) it's intended to be lightweight, fast and reliable for real-time performance. &lt;br /&gt;
&lt;br /&gt;
Important features:&lt;br /&gt;
*real-time MIDI filtering/routing (controller mapping, keyboard splitting, ...)&lt;br /&gt;
*track recording, metronome&lt;br /&gt;
*track editing (insert, copy, delete, ...)&lt;br /&gt;
*progressive track quantization&lt;br /&gt;
*multiple MIDI devices handling&lt;br /&gt;
*synchronization to external audio and MIDI software/hardware&lt;br /&gt;
*import and export of standard MIDI files&lt;br /&gt;
*tempo and time-signature changes&lt;br /&gt;
*system exclusive messages handling &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libreadline-dev&lt;br /&gt;
&lt;br /&gt;
$ cvs -d anoncvs@moule.caoua.org:/midish checkout -P midish&lt;br /&gt;
$ cd midish&lt;br /&gt;
$ ./configure&lt;br /&gt;
$ make&lt;br /&gt;
$ sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Funcionament=&lt;br /&gt;
'''midish''' és una solució purament ALSA. El primer que hem de fer és tenir clar els dispositius MIDI que utilitzaré (lectura i escriptura), i editar el fitxer de configuració. Amb aquest fitxer de configuració ''midish'' podrà establir les connexions:&lt;br /&gt;
&lt;br /&gt;
Arrenco el fluidsynth i un teclat midi, que són les eines que utilitzaré:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ fluidsynth -a alsa -m alsa_seq /home/joan/soundfonts/Unison.sf2 &lt;br /&gt;
$ vkeybd&lt;br /&gt;
&lt;br /&gt;
$ aconnect -io&lt;br /&gt;
client 0: 'System' [type=kernel]&lt;br /&gt;
    0 'Timer           '&lt;br /&gt;
    1 'Announce        '&lt;br /&gt;
client 14: 'Midi Through' [type=kernel]&lt;br /&gt;
    0 'Midi Through Port-0'&lt;br /&gt;
client 128: 'FLUID Synth (4753)' [type=user]&lt;br /&gt;
    0 'Synth input port (4753:0)'&lt;br /&gt;
client 129: 'Virtual Keyboard' [type=user]&lt;br /&gt;
    0 'Virtual Keyboard'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Editem el fitxer '''/etc/midishrc''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnew 0 &amp;quot;128:0&amp;quot; wo                # attach the module (fluidsynth) as dev number 0&lt;br /&gt;
dnew 1 &amp;quot;129:0&amp;quot; ro                # attach the keyboard (vkeybd) as dev number 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i millor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnew 0 &amp;quot;FLUID Synth (4753)&amp;quot; wo                # attach the module (fluidsynth) as dev number 0&lt;br /&gt;
dnew 1 &amp;quot;Virtual Keyboard&amp;quot; ro                # attach the keyboard (vkeybd) as dev number 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i ara ja puc arrencar el midish:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ rmidish&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''nota''': utilitzem ''rmidish'' en comptes de ''midish'': both midish and rmidish do the same thing. The only&lt;br /&gt;
difference is that rmidish has a slightly nicer interface&lt;br /&gt;
(prompt, command completion, history); it's a simple wrapper&lt;br /&gt;
around the midish binary using readline.&lt;br /&gt;
&lt;br /&gt;
Per escoltar la cançó que ve de demo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
send EOF character (control-D) to quit&lt;br /&gt;
[0000:00]&amp;gt; load &amp;quot;sample.sng&amp;quot;         # load the file&lt;br /&gt;
[0000:00]&amp;gt; p                         # start playback&lt;br /&gt;
[0004:02]&amp;gt; s                         # stop playback&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i ja puc començar a gravar:&lt;br /&gt;
&lt;br /&gt;
The following session shows how to record a simple track. First, we define a filter named ''piano'' that routes any event from device 1, channel 0 (input channel of the keyboard) to device 0, channel 0 (output channel of the sound module). Then we create a new track ''pi1'', we start recording and we save the song into a file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
send EOF character (control-D) to quit&lt;br /&gt;
[0000:00]&amp;gt; fnew piano                        # create filter &amp;quot;piano&amp;quot;&lt;br /&gt;
[0000:00]&amp;gt; fmap {any {1 0}} {any {0 0}}      # dev=1,ch=0 -&amp;gt; dev=0,ch=5&lt;br /&gt;
[0000:00]&amp;gt; tnew pi1                          # create track &amp;quot;pi1&amp;quot;&lt;br /&gt;
[0000:00]&amp;gt; r                                 # start recording&lt;br /&gt;
[0006:02]&amp;gt; s                                 # stop recording&lt;br /&gt;
[0000:00]&amp;gt; save &amp;quot;mysong&amp;quot;                     # save the song into a file&lt;br /&gt;
[0000:00]&amp;gt;                                   # EOF (control-D) to quit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
El resultat és un fitxer amb format propi de midish:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# midish (unoffical release)&lt;br /&gt;
#&lt;br /&gt;
{&lt;br /&gt;
	tics_per_unit 96&lt;br /&gt;
	tempo_factor 256&lt;br /&gt;
	meta {&lt;br /&gt;
		timesig 4 24&lt;br /&gt;
		tempo 500000&lt;br /&gt;
	}&lt;br /&gt;
	songfilt piano {&lt;br /&gt;
		filt {&lt;br /&gt;
			evmap any {1 0} &amp;gt; any {0 0}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	songtrk pi1 {&lt;br /&gt;
		curfilt piano&lt;br /&gt;
		mute 0&lt;br /&gt;
		track {&lt;br /&gt;
			100&lt;br /&gt;
			non {0 0} 72 127&lt;br /&gt;
			4&lt;br /&gt;
			noff {0 0} 72 0&lt;br /&gt;
			23&lt;br /&gt;
			non {0 0} 69 127&lt;br /&gt;
			1&lt;br /&gt;
			noff {0 0} 69 0&lt;br /&gt;
			non {0 0} 70 127&lt;br /&gt;
			3&lt;br /&gt;
			noff {0 0} 70 0&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	curtrk pi1&lt;br /&gt;
	curfilt piano&lt;br /&gt;
	curpos 0&lt;br /&gt;
	curlen 0&lt;br /&gt;
	curquant 0&lt;br /&gt;
	curev any {0..15 0..15}&lt;br /&gt;
	metro {&lt;br /&gt;
		mask	rec&lt;br /&gt;
		lo	non {0 9} 68 90&lt;br /&gt;
		hi	non {0 9} 67 127&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Aleshores la cançó que acabem de crear la podem exportar a un fitxer MIDI (SMF):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ export &amp;quot;mysong.mid&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
que la podem obrir amb el Muscscore, i allà la podem modificar.&lt;br /&gt;
&lt;br /&gt;
Podem donar àlias als dispositius que estem utilitzant. Aquests àlies els podem definir en la línia de comandes del ''rmidish'', però millor fer-ho en el fitxer de configuració /etc/midishrc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnew 0 &amp;quot;128:0&amp;quot; wo                # attach the module (fluidsynth) as dev number&lt;br /&gt;
dnew 1 &amp;quot;129:0&amp;quot; ro                # attach the keyboard (vkeybd) as dev number 1&lt;br /&gt;
#dnew 0 &amp;quot;FLUID Synth (4753)&amp;quot; wo                # attach the module (fluidsynth)&lt;br /&gt;
#dnew 1 &amp;quot;Virtual Keyboard&amp;quot; ro                # attach the keyboard (vkeybd) as &lt;br /&gt;
inew keyboard {1 0};&lt;br /&gt;
onew sinte {0 0};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i aleshores per gravar una cançó:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
send EOF character (control-D) to quit&lt;br /&gt;
[0000:00]&amp;gt; fnew piano                        # create filter &amp;quot;piano&amp;quot;&lt;br /&gt;
[0000:00]&amp;gt; fmap {any keyboard} {any sinte}&lt;br /&gt;
[0000:00]&amp;gt; tnew pi1                          # create track &amp;quot;pi1&amp;quot;&lt;br /&gt;
[0000:00]&amp;gt; r                                 # start recording&lt;br /&gt;
[0006:02]&amp;gt; s                                 # stop recording&lt;br /&gt;
[0000:00]&amp;gt; save &amp;quot;mysong&amp;quot;                     # save the song into a file&lt;br /&gt;
[0000:00]&amp;gt;                                   # EOF (control-D) to quit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En comptes d'utilitzar el mode '''r''' (recording), és util utilitzar el mode '''i''' (iddle, ''performance mode''), i aleshores s'envia l'entrada a la sortida.&lt;br /&gt;
==Filtres==&lt;br /&gt;
Per que soni alguna cosa, com a mínim he d'enviar el que arriba a l'entrada a la sortida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[0000:00]&amp;gt; fmap {any keyboard} {any sinte}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puc fer una transposició de notes. Per ex:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[0000:00]&amp;gt; fmap {any keyboard} {any sinte}&lt;br /&gt;
[0000:00]&amp;gt; fmap {note keyboard 1..100} {note sinte 4..103}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puc obtenir informació dels filtres aplicats, i també puc fer un reset dels filtres aplicats:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[0000:00]&amp;gt; finfo&lt;br /&gt;
{&lt;br /&gt;
	evmap any {1 0} &amp;gt; any {0 0}&lt;br /&gt;
	evmap note {1 0} 1..100 &amp;gt; note {0 0} 1..100&lt;br /&gt;
}&lt;br /&gt;
[0000:00]&amp;gt; freset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Per fer la transposició millor així:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[0000:00]&amp;gt; ftransp {any sinte} 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Time Structure=&lt;br /&gt;
''measure'' (compàs) is split in ''beats'', and ''beat'' is split in ''ticks''. La durada dels ''ticks'' està fixada pel ''tempo''. Per defecte:&lt;br /&gt;
*24 ticks per beat&lt;br /&gt;
*4 beats per measure (compàs)&lt;br /&gt;
*120 beats per minut&lt;br /&gt;
Així, per defecte una ''rodona'' són 96 beats.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si volem anar al compàs 3 farem:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
g 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==metrònom==&lt;br /&gt;
Té tres modes: ''off'' (deshabilitat), ''on'' (habilitat) i ''rec'' (habilitat en la gravació). Amb la comanda ''m'' podem canviar el mode. Per ex:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
m on&lt;br /&gt;
p     #reproduir&lt;br /&gt;
s     #aturar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Canvis de temps de compàs (time signature changes)==&lt;br /&gt;
Veure la documentació.&lt;br /&gt;
==Canvi de tempo==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
g 0    #go to measure 0 &lt;br /&gt;
t 100  #set tempo to 100bpm&lt;br /&gt;
g 2    #go to measure 2&lt;br /&gt;
t 180  #set tempo to 180bpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Creating scripts: batch mode=&lt;br /&gt;
*http://www.midish.org/manual.html#section_19&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>