midicat 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d02b099c830f00e3e8930bcfad9528f4b080ebe6
4
- data.tar.gz: 9861e9f2e1aa46280db3d5c6382893245a71a4fc
3
+ metadata.gz: 24807f126d4e82ea5443eec40861ecd0e7d6bd10
4
+ data.tar.gz: 9420baa64ce470b5c42ef5d8fe7300db06bb3f8e
5
5
  SHA512:
6
- metadata.gz: 0701b9ccaef4c5902ac9264cd1006dc132c360d2c4a6ed6f8a3a1d61801c701458d752b1342e924219598ac2ced475ceae78b64d7922d25eef060f2f32501c9c
7
- data.tar.gz: 6cb09cc075a40384f097154c23e1bb85cc0825a0a760625be64dfd309487000fcb9f2a8a304054adb4be0b56a2f59d1bdcbc649460beb845f479b0227014a0cb
6
+ metadata.gz: 53ec2ffd54d7fa2e433725962867764c7465a3191b7bc2e5d619e7514668c1ae1847a670e2d1223072196b71c34e16747229e565b1af4eeffcdf1bc64d4dc500
7
+ data.tar.gz: 3d54b7fbac53f388449c455f98e485a516e3532d1b7886b9c6a5943f5d69ee80d2fa1be568faf88043308beb37035dd6c3fd38e68aec704b0c7a8cdbde222472
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- midicat (0.0.3)
4
+ midicat (0.0.4)
5
5
  midi-nibbler
6
6
  unimidi
7
7
 
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # midicat
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/midicat.svg)](http://badge.fury.io/rb/midicat)
4
+
3
5
  cat/tailf for MIDI input events
4
6
 
5
7
  ![demo screen](./demo.gif)
@@ -1,65 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'unimidi'
4
- require 'nibbler'
5
-
6
3
  require 'midicat'
7
4
 
8
- devices = []
9
- threads = []
10
- data = []
11
- timestamps = []
12
- ni = Nibbler.new
13
-
14
- def format_mes(message)
15
- if message.is_a? MIDIMessage::ControlChange
16
- "Ch.#{message.channel}.#{message.index} -> #{message.value}"
17
- elsif message.is_a? MIDIMessage::NoteOn
18
- "Ch.#{message.channel}.#{message.name} ON @ #{message.velocity}"
19
- elsif message.is_a? MIDIMessage::NoteOff
20
- "Ch.#{message.channel}.#{message.name} OFF @ #{message.velocity}"
21
- elsif message.is_a? MIDIMessage::SystemExclusive::Message
22
- "SysEx. #{message.data.to_s}"
23
- else
24
- message
25
- end
26
- end
27
-
28
5
  puts <<_EOM_
29
- /\\
30
- ) ( ') midicat #{Midicat::VERSION}
31
- ( / ) Ctrl-C to exit
32
- \\(__)|
33
6
 
34
- _EOM_
7
+ /\\ ___
8
+ ) ( ') |___| midicat #{Midicat::VERSION}
9
+ ( / ) _| _| Ctrl-C to exit
10
+ \\(__)| (@) (@)
35
11
 
36
- UniMIDI::Input.all.each_with_index do |d, i|
37
- puts d.pretty_name
38
- devices[i] = d.open
39
- ii = 0
40
- threads << Thread.new do
41
- loop do
42
- data[i] = d.gets
43
- data[i].each do |dd|
44
- timestamps[i] = sprintf "%12.4f", dd[:timestamp]
45
- ms = ni.parse(*dd[:data])
46
- if ms.is_a? Array
47
- ms.each do |mss|
48
- puts "#{timestamps[i]} #{d.name} #{format_mes mss}"
49
- end
50
- else
51
- puts "#{timestamps[i]} #{d.name} #{format_mes ms}"
52
- end
53
- end
54
- end
55
- end
56
- end
12
+ _EOM_
57
13
 
58
- if threads.size != 0
59
- threads.each do |t|
60
- t.join
61
- end
62
- else
63
- puts "no MIDI devices found."
64
- puts "aborting"
65
- end
14
+ Midicat::Cli.new
@@ -1,3 +1,9 @@
1
+ require "unimidi"
2
+ require "nibbler"
3
+
4
+ require "midicat/formatter"
5
+ require "midicat/cli"
6
+
1
7
  require "midicat/version"
2
8
 
3
9
  module Midicat
@@ -0,0 +1,41 @@
1
+ module Midicat
2
+ class Cli
3
+ attr_reader :device
4
+
5
+ def initialize()
6
+ @ni = Nibbler.new
7
+
8
+ if UniMIDI::Input.all.length > 0
9
+ @device = UniMIDI::Input.gets
10
+ else
11
+ puts "no MIDI device found!"
12
+ exit! 1
13
+ end
14
+
15
+ unless @device.nil?
16
+ begin
17
+ mainloop @device.open
18
+ ensure
19
+ @device.close
20
+ end
21
+ end
22
+ end
23
+
24
+ def mainloop(device)
25
+ loop do
26
+ device.gets.each do |data|
27
+ timestamp = sprintf "%12.4f", data[:timestamp]
28
+
29
+ ms = @ni.parse(*data[:data])
30
+ if ms.is_a? Array
31
+ ms.each do |mss|
32
+ puts "#{timestamp} #{device.name} #{Midicat::Formatter::format mss}"
33
+ end
34
+ else
35
+ puts "#{timestamp} #{device.name} #{Midicat::Formatter::format ms}"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,17 @@
1
+ module Midicat
2
+ module Formatter
3
+ def self.format(message)
4
+ if message.is_a? MIDIMessage::ControlChange
5
+ "Ch.#{message.channel}.#{message.index} -> #{message.value}"
6
+ elsif message.is_a? MIDIMessage::NoteOn
7
+ "Ch.#{message.channel}.#{message.name} ON @ #{message.velocity}"
8
+ elsif message.is_a? MIDIMessage::NoteOff
9
+ "Ch.#{message.channel}.#{message.name} OFF @ #{message.velocity}"
10
+ elsif message.is_a? MIDIMessage::SystemExclusive::Message
11
+ "SysEx. #{message.data.to_s}"
12
+ else
13
+ message
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module Midicat
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: midicat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - polamjag
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-02 00:00:00.000000000 Z
11
+ date: 2015-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -97,6 +97,8 @@ files:
97
97
  - bin/midicat
98
98
  - demo.gif
99
99
  - lib/midicat.rb
100
+ - lib/midicat/cli.rb
101
+ - lib/midicat/formatter.rb
100
102
  - lib/midicat/version.rb
101
103
  - midicat.gemspec
102
104
  homepage: https://github.com/polamjag/midicat