midi-parser 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.version +6 -0
- data/.yardopts +6 -0
- data/LICENSE +159 -668
- data/README.md +7 -15
- data/examples/usage.rb +2 -24
- data/lib/midi-parser/data_processor.rb +44 -18
- data/lib/midi-parser/message_builder.rb +36 -1
- data/lib/midi-parser/parser.rb +48 -16
- data/lib/midi-parser/session.rb +86 -11
- data/lib/midi-parser/type_conversion.rb +70 -27
- data/lib/midi-parser/version.rb +3 -0
- data/lib/midi-parser.rb +49 -2
- data/midi-parser.gemspec +9 -8
- metadata +52 -4
data/lib/midi-parser.rb
CHANGED
|
@@ -18,11 +18,58 @@ require 'midi-parser/session'
|
|
|
18
18
|
|
|
19
19
|
require_relative 'midi-parser/version'
|
|
20
20
|
|
|
21
|
+
# A Ruby parser for raw MIDI data that converts bytes, hex strings, and nibbles
|
|
22
|
+
# into MIDIEvents message objects.
|
|
21
23
|
#
|
|
22
|
-
#
|
|
24
|
+
# MIDIParser accepts various input formats and incrementally parses MIDI data,
|
|
25
|
+
# supporting running status and System Exclusive messages.
|
|
26
|
+
#
|
|
27
|
+
# This library is part of the MusaDSL MIDI suite:
|
|
28
|
+
# - {https://github.com/javier-sy/midi-events MIDI Events} - MIDI message representation
|
|
29
|
+
# - {https://github.com/javier-sy/midi-parser MIDI Parser} - MIDI data parsing (this library)
|
|
30
|
+
# - {https://github.com/javier-sy/midi-communications MIDI Communications} - MIDI I/O
|
|
31
|
+
#
|
|
32
|
+
# @example Basic usage - create a parser and parse a complete message
|
|
33
|
+
# parser = MIDIParser.new
|
|
34
|
+
# message = parser.parse(0x90, 0x40, 0x40)
|
|
35
|
+
# # => #<MIDIEvents::NoteOn @channel=0, @note=64, @velocity=64>
|
|
36
|
+
#
|
|
37
|
+
# @example Parsing from hex string
|
|
38
|
+
# parser = MIDIParser.new
|
|
39
|
+
# message = parser.parse("904040")
|
|
40
|
+
# # => #<MIDIEvents::NoteOn @channel=0, @note=64, @velocity=64>
|
|
41
|
+
#
|
|
42
|
+
# @example Incremental parsing (piece by piece)
|
|
43
|
+
# parser = MIDIParser.new
|
|
44
|
+
# parser.parse("90") # => []
|
|
45
|
+
# parser.parse("40") # => []
|
|
46
|
+
# parser.parse("40") # => [#<MIDIEvents::NoteOn ...>]
|
|
47
|
+
#
|
|
48
|
+
# @example Using running status
|
|
49
|
+
# parser = MIDIParser.new
|
|
50
|
+
# parser.parse(0x90, 0x40, 0x40) # First note
|
|
51
|
+
# parser.parse(0x40, 0x50) # Second note using running status
|
|
52
|
+
#
|
|
53
|
+
# @example Checking the buffer
|
|
54
|
+
# parser = MIDIParser.new
|
|
55
|
+
# parser.parse("90", "40")
|
|
56
|
+
# parser.buffer # => ["9", "0", "4", "0"]
|
|
57
|
+
# parser.buffer_s # => "9040"
|
|
58
|
+
#
|
|
59
|
+
# @see Session The main parsing session class
|
|
60
|
+
# @see https://github.com/javier-sy/midi-events MIDIEvents library
|
|
23
61
|
#
|
|
62
|
+
# @api public
|
|
24
63
|
module MIDIParser
|
|
25
|
-
#
|
|
64
|
+
# Creates a new parser session.
|
|
65
|
+
#
|
|
66
|
+
# This is a convenience method that instantiates a new {Session} object.
|
|
67
|
+
#
|
|
68
|
+
# @return [Session] a new parser session
|
|
69
|
+
#
|
|
70
|
+
# @example
|
|
71
|
+
# parser = MIDIParser.new
|
|
72
|
+
# parser.parse(0x90, 0x40, 0x40)
|
|
26
73
|
def self.new(...)
|
|
27
74
|
Session.new(...)
|
|
28
75
|
end
|
data/midi-parser.gemspec
CHANGED
|
@@ -14,17 +14,18 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
|
|
15
15
|
s.required_ruby_version = '>= 2.7'
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# "changelog_uri" => ""
|
|
23
|
-
#}
|
|
17
|
+
s.metadata = {
|
|
18
|
+
'homepage_uri' => s.homepage,
|
|
19
|
+
'source_code_uri' => s.homepage,
|
|
20
|
+
'documentation_uri' => 'https://www.rubydoc.info/gems/midi-parser'
|
|
21
|
+
}
|
|
24
22
|
|
|
25
|
-
s.add_runtime_dependency 'midi-events', '~> 0.
|
|
23
|
+
s.add_runtime_dependency 'midi-events', '~> 0.7'
|
|
26
24
|
|
|
27
25
|
s.add_development_dependency 'minitest', '~>5', '>= 5.14.4'
|
|
28
26
|
s.add_development_dependency 'rake', '~>13', '>= 13.0.6'
|
|
29
27
|
s.add_development_dependency 'shoulda-context', '~>2', '>= 2.0.0'
|
|
28
|
+
s.add_development_dependency 'yard', '~> 0.9'
|
|
29
|
+
s.add_development_dependency 'redcarpet', '~> 3.6'
|
|
30
|
+
s.add_development_dependency 'webrick', '~> 1.8'
|
|
30
31
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: midi-parser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Javier Sánchez Yeste
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '0.
|
|
18
|
+
version: '0.7'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '0.
|
|
25
|
+
version: '0.7'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: minitest
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -83,6 +83,48 @@ dependencies:
|
|
|
83
83
|
- - ">="
|
|
84
84
|
- !ruby/object:Gem::Version
|
|
85
85
|
version: 2.0.0
|
|
86
|
+
- !ruby/object:Gem::Dependency
|
|
87
|
+
name: yard
|
|
88
|
+
requirement: !ruby/object:Gem::Requirement
|
|
89
|
+
requirements:
|
|
90
|
+
- - "~>"
|
|
91
|
+
- !ruby/object:Gem::Version
|
|
92
|
+
version: '0.9'
|
|
93
|
+
type: :development
|
|
94
|
+
prerelease: false
|
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
96
|
+
requirements:
|
|
97
|
+
- - "~>"
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: '0.9'
|
|
100
|
+
- !ruby/object:Gem::Dependency
|
|
101
|
+
name: redcarpet
|
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
|
103
|
+
requirements:
|
|
104
|
+
- - "~>"
|
|
105
|
+
- !ruby/object:Gem::Version
|
|
106
|
+
version: '3.6'
|
|
107
|
+
type: :development
|
|
108
|
+
prerelease: false
|
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
110
|
+
requirements:
|
|
111
|
+
- - "~>"
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
version: '3.6'
|
|
114
|
+
- !ruby/object:Gem::Dependency
|
|
115
|
+
name: webrick
|
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
|
117
|
+
requirements:
|
|
118
|
+
- - "~>"
|
|
119
|
+
- !ruby/object:Gem::Version
|
|
120
|
+
version: '1.8'
|
|
121
|
+
type: :development
|
|
122
|
+
prerelease: false
|
|
123
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
124
|
+
requirements:
|
|
125
|
+
- - "~>"
|
|
126
|
+
- !ruby/object:Gem::Version
|
|
127
|
+
version: '1.8'
|
|
86
128
|
description: MIDI Parser is a library for parsing MIDI Event Messages received from
|
|
87
129
|
any MIDI device through other libraries such as midi-communications or unimidi
|
|
88
130
|
email: javier.sy@gmail.com
|
|
@@ -91,6 +133,8 @@ extensions: []
|
|
|
91
133
|
extra_rdoc_files: []
|
|
92
134
|
files:
|
|
93
135
|
- ".gitignore"
|
|
136
|
+
- ".version"
|
|
137
|
+
- ".yardopts"
|
|
94
138
|
- Gemfile
|
|
95
139
|
- LICENSE
|
|
96
140
|
- LICENSE.nibbler
|
|
@@ -103,11 +147,15 @@ files:
|
|
|
103
147
|
- lib/midi-parser/parser.rb
|
|
104
148
|
- lib/midi-parser/session.rb
|
|
105
149
|
- lib/midi-parser/type_conversion.rb
|
|
150
|
+
- lib/midi-parser/version.rb
|
|
106
151
|
- midi-parser.gemspec
|
|
107
152
|
homepage: https://github.com/javier-sy/midi-parser
|
|
108
153
|
licenses:
|
|
109
154
|
- LGPL-3.0-or-later
|
|
110
|
-
metadata:
|
|
155
|
+
metadata:
|
|
156
|
+
homepage_uri: https://github.com/javier-sy/midi-parser
|
|
157
|
+
source_code_uri: https://github.com/javier-sy/midi-parser
|
|
158
|
+
documentation_uri: https://www.rubydoc.info/gems/midi-parser
|
|
111
159
|
rdoc_options: []
|
|
112
160
|
require_paths:
|
|
113
161
|
- lib
|