midi-parser 0.4.1 → 0.5.1
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/.github/workflows/notify-plugin.yml +17 -0
- data/.gitignore +2 -1
- data/.version +6 -0
- data/.yardopts +6 -0
- data/LICENSE +159 -668
- data/README.md +8 -16
- 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 +10 -9
- metadata +54 -5
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
|
@@ -3,7 +3,7 @@ require_relative 'lib/midi-parser/version'
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = 'midi-parser'
|
|
5
5
|
s.version = MIDIParser::VERSION
|
|
6
|
-
s.date = '
|
|
6
|
+
s.date = '2026-09-07'
|
|
7
7
|
s.summary = 'A Ruby library for parsing MIDI Event Messages'
|
|
8
8
|
s.description = 'MIDI Parser is a library for parsing MIDI Event Messages received from any MIDI device through other libraries such as midi-communications or unimidi'
|
|
9
9
|
s.authors = ['Javier Sánchez Yeste']
|
|
@@ -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,13 +1,13 @@
|
|
|
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.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Javier Sánchez Yeste
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 2026-09-07 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: midi-events
|
|
@@ -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
|
|
@@ -90,7 +132,10 @@ executables: []
|
|
|
90
132
|
extensions: []
|
|
91
133
|
extra_rdoc_files: []
|
|
92
134
|
files:
|
|
135
|
+
- ".github/workflows/notify-plugin.yml"
|
|
93
136
|
- ".gitignore"
|
|
137
|
+
- ".version"
|
|
138
|
+
- ".yardopts"
|
|
94
139
|
- Gemfile
|
|
95
140
|
- LICENSE
|
|
96
141
|
- LICENSE.nibbler
|
|
@@ -103,11 +148,15 @@ files:
|
|
|
103
148
|
- lib/midi-parser/parser.rb
|
|
104
149
|
- lib/midi-parser/session.rb
|
|
105
150
|
- lib/midi-parser/type_conversion.rb
|
|
151
|
+
- lib/midi-parser/version.rb
|
|
106
152
|
- midi-parser.gemspec
|
|
107
153
|
homepage: https://github.com/javier-sy/midi-parser
|
|
108
154
|
licenses:
|
|
109
155
|
- LGPL-3.0-or-later
|
|
110
|
-
metadata:
|
|
156
|
+
metadata:
|
|
157
|
+
homepage_uri: https://github.com/javier-sy/midi-parser
|
|
158
|
+
source_code_uri: https://github.com/javier-sy/midi-parser
|
|
159
|
+
documentation_uri: https://www.rubydoc.info/gems/midi-parser
|
|
111
160
|
rdoc_options: []
|
|
112
161
|
require_paths:
|
|
113
162
|
- lib
|