midi-communications-macos 0.5.0 → 0.5.1

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
  SHA256:
3
- metadata.gz: 111e81c1d7cd52bb6b80e9e8f64d6081a5031e6488cbfeb8890fc54bd3127eb6
4
- data.tar.gz: fc8e6e3003d26e85746b1223ec65ff2cfed7fa9ebb3764673722a17f2cef6e66
3
+ metadata.gz: 3ced6ec8152e9e24a805d8ceff708fa9a18cf94adb03155569740e3324b8cb6f
4
+ data.tar.gz: 99e1fefe52df6117b865c120a3b0463a232d4aabe98f4373d4a5078d960ab802
5
5
  SHA512:
6
- metadata.gz: 75028a6098ba211ab581d5e3489c7f4100c4526cf26bf4f5933930f6d318fe6d92e7fe4e446ab61530b321161152118e1a43d7068e798180e36e08c8b78d5a36
7
- data.tar.gz: 244c2f3162f3f2cc191ec5a0b28e90ac1ebced0af0421b55d38b512f9cc053182fc103b026179ecd45227386bc5e4f0d2eeb3f61d7c318f58f39e2d14d0335b3
6
+ metadata.gz: a8b42bbe039f2d092d793289655930d050863b8d35dd1e5f3f4aec000a52b6d3e0c444a7e8a0cdb5103f284b8fdb8c8456a2f69e393b04dde54e5d4c867cad82
7
+ data.tar.gz: ca248f1723a511940f76c63fb21e87b40d56cac73edf36adcce08847a748fb1493494adfaa238d5b8cd3edf9ad7ee91049d219f787b2c2f8f516395921e459dc
data/Gemfile CHANGED
@@ -1,10 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- group :test do
4
- gem 'minitest', '~> 5.14', '>= 5.14.4'
5
- gem 'mocha', '~> 1.13', '>= 1.13.0'
6
- gem 'rake', '~> 13.0', '>= 13.0.6'
7
- gem 'shoulda-context', '~> 2.0', '>= 2.0.0'
8
- end
9
-
10
- gem 'ffi', '~> 1.15', '>= 1.15.4'
3
+ gemspec
data/README.md CHANGED
@@ -25,6 +25,7 @@ This library is based on [Ari Russo's](http://github.com/arirusso) library [ffi-
25
25
  * Generalized handling of different MIDI Message types (including SysEx)
26
26
  * Timestamped input events
27
27
  * Patch MIDI via software to other programs using IAC
28
+ * No events history and no buffers optimization
28
29
 
29
30
  ## Requirements
30
31
 
@@ -48,7 +49,7 @@ Otherwise
48
49
 
49
50
  [MIDI Communications MacOS Layer](https://github.com/javier-sy/midi-communications-macos) is mostly a clone of [ffi-coremidi](https://github.com/arirusso/ffi-coremidi) with some modifications:
50
51
  * Added locking behaviour when waiting midi events
51
- * Removed process history information logging (to reduce CPU usage in some scenarios)
52
+ * Removed buffering and process history information logging (to reduce CPU usage in some scenarios)
52
53
  * Improved MIDI devices name detection
53
54
  * Source updated to Ruby 2.7 code conventions (method keyword parameters instead of options = {}, hash keys as 'key:' instead of ':key =>', etc.)
54
55
  * Updated dependencies versions
@@ -76,15 +77,16 @@ that, **with some modifications**, I've been using in MusaDSL.
76
77
  After thinking about the best approach to publish MusaDSL
77
78
  I've decided to publish my own renamed version of the modified dependencies because:
78
79
 
80
+ * The original libraries have features
81
+ (buffering, very detailed logging and processing history information, not locking behaviour when waiting input midi messages)
82
+ that are not needed in MusaDSL and, in fact,
83
+ can degrade the performance on some use cases in MusaDSL.
84
+ * The requirements for **Musa DSL** users probably will evolve in time, so it will be easier to maintain an independent source code base.
79
85
  * Some differences on the approach of the modifications vs the original library doesn't allow to merge the modifications on the original libraries.
80
86
  * Then the renaming of the libraries is needed to avoid confusing existent users of the original libraries.
81
87
  * Due to some of the interdependencies of Ari Russo libraries,
82
88
  the modification and renaming on some of the low level libraries (ffi-coremidi, etc.)
83
89
  forces to modify and rename unimidi library.
84
- * The original libraries have features
85
- (very detailed logging and processing history information, not locking behaviour when waiting input midi messages)
86
- that are not needed in MusaDSL and, in fact,
87
- can degrade the performance on some use case scenarios in MusaDSL.
88
90
 
89
91
  All in all I have decided to publish a suite of libraries optimized for MusaDSL use case that also can be used by other people in their projects.
90
92
 
@@ -92,8 +94,8 @@ All in all I have decided to publish a suite of libraries optimized for MusaDSL
92
94
  | --- | --- | --- | --- |
93
95
  | MIDI Events representation | [MIDI Events](https://github.com/javier-sy/midi-events) | [MIDI Message](https://github.com/arirusso/midi-message) | removed parsing, small improvements |
94
96
  | MIDI Data parsing | [MIDI Parser](https://github.com/javier-sy/midi-parser) | [Nibbler](https://github.com/arirusso/nibbler) | removed process history information, minor optimizations |
95
- | MIDI communication with Instruments and Control Surfaces | [MIDI Communications](https://github.com/javier-sy/midi-communications) | [unimidi](https://github.com/arirusso/unimidi) | use of [MIDI Communications MacOS Layer](https://github.com/javier-sy/midi-communications-macos)
96
- | Low level MIDI interface to MacOS | [MIDI Communications MacOS Layer](https://github.com/javier-sy/midi-communications-macos) | [ffi-coremidi](https://github.com/arirusso/ffi-coremidi) | removed process history information, locking behaviour when waiting midi events, improved midi devices name detection, minor optimizations |
97
+ | MIDI communication with Instruments and Control Surfaces | [MIDI Communications](https://github.com/javier-sy/midi-communications) | [unimidi](https://github.com/arirusso/unimidi) | use of [MIDI Communications MacOS Layer](https://github.com/javier-sy/midi-communications-macos, removed process history information, removed buffering, removed command line script)
98
+ | Low level MIDI interface to MacOS | [MIDI Communications MacOS Layer](https://github.com/javier-sy/midi-communications-macos) | [ffi-coremidi](https://github.com/arirusso/ffi-coremidi) | removed buffering and process history information, locking behaviour when waiting midi events, improved midi devices name detection, minor optimizations |
97
99
  | Low level MIDI interface to Linux | **TO DO** | | |
98
100
  | Low level MIDI interface to JRuby | **TO DO** | | |
99
101
  | Low level MIDI interface to Windows | **TO DO** | | |
@@ -104,7 +106,7 @@ All in all I have decided to publish a suite of libraries optimized for MusaDSL
104
106
 
105
107
  ## Acknowledgements
106
108
 
107
- Thanks to [Ari Russo](http://github.com/arirusso) for his ruby library [ffi-coremidi](https://github.com/arirusso/ffi-coremidi) licensed as Apache License 2.0.
109
+ Thanks to [Ari Russo](http://github.com/arirusso) for his ruby library [ffi-coremidi](https://github.com/arirusso/ffi-coremidi) licensed under Apache License 2.0.
108
110
 
109
111
  As explained by **Ari Russo** regarding his library **ffi-coremidi**:
110
112
  * **ffi-coremidi** began with some coremidi/ffi binding code for MIDI output by [Colin Harris](http://github.com/aberant) contained in [his fork of MIDIator](http://github.com/aberant/midiator) and a [blog post](http://aberant.tumblr.com/post/694878119/sending-midi-sysex-with-core-midi-and-ruby-ffi).
@@ -113,6 +115,6 @@ As explained by **Ari Russo** regarding his library **ffi-coremidi**:
113
115
 
114
116
  ### License
115
117
 
116
- [MIDI Events](https://github.com/javier-sy/midi-events) Copyright (c) 2021 [Javier Sánchez Yeste](https://yeste.studio), licensed under LGPL 3.0 License
118
+ [MIDI Communicatios MacOS Layer](https://github.com/javier-sy/midi-communications-macos) Copyright (c) 2021 [Javier Sánchez Yeste](https://yeste.studio), licensed under LGPL 3.0 License
117
119
 
118
120
  [ffi-coremidi](https://github.com/arirusso/ffi-coremidi) Copyright (c) 2011-2017 [Ari Russo](http://arirusso.com), licensed under Apache License 2.0 (see the file LICENSE.ffi-coremidi)
data/Rakefile CHANGED
@@ -1,3 +1,6 @@
1
+ $LOAD_PATH.prepend __dir__
2
+ $LOAD_PATH.prepend File.join(__dir__, 'lib')
3
+
1
4
  require 'rake'
2
5
  require 'rake/testtask'
3
6
 
@@ -51,7 +51,7 @@ module MIDICommunicationsMacOS
51
51
 
52
52
  # Pack the given data into a midi-communications-macos MIDI packet (used by Destination)
53
53
  def self.get_midi_packet(data)
54
- format = "C" * data.size
54
+ format = 'C' * data.size
55
55
  packed_data = data.pack(format)
56
56
  char_size = FFI.type_size(:char) * data.size
57
57
  bytes = FFI::MemoryPointer.new(char_size)
@@ -97,11 +97,11 @@ module MIDICommunicationsMacOS
97
97
  packet_list = FFI::MemoryPointer.new(256)
98
98
  packet_ptr = API.MIDIPacketListInit(packet_list)
99
99
  time = HostTime.AudioGetCurrentHostTime
100
- packet_ptr = if X86_64
100
+ if X86_64
101
101
  API.MIDIPacketListAdd(packet_list, 256, packet_ptr, time, size, bytes)
102
102
  else
103
103
  # Pass in two 32-bit 0s for the 64 bit time
104
- time1 = API.MIDIPacketListAdd(packet_list, 256, packet_ptr, time >> 32, time & 0xFFFFFFFF, size, bytes)
104
+ API.MIDIPacketListAdd(packet_list, 256, packet_ptr, time >> 32, time & 0xFFFFFFFF, size, bytes)
105
105
  end
106
106
  packet_list
107
107
  end
@@ -130,7 +130,7 @@ module MIDICommunicationsMacOS
130
130
  bytes = FFI::MemoryPointer.new(length + 1)
131
131
 
132
132
  if CF.CFStringGetCString(string, bytes, length + 1, :kCFStringEncodingUTF8)
133
- bytes.read_string.force_encoding("utf-8")
133
+ bytes.read_string.force_encoding('utf-8')
134
134
  end
135
135
  ensure
136
136
  CF.CFRelease(string) unless string.nil? || string.null?
@@ -22,5 +22,5 @@ require 'midi-communications-macos/source'
22
22
  require 'midi-communications-macos/destination'
23
23
 
24
24
  module MIDICommunicationsMacOS
25
- VERSION = '0.5.0'.freeze
25
+ VERSION = '0.5.1'.freeze
26
26
  end
@@ -1,18 +1,17 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'midi-communications-macos'
3
- s.version = '0.5.0'
4
- s.date = '2021-11-15'
3
+ s.version = '0.5.1'
4
+ s.date = '2021-11-19'
5
5
  s.summary = 'Realtime MIDI IO with Ruby for OSX'
6
6
  s.description = 'Access the Apple Core MIDI framework API with Ruby.'
7
7
  s.authors = ['Javier Sánchez Yeste']
8
8
  s.email = ['javier.sy@gmail.com']
9
9
  s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
10
- s.homepage = 'http://rubygems.org/gems/midi-communications-macos'
10
+ s.homepage = 'https://rubygems.org/gems/midi-communications-macos'
11
11
  s.license = 'LGPL-3.0'
12
12
 
13
13
  s.required_ruby_version = '~> 2.7'
14
14
 
15
- s.add_runtime_dependency 'ffi', '~> 1.15', '>= 1.15.4'
16
15
 
17
16
  # TODO
18
17
  #s.metadata = {
@@ -21,4 +20,12 @@ Gem::Specification.new do |s|
21
20
  # "documentation_uri" => "",
22
21
  # "changelog_uri" => ""
23
22
  #}
23
+
24
+ s.add_runtime_dependency 'ffi', '~> 1.15', '>= 1.15.4'
25
+
26
+ s.add_development_dependency 'minitest', '~> 5.14', '>= 5.14.4'
27
+ s.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
28
+ s.add_development_dependency 'shoulda-context', '~> 2.0', '>= 2.0.0'
24
29
  end
30
+
31
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: midi-communications-macos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Sánchez Yeste
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-15 00:00:00.000000000 Z
11
+ date: 2021-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -30,6 +30,66 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.15.4
33
+ - !ruby/object:Gem::Dependency
34
+ name: minitest
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '5.14'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 5.14.4
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '5.14'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 5.14.4
53
+ - !ruby/object:Gem::Dependency
54
+ name: rake
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '13.0'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 13.0.6
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '13.0'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 13.0.6
73
+ - !ruby/object:Gem::Dependency
74
+ name: shoulda-context
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '2.0'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 2.0.0
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 2.0.0
33
93
  description: Access the Apple Core MIDI framework API with Ruby.
34
94
  email:
35
95
  - javier.sy@gmail.com
@@ -58,7 +118,7 @@ files:
58
118
  - lib/midi-communications-macos/source.rb
59
119
  - lib/midi-communications-macos/type_conversion.rb
60
120
  - midi-communications-macos.gemspec
61
- homepage: http://rubygems.org/gems/midi-communications-macos
121
+ homepage: https://rubygems.org/gems/midi-communications-macos
62
122
  licenses:
63
123
  - LGPL-3.0
64
124
  metadata: {}