dtas 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Documentation/GNUmakefile +2 -0
- data/Documentation/dtas-player_protocol.txt +28 -1
- data/Documentation/dtas-splitfx.txt +167 -0
- data/Documentation/dtas-tl.txt +77 -0
- data/GIT-VERSION-GEN +2 -1
- data/GNUmakefile +1 -1
- data/README +2 -1
- data/Rakefile +7 -0
- data/bin/dtas-console +11 -1
- data/bin/dtas-splitfx +40 -0
- data/bin/dtas-tl +73 -0
- data/examples/README +3 -0
- data/examples/splitfx.sample.yml +19 -0
- data/lib/dtas/format.rb +11 -0
- data/lib/dtas/pipe.rb +0 -3
- data/lib/dtas/player.rb +38 -11
- data/lib/dtas/player/client_handler.rb +94 -7
- data/lib/dtas/process.rb +25 -3
- data/lib/dtas/sink.rb +0 -3
- data/lib/dtas/source/sox.rb +2 -1
- data/lib/dtas/splitfx.rb +342 -0
- data/lib/dtas/tracklist.rb +130 -0
- data/test/helper.rb +14 -1
- data/test/player_integration.rb +5 -3
- data/test/test_buffer.rb +4 -2
- data/test/test_env.rb +55 -0
- data/test/test_format.rb +1 -1
- data/test/test_format_change.rb +1 -1
- data/test/test_player.rb +1 -1
- data/test/test_player_client_handler.rb +1 -1
- data/test/test_player_integration.rb +3 -2
- data/test/test_process.rb +1 -1
- data/test/test_rg_integration.rb +4 -5
- data/test/test_rg_state.rb +1 -1
- data/test/test_sink.rb +1 -1
- data/test/test_sink_pipe_size.rb +1 -1
- data/test/test_sink_tee_integration.rb +1 -1
- data/test/test_source_av.rb +1 -1
- data/test/test_source_sox.rb +1 -1
- data/test/test_splitfx.rb +79 -0
- data/test/test_tracklist.rb +76 -0
- data/test/test_unixserver.rb +1 -1
- data/test/test_util.rb +1 -1
- metadata +23 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d233bbb0a87d1fc6c4bdb7f18eba692c721a3333
|
4
|
+
data.tar.gz: 8f14c5645b6535bd6c22b1e4854ef39ec85d528a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93592a5294b214260e938746ad75408a32889aae8c3667a49ede5952364dd6a9f3d99b793a77c134a9bd66ec15a21eda0f078475d2d375543ebf153714170c68
|
7
|
+
data.tar.gz: 8fc83ba70d8a7a57f2e4ca26c936bd237b0fd9f4130142f8c500d7eeb4a0f7b15542bf305b79e891c7a2acd7f5edb3750281776ad7d730edc95fcdd3078c5b1b
|
data/Documentation/GNUmakefile
CHANGED
@@ -53,6 +53,9 @@ dtas-sinkedit(1), and dtas-enq(1) also implement this protocol.
|
|
53
53
|
- COMMAND, this may be quoted string passed to sh -c "",
|
54
54
|
variable/argument expansion will be performed by the shell
|
55
55
|
- SOURCENAME - "sox" or "av", more backends may be supported in the future
|
56
|
+
- TIMESTAMP - a time stamp formatted in HH:MM:SS.FRAC (for seeking)
|
57
|
+
- TRACKID - a unique unsigned integer in decimal (base-10) representing a
|
58
|
+
track in the tracklist
|
56
59
|
- FILENAME - an expanded pathname relative to / is recommended since
|
57
60
|
dtas-player and the client may run in different directories
|
58
61
|
|
@@ -161,7 +164,7 @@ Commands here should be alphabetized according to `LC_ALL=C sort'
|
|
161
164
|
+ norm_level=FLOAT (1.0 == dBFS)
|
162
165
|
Controls the level to normalize to when using album_norm or track_norm.
|
163
166
|
|
164
|
-
* seek [+-]
|
167
|
+
* seek [+-]TIMESTAMP - seek the current track to a specified time.
|
165
168
|
This is passed directly as the first argument for the sox(1) "trim"
|
166
169
|
command. See the sox(1) manpage for details.
|
167
170
|
Seeking to a relative time is also supported by prefixing the time
|
@@ -211,6 +214,30 @@ Commands here should be alphabetized according to `LC_ALL=C sort'
|
|
211
214
|
users requiring fsync should open(2) that file and fsync(2) it
|
212
215
|
themselves if necessary.
|
213
216
|
|
217
|
+
* tl add FILENAME [TRACKID [BOOLEAN]] - add files to the tracklist
|
218
|
+
With one arg, adds FILENAME to the head of the tracklist.
|
219
|
+
If TRACKID is specified, FILENAME is added immediately after TRACKID
|
220
|
+
on the existing tracklist. The final BOOLEAN argument replaces the
|
221
|
+
currently playing track with the newly-added one.
|
222
|
+
Returns the TRACKID of the newly added track
|
223
|
+
|
224
|
+
* tl remove TRACKID - remove the track with the given TRACKID from
|
225
|
+
the track list
|
226
|
+
|
227
|
+
* tl get [TRACKIDS]
|
228
|
+
returns a list of TRACKIDS mapped to filenames.
|
229
|
+
|
230
|
+
* tl goto TRACKID [TIMESTAMP] - plays the given TRACKID
|
231
|
+
An optional timestamp may be added to prevent playing the
|
232
|
+
same part(s) repeated.y
|
233
|
+
|
234
|
+
* tl repeat [BOOLEAN|1] - show/or change repeat status of the tracklist.
|
235
|
+
With no args, this will show "true", "false", or "1"
|
236
|
+
If set to "1", dtas-player will repeat the current track.
|
237
|
+
|
238
|
+
* tl tracks
|
239
|
+
returns a list of all TRACKIDS in the tracklist
|
240
|
+
|
214
241
|
* watch - adds the client to the passive watch list for notifications.
|
215
242
|
It is recommended clients issue no further commands and open
|
216
243
|
another client socket to issue non-watch commands.
|
@@ -0,0 +1,167 @@
|
|
1
|
+
% dtas-splitfx(1) dtas user manual
|
2
|
+
|
3
|
+
# NAME
|
4
|
+
|
5
|
+
dtas-splitfx - split audio and apply effects to all tracks
|
6
|
+
|
7
|
+
# SYNOPSIS
|
8
|
+
|
9
|
+
dtas-splitfx SPLITFX_FILE.yml [OPTIONS] [TARGETS] [ARGS...]
|
10
|
+
|
11
|
+
# DESCRIPTION
|
12
|
+
|
13
|
+
dtas-splitfx reads as YAML file and can apply effects (including
|
14
|
+
resampling/dither), split, tag, and encode files in parallel.
|
15
|
+
dtas-splitfx is intended for splitting recordings from vinyl and live
|
16
|
+
concerts into separate files. dtas-splitfx is inspired by cuesheets for
|
17
|
+
CD audio and the make(1) build tool.
|
18
|
+
|
19
|
+
dtas-splitfx primarily uses sox(1), but it is possible to define targets
|
20
|
+
to use ecasound(1), too.
|
21
|
+
|
22
|
+
# OPTIONS
|
23
|
+
|
24
|
+
-j, \--jobs [JOBS]
|
25
|
+
: Number of jobs to run in parallel. If no number is specified, all
|
26
|
+
jobs are run in parallel.
|
27
|
+
|
28
|
+
-n, \--dry-run
|
29
|
+
: Print, but do not run the commands to be executed
|
30
|
+
|
31
|
+
-s, \--quiet, \--silent
|
32
|
+
: Silent operation, commands are not printed as executed
|
33
|
+
|
34
|
+
# FILE FORMAT
|
35
|
+
|
36
|
+
* infile - string, the pathname of the original audio file
|
37
|
+
* env - hash of environment variables to set for all commands
|
38
|
+
* comments - hash of common tags for all audio (e.g. ARTIST, ALBUM, YEAR)
|
39
|
+
comments:
|
40
|
+
ARTIST: John Smith
|
41
|
+
ALBUM: Hello World
|
42
|
+
YEAR: 2013
|
43
|
+
* track_start - integer, number to start the track count at (default: 1)
|
44
|
+
* cdda_align - boolean, enforce sector alignment for audio CDs (default: false)
|
45
|
+
* track_zpad - boolean or integer. Zero-pad the TRACKNUMBER in metadata and
|
46
|
+
filenames. If an integer, this creates a fixed padding even if the
|
47
|
+
padding is not necessary. If true, this only pads as needed for the
|
48
|
+
highest-numbered track (default: true)
|
49
|
+
* tracks - array, see "TRACKS" section
|
50
|
+
* targets - hash, see "TARGETS" section
|
51
|
+
|
52
|
+
# TRACKS
|
53
|
+
|
54
|
+
Tracks may be defined by a start time, with the stop time defined
|
55
|
+
automatically by the start of the next track, stop time, or a skip
|
56
|
+
segment.
|
57
|
+
|
58
|
+
* t TIME TITLE [fade_in/fade_out=FADE_ARGS] - the start of a new track
|
59
|
+
at TIME with TITLE. An optional fade_in and fade_out may be specified
|
60
|
+
for the first/last tracks.
|
61
|
+
* skip TIME - skip a segment starting at TIME. "skip" segments are
|
62
|
+
useful for skipping long gaps between tracks (such as flipping vinyl
|
63
|
+
or intermission at concerts)
|
64
|
+
* stop TIME - stop the last track This should be the last directive in
|
65
|
+
the "tracks" array.
|
66
|
+
|
67
|
+
An example of the tracks array for a 4 track EP follows:
|
68
|
+
|
69
|
+
tracks:
|
70
|
+
- t 0:21 "This is the first track of an EP" fade_in='t 1'
|
71
|
+
- t 7:11.6 "Second track of side A of an EP"
|
72
|
+
- skip 9:18 # this is where I flip the record, comments are allowed
|
73
|
+
- t 9:41 "3rd track of an EP"
|
74
|
+
- t 13:36.5 "Final track of the EP" fade_out='t 1'
|
75
|
+
- stop 18:11
|
76
|
+
|
77
|
+
# FADES
|
78
|
+
|
79
|
+
dtas-splitfx automatically sets up fade-in/fade-out effects for sox(1)
|
80
|
+
based on track times. These are to be used in "t" (track) directives in
|
81
|
+
the "tracks" array:
|
82
|
+
|
83
|
+
* fade_in="[TYPE] LENGTH"
|
84
|
+
* fade_out="[TYPE] LENGTH"
|
85
|
+
|
86
|
+
TYPE is optional, but LENGTH is required. See sox(1) for a description
|
87
|
+
of the fade type.
|
88
|
+
|
89
|
+
# ENVIRONMENT
|
90
|
+
|
91
|
+
dtas-splitfx sets several default environment variables for commands to
|
92
|
+
use in targets:
|
93
|
+
|
94
|
+
* INFILE - this matches the "infile" directive in the YAML file
|
95
|
+
* TRIMFX - essential, this supplys the necessary sox(1) trim effect to
|
96
|
+
each track.
|
97
|
+
* COMMENTS - expands to --comment-file=PATH for sox(1)
|
98
|
+
* OUTFMT - sox(1) arguments for the output format (e.g. "-ts32 -c2 -r44100"
|
99
|
+
* SUFFIX - the suffix of the output format without "." (e.g. "flac", "ogg")
|
100
|
+
* TRACKNUMBER - the track number, useful for comments and filenames
|
101
|
+
* RATEFX - rate effect and arguments for sox(1) resampling
|
102
|
+
* DITHERFX - dither effect and arguments for sox(1) dithering
|
103
|
+
|
104
|
+
# TARGETS
|
105
|
+
|
106
|
+
The default targets will split audio and avoid applying any effects.
|
107
|
+
They are named after common audio formats supported by sox(1):
|
108
|
+
|
109
|
+
* flac
|
110
|
+
* ogg
|
111
|
+
* mp3
|
112
|
+
* sox
|
113
|
+
|
114
|
+
If not specified, "flac" is the default target.
|
115
|
+
|
116
|
+
Additional targets supported by default.
|
117
|
+
|
118
|
+
* flac-cdda - this encodes the audio to "flac" format while being
|
119
|
+
easily decompressible to a format suitable for being burned to audio CD.
|
120
|
+
|
121
|
+
* opusenc - encodes to 16-bit, 48000 Hz Opus format using opusenc(1).
|
122
|
+
This uses sox(1) to dither/resample/apply effects as necessary.
|
123
|
+
This target exists as sox (as of v14.4.1) does not currently have
|
124
|
+
native opus encoding support.
|
125
|
+
|
126
|
+
Custom targets may easily be defined to apply effects and gain. For
|
127
|
+
example, the following "flac24" target raises the volume of the left
|
128
|
+
channel by 9.5dB and the right one by 8.5dB to compensate for channel
|
129
|
+
imbalance in a live concert recording from the audience:
|
130
|
+
|
131
|
+
targets:
|
132
|
+
flac24:
|
133
|
+
command: sox -M
|
134
|
+
"|sox $INFILE -c1 -p $TRIMFX remix 1v1 vol +9.5dB"
|
135
|
+
"|sox $INFILE -c1 -p $TRIMFX remix 2v1 vol +8.5dB"
|
136
|
+
$COMMENTS $OUTFMT
|
137
|
+
bandYYYY-MM-DD.FOO.t0"$TRACKNUMBER.$SUFFIX"
|
138
|
+
$RATEFX $DITHERFX stats
|
139
|
+
format:
|
140
|
+
type: flac
|
141
|
+
bits: 24
|
142
|
+
rate: 48000
|
143
|
+
|
144
|
+
For reference, the "opusenc" default target is implemented as follows:
|
145
|
+
|
146
|
+
targets:
|
147
|
+
opusenc:
|
148
|
+
command: sox "$INFILE" $COMMENTS $OUTFMT -
|
149
|
+
$TRIMFX $RATEFX $DITHERFX | opusenc --music
|
150
|
+
--raw-bits $BITS_PER_SAMPLE
|
151
|
+
$OPUSENC_BITRATE --raw-rate $RATE --raw-chan $CHANNELS
|
152
|
+
--raw-endianness $ENDIAN_OPUSENC
|
153
|
+
$OPUSENC_COMMENTS - $TRACKNUMBER.opus
|
154
|
+
format:
|
155
|
+
bits: 16
|
156
|
+
rate: 48000
|
157
|
+
type: s16
|
158
|
+
channels: 2
|
159
|
+
|
160
|
+
# COPYRIGHT
|
161
|
+
|
162
|
+
Copyright 2013, Eric Wong <normalperson@yhbt.net> and all contributors.\
|
163
|
+
License: GPLv3 or later <http://www.gnu.org/licenses/gpl-3.0.txt>
|
164
|
+
|
165
|
+
# SEE ALSO
|
166
|
+
|
167
|
+
sox(1), ecasound(1), flac(1), opusenc(1)
|
@@ -0,0 +1,77 @@
|
|
1
|
+
% dtas-tl(1) dtas user manual
|
2
|
+
|
3
|
+
# NAME
|
4
|
+
|
5
|
+
dtas-tl - tracklist manipulation for dtas-player (development)
|
6
|
+
|
7
|
+
# SYNOPSYS
|
8
|
+
|
9
|
+
dtas-tl [COMMANDS]
|
10
|
+
|
11
|
+
# DESCRIPTION
|
12
|
+
|
13
|
+
dtas-tl provides utility functions for manipulating the tracklist of the
|
14
|
+
dtas-player (not the queue, the tracklist is separate from the queue).
|
15
|
+
It is mainly intended as a development tool and will likely go away in
|
16
|
+
the future or have its functionality merged into another tool (or MPRIS
|
17
|
+
client).
|
18
|
+
|
19
|
+
# COMMANDS
|
20
|
+
|
21
|
+
* addhead - add multiple tracks to the beginning of the tracklist
|
22
|
+
* addtail - add multiple tracks to the end of the tracklist
|
23
|
+
* current - display the current track, "NONE" if not playing
|
24
|
+
* current-id - display the TRACKID of the current track
|
25
|
+
"NONE" if not playing
|
26
|
+
* cat - display a newline-delimited list of TRACK_ID=PATH output
|
27
|
+
* clear - remove all tracks from the tracklist
|
28
|
+
* goto TRACKID [POS] - play TRACKID immediately, optionally seek to POS
|
29
|
+
TRACKID may be looked up via cat, and POS should be a timestamp in
|
30
|
+
HH:MM:SS.FRAC format.
|
31
|
+
* reto REGEXP [POS] - play first track with path matching REGEXP immediately,
|
32
|
+
optionally seek to POS. POS should be a timestamp in HH:MM:SS.FRAC format.
|
33
|
+
* next - play the next track in the tracklist
|
34
|
+
* previous - play the previous track in the tracklist
|
35
|
+
* repeat 1 - repeat the current track
|
36
|
+
* repeat false - disable repeat
|
37
|
+
* repeat true - enable repeat of the whole tracklist
|
38
|
+
|
39
|
+
See dtas-player_protocol(7) for a detailed description of the protocol.
|
40
|
+
|
41
|
+
# EXAMPLES
|
42
|
+
|
43
|
+
display the current tracklist
|
44
|
+
|
45
|
+
$ dtas-tl cat
|
46
|
+
|
47
|
+
to add an an entire directory of FLAC files
|
48
|
+
|
49
|
+
$ dtas-tl addtail /path/to/directory/*.flac
|
50
|
+
|
51
|
+
to skip forward in the tracklist
|
52
|
+
|
53
|
+
$ dtas-tl next
|
54
|
+
|
55
|
+
to skip backwards in the tracklist
|
56
|
+
|
57
|
+
$ dtas-tl previous
|
58
|
+
|
59
|
+
# ENVIRONMENT
|
60
|
+
|
61
|
+
DTAS_PLAYER_SOCK - the path to the dtas-player control socket.
|
62
|
+
This defaults to ~/.dtas/player.sock
|
63
|
+
|
64
|
+
# CONTACT
|
65
|
+
|
66
|
+
All feedback welcome via plain-text mail to <dtas-all@nongnu.org>\
|
67
|
+
Mailing list archives available at <ftp://lists.gnu.org/dtas-all/>\
|
68
|
+
No subscription is necessary to post to the mailing list.
|
69
|
+
|
70
|
+
# COPYRIGHT
|
71
|
+
|
72
|
+
Copyright 2013, Eric Wong <normalperson@yhbt.net> and all contributors.\
|
73
|
+
License: GPLv3 or later <http://www.gnu.org/licenses/gpl-3.0.txt>
|
74
|
+
|
75
|
+
# SEE ALSO
|
76
|
+
|
77
|
+
dtas-player(1), dtas-player_protocol(7), dtas-ctl(1)
|
data/GIT-VERSION-GEN
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
4
4
|
CONSTANT = "DTAS::VERSION"
|
5
5
|
RVF = "lib/dtas/version.rb"
|
6
|
-
DEF_VER = "v0.
|
6
|
+
DEF_VER = "v0.4.0"
|
7
7
|
vn = DEF_VER
|
8
8
|
|
9
9
|
# First see if there is a version file (included in release tarballs),
|
@@ -27,4 +27,5 @@ cur_ruby_version = File.read(RVF) rescue nil
|
|
27
27
|
if new_ruby_version != cur_ruby_version
|
28
28
|
File.open(RVF, "w") { |fp| fp.write(new_ruby_version) }
|
29
29
|
end
|
30
|
+
File.chmod(0644, RVF)
|
30
31
|
puts vn if $0 == __FILE__
|
data/GNUmakefile
CHANGED
@@ -13,7 +13,7 @@ test_units := $(wildcard test/test_*.rb)
|
|
13
13
|
test: test-unit
|
14
14
|
test-unit: $(test_units)
|
15
15
|
$(test_units):
|
16
|
-
$(RUBY) -I $(lib) $@ $(RUBY_TEST_OPTS)
|
16
|
+
$(RUBY) -w -I $(lib) $@ $(RUBY_TEST_OPTS)
|
17
17
|
|
18
18
|
check-warnings:
|
19
19
|
@(for i in $$(git ls-files '*.rb'| grep -v '^setup\.rb$$'); \
|
data/README
CHANGED
@@ -11,6 +11,7 @@ Primary executables available are:
|
|
11
11
|
|
12
12
|
* dtas-player - gapless music player (or pipeline/process manager :P)
|
13
13
|
* dtas-cueedit - embedded cuesheet editor (FLAC-only for now)
|
14
|
+
* dtas-splitfx - split audio and apply effects to all tracks
|
14
15
|
|
15
16
|
The centerpiece is dtas-player, a gapless music player designed to aid
|
16
17
|
in writing scripts for sox/ecasound use. Unlike monolithic music
|
@@ -38,6 +39,7 @@ Users of dtas-player will also be interested in the following scripts:
|
|
38
39
|
* dtas-sinkedit - edit sinks (playback targets) for dtas-player
|
39
40
|
* dtas-sourceedit - edit source (decoder process parameters) for dtas-player
|
40
41
|
* dtas-xdelay - alternative sink for dtas-player
|
42
|
+
* dtas-tl - command-line helpers for tracklist functionality in dtas-player
|
41
43
|
|
42
44
|
All scripts have some documentation in the Documentation/ directory or
|
43
45
|
manpages distributed with the gem. Documentation is also available on
|
@@ -50,7 +52,6 @@ Familiarity with the Ruby programming language is absolutely NOT required.
|
|
50
52
|
Coming:
|
51
53
|
|
52
54
|
* MPRIS/MPRIS 2.0 bridge for partial dtas-player control
|
53
|
-
* tracklist support in dtas-player (maybe?)
|
54
55
|
* whatever command-line tools come to mind...
|
55
56
|
* better error handling, many bugfixes, etc...
|
56
57
|
* better documentation
|
data/Rakefile
CHANGED
@@ -110,6 +110,13 @@ task tarball: "pkg/#{base}" do
|
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
|
+
task "pkg/#{base}" => :fix_perms
|
114
|
+
|
115
|
+
task :fix_perms do
|
116
|
+
sh "git ls-tree -r HEAD | awk '/^100644 / {print $NF}' | xargs chmod 644"
|
117
|
+
sh "git ls-tree -r HEAD | awk '/^100755 / {print $NF}' | xargs chmod 755"
|
118
|
+
end
|
119
|
+
|
113
120
|
task dist: [ :tarball, :package ] do
|
114
121
|
Dir.chdir("pkg") do
|
115
122
|
%w(dtas-linux dtas-mpris).each do |gem|
|
data/bin/dtas-console
CHANGED
@@ -39,6 +39,8 @@ tfmt = update_tfmt(prec_step[prec_nr])
|
|
39
39
|
events = []
|
40
40
|
interval = 1.0 / 10 ** prec_nr
|
41
41
|
|
42
|
+
pause = nil
|
43
|
+
|
42
44
|
def show_events(lineno, screen, events)
|
43
45
|
Curses.setpos(lineno += 1, 0)
|
44
46
|
Curses.clrtoeol
|
@@ -132,7 +134,7 @@ begin
|
|
132
134
|
else
|
133
135
|
Curses.setpos(lineno += 1, 0)
|
134
136
|
Curses.clrtoeol
|
135
|
-
Curses.addstr(cur['paused'] ?
|
137
|
+
Curses.addstr(cur['paused'] ? "paused #{pause}" : 'idle')
|
136
138
|
Curses.setpos(lineno += 1, 0)
|
137
139
|
Curses.clrtoeol
|
138
140
|
end
|
@@ -153,6 +155,14 @@ begin
|
|
153
155
|
Curses.clear
|
154
156
|
when w
|
155
157
|
event = w.res_wait
|
158
|
+
case event
|
159
|
+
when "pause"
|
160
|
+
if current
|
161
|
+
pause = current['infile'] || current['command']
|
162
|
+
end
|
163
|
+
when %r{\Afile }
|
164
|
+
pause = nil
|
165
|
+
end
|
156
166
|
events << "#{Time.now.strftime(tfmt)} #{event}"
|
157
167
|
# something happened, refresh current
|
158
168
|
# we could be more intelligent here, maybe, but too much work.
|
data/bin/dtas-splitfx
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
3
|
+
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
|
4
|
+
require 'yaml'
|
5
|
+
require 'optparse'
|
6
|
+
require 'dtas/splitfx'
|
7
|
+
usage = "#$0 [-n|--dry-run][-j [JOBS]][-s|--silent] SPLITFX_FILE.yml [TARGET]"
|
8
|
+
overrides = {} # FIXME: not tested
|
9
|
+
opts = { jobs: 1 }
|
10
|
+
jobs = 1
|
11
|
+
OptionParser.new('', 24, ' ') do |op|
|
12
|
+
op.banner = usage
|
13
|
+
op.on('-n', '--dry-run') { opts[:dryrun] = true }
|
14
|
+
op.on('-j', '--jobs [JOBS]', Integer) { |val| opts[:jobs] = val }
|
15
|
+
op.on('-s', '--quiet', '--silent') { |val| opts[:silent] = true }
|
16
|
+
op.parse!(ARGV)
|
17
|
+
end
|
18
|
+
|
19
|
+
args = []
|
20
|
+
ARGV.each do |arg|
|
21
|
+
case arg
|
22
|
+
when %r{\A(\w+)=(.*)\z}
|
23
|
+
key, val = $1, $2
|
24
|
+
# only one that makes sense is infile=another_file
|
25
|
+
overrides[key] = YAML.load(val)
|
26
|
+
when %r{\A(\w+)\.(\w+)=(.*)\z}
|
27
|
+
# comments.ARTIST='blah'
|
28
|
+
top, key, val = $1, $2, $3
|
29
|
+
hsh = overrides[top] ||= {}
|
30
|
+
hsh[key] = val
|
31
|
+
else
|
32
|
+
args << arg
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
file = args.shift or abort usage
|
37
|
+
target = args.shift || "flac"
|
38
|
+
splitfx = DTAS::SplitFX.new
|
39
|
+
splitfx.import(YAML.load(File.read(file)), overrides)
|
40
|
+
splitfx.run(target, opts)
|