ffi-openmpt 0.2.0 → 0.3.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 -0
- data/.travis.yml +17 -5
- data/CHANGES.md +19 -0
- data/ffi-openmpt.gemspec +1 -1
- data/lib/ffi/openmpt.rb +1 -0
- data/lib/ffi/openmpt/api.rb +17 -0
- data/lib/ffi/openmpt/module.rb +46 -26
- data/lib/ffi/openmpt/openmpt.rb +1 -10
- data/lib/ffi/openmpt/string.rb +52 -0
- data/lib/ffi/openmpt/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cff9c1335f501d6c4567b5f3fd9f314413426608f2fd83ff43c40cd8ac3430d5
|
4
|
+
data.tar.gz: 6bc3d44745d502705a18b8b85bf6608ac94f9315ed4dcfb4b8bf56f048462709
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39aa9577df5787ffb062a2a0045e4fc2f374343a32246f6f383bcfde63ad7722c3b99b01f0affe244e68973c80a59905a95c3339865f2ed9f74dd7cfd730a504
|
7
|
+
data.tar.gz: 72e57d5e865ab26e44b72727b9bb2a05a05b930a4c5a4155fbdcb753c07c965647a32d1abf4565a18ee95ea9e3581ea57df4d294182982a2dfda9685440ca690
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
+
dist: xenial
|
1
2
|
language: ruby
|
2
3
|
|
3
|
-
sudo: false
|
4
|
-
|
5
4
|
cache: bundler
|
6
5
|
|
7
6
|
before_install:
|
@@ -11,13 +10,26 @@ before_install:
|
|
11
10
|
|
12
11
|
rvm:
|
13
12
|
- 2.2.10
|
14
|
-
- 2.3.
|
15
|
-
- 2.4.
|
16
|
-
- 2.5.
|
13
|
+
- 2.3.8
|
14
|
+
- 2.4.5
|
15
|
+
- 2.5.3
|
17
16
|
- rbx-3
|
18
17
|
- ruby-head
|
19
18
|
|
19
|
+
env:
|
20
|
+
- TEST_LIBOPENMPT_VERSION=0.3.11
|
21
|
+
- TEST_LIBOPENMPT_VERSION=0.3.12
|
22
|
+
|
20
23
|
matrix:
|
24
|
+
fast_finish: true
|
21
25
|
allow_failures:
|
22
26
|
- rvm: rbx-3
|
23
27
|
- rvm: ruby-head
|
28
|
+
- env: TEST_LIBOPENMPT_VERSION=0.3.12
|
29
|
+
exclude:
|
30
|
+
- rvm: rbx-3
|
31
|
+
env: TEST_LIBOPENMPT_VERSION=0.3.12
|
32
|
+
- rvm: 2.2.10
|
33
|
+
env: TEST_LIBOPENMPT_VERSION=0.3.12
|
34
|
+
- rvm: 2.3.8
|
35
|
+
env: TEST_LIBOPENMPT_VERSION=0.3.12
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# Changes log for the Ruby OpenMPT library (ffi-openmpt)
|
2
2
|
|
3
|
+
## Version 0.3.0
|
4
|
+
|
5
|
+
* Wrap the libopenmpt module read mono functions.
|
6
|
+
* Add mono read (short/float) calls to the ruby interface.
|
7
|
+
* Move the string get method to its own namespace.
|
8
|
+
* Allow getting informational strings directly.
|
9
|
+
* Wrap Module#metadata_keys.
|
10
|
+
* Directly query module metadata keys.
|
11
|
+
* Update test version of libopenmpt to 0.3.13.
|
12
|
+
* Parameterize the test libopenmpt version.
|
13
|
+
* Update Travis config to use latest rubies.
|
14
|
+
* Turn on `fast_finish` in the Travis config.
|
15
|
+
* Switch to use latest dist (Xenial) in Travis.
|
16
|
+
* Test multiple versions of the libopenmpt library.
|
17
|
+
* Wrap libopenmpt module repeat functions.
|
18
|
+
* Add repeat_count to the ruby interface.
|
19
|
+
* Wrap libopenmpt module positional calls.
|
20
|
+
* Add positional calls to the ruby interface.
|
21
|
+
|
3
22
|
## Version 0.2.0
|
4
23
|
|
5
24
|
* Add a Gem version badge to the README.md.
|
data/ffi-openmpt.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
|
17
17
|
spec.summary = 'A Ruby library to interface with libopenmpt.'
|
18
18
|
spec.description = 'libopenmpt is a library to render tracker music ' \
|
19
|
-
'(MOD, XM, S3M, IT MPTM and dozens of other legacy formats) to a ' \
|
19
|
+
'(MOD, XM, S3M, IT, MPTM and dozens of other legacy formats) to a ' \
|
20
20
|
'PCM audio stream. See https://openmpt.org/ for more information.'
|
21
21
|
spec.homepage = 'https://github.com/hainesr/ffi-openmpt'
|
22
22
|
spec.license = 'BSD'
|
data/lib/ffi/openmpt.rb
CHANGED
data/lib/ffi/openmpt/api.rb
CHANGED
@@ -139,7 +139,24 @@ module FFI
|
|
139
139
|
attach_function :openmpt_module_set_render_param,
|
140
140
|
[:pointer, :int, :int], :int
|
141
141
|
|
142
|
+
# Repeat module calls
|
143
|
+
attach_function :openmpt_module_get_repeat_count, [:pointer], :int
|
144
|
+
attach_function :openmpt_module_set_repeat_count, [:pointer, :int], :void
|
145
|
+
|
146
|
+
# Positional module calls
|
147
|
+
attach_function :openmpt_module_get_position_seconds, [:pointer], :double
|
148
|
+
attach_function :openmpt_module_set_position_seconds,
|
149
|
+
[:pointer, :double], :double
|
150
|
+
attach_function :openmpt_module_set_position_order_row,
|
151
|
+
[:pointer, :int, :int], :double
|
152
|
+
|
142
153
|
# Read module calls
|
154
|
+
attach_function :openmpt_module_read_mono,
|
155
|
+
[:pointer, :int, :int, :pointer],
|
156
|
+
:int
|
157
|
+
attach_function :openmpt_module_read_float_mono,
|
158
|
+
[:pointer, :int, :int, :pointer],
|
159
|
+
:int
|
143
160
|
attach_function :openmpt_module_read_stereo,
|
144
161
|
[:pointer, :int, :int, :pointer, :pointer],
|
145
162
|
:int
|
data/lib/ffi/openmpt/module.rb
CHANGED
@@ -10,20 +10,6 @@ module FFI
|
|
10
10
|
|
11
11
|
include API
|
12
12
|
|
13
|
-
METADATA_KEYS = [
|
14
|
-
:type,
|
15
|
-
:type_long,
|
16
|
-
:container,
|
17
|
-
:container_long,
|
18
|
-
:tracker,
|
19
|
-
:artist,
|
20
|
-
:title,
|
21
|
-
:date,
|
22
|
-
:message,
|
23
|
-
:message_raw,
|
24
|
-
:warnings
|
25
|
-
].freeze
|
26
|
-
|
27
13
|
attr_reader :sample_rate
|
28
14
|
|
29
15
|
def initialize(filename, sample_rate = 48_000)
|
@@ -32,7 +18,7 @@ module FFI
|
|
32
18
|
@sample_rate = sample_rate
|
33
19
|
|
34
20
|
# Allocate a reusable single int buffer.
|
35
|
-
# This for use by the 'get_render_params'-type calls.
|
21
|
+
# This is for use by the 'get_render_params'-type calls.
|
36
22
|
@int_value = ::FFI::MemoryPointer.new(:int, 1)
|
37
23
|
end
|
38
24
|
|
@@ -89,9 +75,43 @@ module FFI
|
|
89
75
|
openmpt_module_get_num_samples(@mod)
|
90
76
|
end
|
91
77
|
|
78
|
+
def repeat_count
|
79
|
+
openmpt_module_get_repeat_count(@mod)
|
80
|
+
end
|
81
|
+
|
82
|
+
def repeat_count=(count)
|
83
|
+
openmpt_module_set_repeat_count(@mod, count)
|
84
|
+
end
|
85
|
+
|
86
|
+
def position
|
87
|
+
return if closed?
|
88
|
+
openmpt_module_get_position_seconds(@mod)
|
89
|
+
end
|
90
|
+
|
91
|
+
def position=(param)
|
92
|
+
if param.is_a?(Array)
|
93
|
+
openmpt_module_set_position_order_row(@mod, param[0], param[1])
|
94
|
+
else
|
95
|
+
openmpt_module_set_position_seconds(@mod, param)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def metadata_keys
|
100
|
+
ptr = openmpt_module_get_metadata_keys(@mod)
|
101
|
+
str = ptr.read_string
|
102
|
+
openmpt_free_string(ptr)
|
103
|
+
|
104
|
+
str.split(';').map(&:to_sym)
|
105
|
+
end
|
106
|
+
|
92
107
|
def metadata(key)
|
93
|
-
return if closed? || !
|
94
|
-
|
108
|
+
return if closed? || !metadata_keys.include?(key)
|
109
|
+
|
110
|
+
ptr = openmpt_module_get_metadata(@mod, key.to_s)
|
111
|
+
str = ptr.read_string
|
112
|
+
openmpt_free_string(ptr)
|
113
|
+
|
114
|
+
str
|
95
115
|
end
|
96
116
|
|
97
117
|
def gain
|
@@ -150,6 +170,14 @@ module FFI
|
|
150
170
|
)
|
151
171
|
end
|
152
172
|
|
173
|
+
def read_mono(frames, buffer)
|
174
|
+
openmpt_module_read_mono(@mod, @sample_rate, frames, buffer)
|
175
|
+
end
|
176
|
+
|
177
|
+
def read_float_mono(frames, buffer)
|
178
|
+
openmpt_module_read_float_mono(@mod, @sample_rate, frames, buffer)
|
179
|
+
end
|
180
|
+
|
153
181
|
def read_stereo(frames, left, right)
|
154
182
|
openmpt_module_read_stereo(@mod, @sample_rate, frames, left, right)
|
155
183
|
end
|
@@ -187,7 +215,7 @@ module FFI
|
|
187
215
|
end
|
188
216
|
|
189
217
|
def respond_to_missing?(name, *all)
|
190
|
-
|
218
|
+
metadata_keys.include?(name) || super
|
191
219
|
end
|
192
220
|
|
193
221
|
private
|
@@ -203,14 +231,6 @@ module FFI
|
|
203
231
|
@closed = (mod.address == 0)
|
204
232
|
mod
|
205
233
|
end
|
206
|
-
|
207
|
-
def get_openmpt_string(method, *args)
|
208
|
-
ptr = send(method, @mod, *args)
|
209
|
-
str = ptr.read_string
|
210
|
-
openmpt_free_string(ptr)
|
211
|
-
|
212
|
-
str
|
213
|
-
end
|
214
234
|
end
|
215
235
|
end
|
216
236
|
end
|
data/lib/ffi/openmpt/openmpt.rb
CHANGED
@@ -15,14 +15,6 @@ module FFI
|
|
15
15
|
[API.openmpt_get_core_version].pack('L>').unpack('CCCC')
|
16
16
|
end
|
17
17
|
|
18
|
-
def self.string(key)
|
19
|
-
ptr = API.openmpt_get_string(key.to_s)
|
20
|
-
str = ptr.read_string
|
21
|
-
API.openmpt_free_string(ptr)
|
22
|
-
|
23
|
-
str
|
24
|
-
end
|
25
|
-
|
26
18
|
def self.supported_extensions
|
27
19
|
ptr = API.openmpt_get_supported_extensions
|
28
20
|
exts = ptr.read_string.split(';').map(&:to_sym)
|
@@ -32,8 +24,7 @@ module FFI
|
|
32
24
|
end
|
33
25
|
|
34
26
|
def self.extension_supported?(ext)
|
35
|
-
|
36
|
-
supported == 1
|
27
|
+
API.openmpt_is_extension_supported(ext.to_s) == 1
|
37
28
|
end
|
38
29
|
|
39
30
|
def self.transient_error?(error)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Robert Haines.
|
4
|
+
#
|
5
|
+
# Licensed under the BSD License. See LICENCE for details.
|
6
|
+
|
7
|
+
module FFI
|
8
|
+
module OpenMPT
|
9
|
+
module String
|
10
|
+
KEYS = [
|
11
|
+
:library_version,
|
12
|
+
:library_version_major,
|
13
|
+
:library_version_minor,
|
14
|
+
:library_version_patch,
|
15
|
+
:library_version_prerel,
|
16
|
+
:library_version_is_release,
|
17
|
+
:library_features,
|
18
|
+
:core_version,
|
19
|
+
:source_url,
|
20
|
+
:source_date,
|
21
|
+
:source_revision,
|
22
|
+
:source_is_modified,
|
23
|
+
:source_has_mixed_revisions,
|
24
|
+
:source_is_package,
|
25
|
+
:build,
|
26
|
+
:build_compiler,
|
27
|
+
:credits,
|
28
|
+
:contact,
|
29
|
+
:license,
|
30
|
+
:url,
|
31
|
+
:support_forum_url,
|
32
|
+
:bugtracker_url
|
33
|
+
].freeze
|
34
|
+
|
35
|
+
def self.get(key)
|
36
|
+
ptr = API.openmpt_get_string(key.to_s)
|
37
|
+
str = ptr.read_string
|
38
|
+
API.openmpt_free_string(ptr)
|
39
|
+
|
40
|
+
str
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.method_missing(name, *args)
|
44
|
+
respond_to?(name) ? get(name) : super
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.respond_to_missing?(name, *all)
|
48
|
+
KEYS.include?(name) || super
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/ffi/openmpt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-openmpt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Haines
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.54'
|
97
|
-
description: libopenmpt is a library to render tracker music (MOD, XM, S3M, IT MPTM
|
97
|
+
description: libopenmpt is a library to render tracker music (MOD, XM, S3M, IT, MPTM
|
98
98
|
and dozens of other legacy formats) to a PCM audio stream. See https://openmpt.org/
|
99
99
|
for more information.
|
100
100
|
email:
|
@@ -125,6 +125,7 @@ files:
|
|
125
125
|
- lib/ffi/openmpt/api.rb
|
126
126
|
- lib/ffi/openmpt/module.rb
|
127
127
|
- lib/ffi/openmpt/openmpt.rb
|
128
|
+
- lib/ffi/openmpt/string.rb
|
128
129
|
- lib/ffi/openmpt/version.rb
|
129
130
|
homepage: https://github.com/hainesr/ffi-openmpt
|
130
131
|
licenses:
|