webmidi 0.1.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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +73 -0
  5. data/Rakefile +48 -0
  6. data/lib/webmidi/access.rb +170 -0
  7. data/lib/webmidi/callback_subscription.rb +26 -0
  8. data/lib/webmidi/clock.rb +129 -0
  9. data/lib/webmidi/configuration.rb +43 -0
  10. data/lib/webmidi/error.rb +26 -0
  11. data/lib/webmidi/message/base.rb +64 -0
  12. data/lib/webmidi/message/channel.rb +238 -0
  13. data/lib/webmidi/message/parser.rb +308 -0
  14. data/lib/webmidi/message/system.rb +162 -0
  15. data/lib/webmidi/message/ump.rb +675 -0
  16. data/lib/webmidi/message.rb +154 -0
  17. data/lib/webmidi/middleware/base.rb +16 -0
  18. data/lib/webmidi/middleware/channel_map.rb +36 -0
  19. data/lib/webmidi/middleware/filter.rb +22 -0
  20. data/lib/webmidi/middleware/logger.rb +17 -0
  21. data/lib/webmidi/middleware/note_range_filter.rb +34 -0
  22. data/lib/webmidi/middleware/panic.rb +73 -0
  23. data/lib/webmidi/middleware/pipeline.rb +19 -0
  24. data/lib/webmidi/middleware/recorder.rb +123 -0
  25. data/lib/webmidi/middleware/split_by_channel.rb +66 -0
  26. data/lib/webmidi/middleware/stack.rb +55 -0
  27. data/lib/webmidi/middleware/timing_gate.rb +58 -0
  28. data/lib/webmidi/middleware/transpose.rb +30 -0
  29. data/lib/webmidi/middleware/velocity_clamp.rb +37 -0
  30. data/lib/webmidi/middleware/velocity_scale.rb +55 -0
  31. data/lib/webmidi/middleware.rb +21 -0
  32. data/lib/webmidi/music/chord.rb +90 -0
  33. data/lib/webmidi/music/note.rb +102 -0
  34. data/lib/webmidi/music/rhythm.rb +92 -0
  35. data/lib/webmidi/music/scale.rb +85 -0
  36. data/lib/webmidi/music.rb +24 -0
  37. data/lib/webmidi/network/apple_midi.rb +189 -0
  38. data/lib/webmidi/network/osc.rb +205 -0
  39. data/lib/webmidi/network/rtp.rb +410 -0
  40. data/lib/webmidi/network.rb +10 -0
  41. data/lib/webmidi/port/base.rb +89 -0
  42. data/lib/webmidi/port/input.rb +158 -0
  43. data/lib/webmidi/port/map.rb +65 -0
  44. data/lib/webmidi/port/output.rb +208 -0
  45. data/lib/webmidi/port.rb +11 -0
  46. data/lib/webmidi/smf/event.rb +206 -0
  47. data/lib/webmidi/smf/reader.rb +237 -0
  48. data/lib/webmidi/smf/sequence.rb +135 -0
  49. data/lib/webmidi/smf/tempo_map.rb +107 -0
  50. data/lib/webmidi/smf/track.rb +130 -0
  51. data/lib/webmidi/smf/writer.rb +121 -0
  52. data/lib/webmidi/smf.rb +13 -0
  53. data/lib/webmidi/transport/adapter.rb +46 -0
  54. data/lib/webmidi/transport/base.rb +59 -0
  55. data/lib/webmidi/transport/device_info.rb +7 -0
  56. data/lib/webmidi/transport/null.rb +81 -0
  57. data/lib/webmidi/transport/virtual.rb +184 -0
  58. data/lib/webmidi/transport.rb +80 -0
  59. data/lib/webmidi/version.rb +5 -0
  60. data/lib/webmidi/virtual/loopback.rb +45 -0
  61. data/lib/webmidi/virtual/port.rb +48 -0
  62. data/lib/webmidi/virtual.rb +9 -0
  63. data/lib/webmidi.rb +19 -0
  64. data/webmidi.gemspec +32 -0
  65. metadata +108 -0
data/lib/webmidi.rb ADDED
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "webmidi/version"
4
+ require_relative "webmidi/error"
5
+ require_relative "webmidi/callback_subscription"
6
+ require_relative "webmidi/configuration"
7
+ require_relative "webmidi/message"
8
+ require_relative "webmidi/transport"
9
+ require_relative "webmidi/port"
10
+ require_relative "webmidi/access"
11
+ require_relative "webmidi/virtual"
12
+ require_relative "webmidi/smf"
13
+ require_relative "webmidi/middleware"
14
+ require_relative "webmidi/music"
15
+ require_relative "webmidi/network"
16
+ require_relative "webmidi/clock"
17
+
18
+ module Webmidi
19
+ end
data/webmidi.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/webmidi/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "webmidi"
7
+ spec.version = Webmidi::VERSION
8
+ spec.authors = ["Yudai Takada"]
9
+ spec.email = ["t.yudai92@gmail.com"]
10
+
11
+ spec.summary = "A Ruby MIDI library inspired by the W3C Web MIDI API"
12
+ spec.description = "Webmidi brings the W3C Web MIDI API design to Ruby with idiomatic DSL, " \
13
+ "MIDI message parsing, Standard MIDI File I/O, middleware pipeline, " \
14
+ "music theory DSL, network MIDI (RTP/OSC), and MIDI 2.0 UMP support."
15
+ spec.homepage = "https://github.com/ydah/webmidi"
16
+ spec.license = "MIT"
17
+ spec.required_ruby_version = ">= 3.2.0"
18
+
19
+ spec.metadata["source_code_uri"] = "https://github.com/ydah/webmidi"
20
+ spec.metadata["changelog_uri"] = "https://github.com/ydah/webmidi/blob/main/CHANGELOG.md"
21
+ spec.metadata["rubygems_mfa_required"] = "true"
22
+
23
+ File.basename(__FILE__)
24
+ spec.files = IO.popen(%w[git ls-files -z], chdir: __dir__, err: IO::NULL) do |ls|
25
+ ls.readlines("\x0", chomp: true).reject do |f|
26
+ f.start_with?(*%w[bin/ Gemfile .gitignore .rspec spec/ .github/ .idea/])
27
+ end
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: webmidi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yudai Takada
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
12
+ description: Webmidi brings the W3C Web MIDI API design to Ruby with idiomatic DSL,
13
+ MIDI message parsing, Standard MIDI File I/O, middleware pipeline, music theory
14
+ DSL, network MIDI (RTP/OSC), and MIDI 2.0 UMP support.
15
+ email:
16
+ - t.yudai92@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - CHANGELOG.md
22
+ - LICENSE.txt
23
+ - README.md
24
+ - Rakefile
25
+ - lib/webmidi.rb
26
+ - lib/webmidi/access.rb
27
+ - lib/webmidi/callback_subscription.rb
28
+ - lib/webmidi/clock.rb
29
+ - lib/webmidi/configuration.rb
30
+ - lib/webmidi/error.rb
31
+ - lib/webmidi/message.rb
32
+ - lib/webmidi/message/base.rb
33
+ - lib/webmidi/message/channel.rb
34
+ - lib/webmidi/message/parser.rb
35
+ - lib/webmidi/message/system.rb
36
+ - lib/webmidi/message/ump.rb
37
+ - lib/webmidi/middleware.rb
38
+ - lib/webmidi/middleware/base.rb
39
+ - lib/webmidi/middleware/channel_map.rb
40
+ - lib/webmidi/middleware/filter.rb
41
+ - lib/webmidi/middleware/logger.rb
42
+ - lib/webmidi/middleware/note_range_filter.rb
43
+ - lib/webmidi/middleware/panic.rb
44
+ - lib/webmidi/middleware/pipeline.rb
45
+ - lib/webmidi/middleware/recorder.rb
46
+ - lib/webmidi/middleware/split_by_channel.rb
47
+ - lib/webmidi/middleware/stack.rb
48
+ - lib/webmidi/middleware/timing_gate.rb
49
+ - lib/webmidi/middleware/transpose.rb
50
+ - lib/webmidi/middleware/velocity_clamp.rb
51
+ - lib/webmidi/middleware/velocity_scale.rb
52
+ - lib/webmidi/music.rb
53
+ - lib/webmidi/music/chord.rb
54
+ - lib/webmidi/music/note.rb
55
+ - lib/webmidi/music/rhythm.rb
56
+ - lib/webmidi/music/scale.rb
57
+ - lib/webmidi/network.rb
58
+ - lib/webmidi/network/apple_midi.rb
59
+ - lib/webmidi/network/osc.rb
60
+ - lib/webmidi/network/rtp.rb
61
+ - lib/webmidi/port.rb
62
+ - lib/webmidi/port/base.rb
63
+ - lib/webmidi/port/input.rb
64
+ - lib/webmidi/port/map.rb
65
+ - lib/webmidi/port/output.rb
66
+ - lib/webmidi/smf.rb
67
+ - lib/webmidi/smf/event.rb
68
+ - lib/webmidi/smf/reader.rb
69
+ - lib/webmidi/smf/sequence.rb
70
+ - lib/webmidi/smf/tempo_map.rb
71
+ - lib/webmidi/smf/track.rb
72
+ - lib/webmidi/smf/writer.rb
73
+ - lib/webmidi/transport.rb
74
+ - lib/webmidi/transport/adapter.rb
75
+ - lib/webmidi/transport/base.rb
76
+ - lib/webmidi/transport/device_info.rb
77
+ - lib/webmidi/transport/null.rb
78
+ - lib/webmidi/transport/virtual.rb
79
+ - lib/webmidi/version.rb
80
+ - lib/webmidi/virtual.rb
81
+ - lib/webmidi/virtual/loopback.rb
82
+ - lib/webmidi/virtual/port.rb
83
+ - webmidi.gemspec
84
+ homepage: https://github.com/ydah/webmidi
85
+ licenses:
86
+ - MIT
87
+ metadata:
88
+ source_code_uri: https://github.com/ydah/webmidi
89
+ changelog_uri: https://github.com/ydah/webmidi/blob/main/CHANGELOG.md
90
+ rubygems_mfa_required: 'true'
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 3.2.0
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubygems_version: 4.0.6
106
+ specification_version: 4
107
+ summary: A Ruby MIDI library inspired by the W3C Web MIDI API
108
+ test_files: []