dtas 0.16.1 → 0.17.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 +1 -1
- data/Documentation/dtas-archive.pod +1 -1
- data/Documentation/dtas-console.pod +1 -1
- data/Documentation/dtas-ctl.pod +1 -1
- data/Documentation/dtas-cueedit.pod +1 -1
- data/Documentation/dtas-enq.pod +1 -1
- data/Documentation/dtas-env.pod +2 -2
- data/Documentation/dtas-msinkctl.pod +1 -1
- data/Documentation/dtas-player.pod +1 -1
- data/Documentation/dtas-player_effects.pod +1 -1
- data/Documentation/dtas-player_protocol.pod +3 -3
- data/Documentation/dtas-player_sink_examples.pod +1 -1
- data/Documentation/dtas-sinkedit.pod +2 -2
- data/Documentation/dtas-sourceedit.pod +2 -2
- data/Documentation/dtas-tl.pod +3 -3
- data/Documentation/dtas-xdelay.pod +1 -1
- data/Documentation/update-footer.rb +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/HACKING +1 -1
- data/INSTALL +3 -3
- data/README +1 -1
- data/TODO +3 -1
- data/bin/dtas-console +3 -8
- data/bin/dtas-readahead +2 -2
- data/dtas-linux.gemspec +1 -1
- data/dtas-mpris.gemspec +1 -1
- data/dtas.gemspec +1 -1
- data/examples/zsh-completion/README +3 -0
- data/examples/zsh-completion/_dtas-archive +16 -0
- data/examples/zsh-completion/_dtas-ctl +114 -0
- data/examples/zsh-completion/_dtas-cueedit +7 -0
- data/examples/zsh-completion/_dtas-enq +7 -0
- data/examples/zsh-completion/_dtas-mlib +29 -0
- data/examples/zsh-completion/_dtas-msinkctl +8 -0
- data/examples/zsh-completion/_dtas-partstats +7 -0
- data/examples/zsh-completion/_dtas-sinkedit +11 -0
- data/examples/zsh-completion/_dtas-sourceedit +11 -0
- data/examples/zsh-completion/_dtas-splitfx +17 -0
- data/examples/zsh-completion/_dtas-tl +52 -0
- data/examples/zsh-completion/_dtas-xdelay +17 -0
- data/lib/dtas.rb +1 -1
- data/lib/dtas/buffer/splice.rb +6 -4
- data/lib/dtas/player.rb +2 -2
- data/perl/dtas-graph +7 -2
- metadata +17 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db19072a9f74af0a63fe5d9d2656b06643acba7e3a64d99de59548583bf535c1
|
4
|
+
data.tar.gz: 751bdfe20a0ac951a32587a68d1adb860255be610644fd8605f3010c82cc6196
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cd403005637338693031ef441170a7fe1e7da77e86e826b3650e7d70344bafe9b3546c2873003f742da583457de7a544b24007dfecf017f7edd364edd05ce83
|
7
|
+
data.tar.gz: 282169bd243e103b3fea0398a31671e89c0c9ebba972d7924c4eb9542471410c9dcfa1f1b1c9fa2d0872145cd576aca528e96ec9d746bb889ac7eb5c96e4e286
|
data/Documentation/GNUmakefile
CHANGED
@@ -65,7 +65,7 @@ License: GPL-3.0+ L<https://www.gnu.org/licenses/gpl-3.0.txt>
|
|
65
65
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
66
66
|
|
67
67
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
68
|
-
and L<
|
68
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
69
69
|
|
70
70
|
No subscription is necessary to post to the mailing list.
|
71
71
|
|
@@ -78,7 +78,7 @@ a problem.
|
|
78
78
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
79
79
|
|
80
80
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
81
|
-
and L<
|
81
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
82
82
|
|
83
83
|
No subscription is necessary to post to the mailing list.
|
84
84
|
|
data/Documentation/dtas-ctl.pod
CHANGED
@@ -62,7 +62,7 @@ This defaults to ~/.dtas/player.sock
|
|
62
62
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
63
63
|
|
64
64
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
65
|
-
and L<
|
65
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
66
66
|
|
67
67
|
No subscription is necessary to post to the mailing list.
|
68
68
|
|
@@ -23,7 +23,7 @@ VISUAL / EDITOR - your favorite *nix text editor, defaults to 'vi' if unset.
|
|
23
23
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
24
24
|
|
25
25
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
26
|
-
and L<
|
26
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
27
27
|
|
28
28
|
No subscription is necessary to post to the mailing list.
|
29
29
|
|
data/Documentation/dtas-enq.pod
CHANGED
@@ -28,7 +28,7 @@ This defaults to ~/.dtas/player.sock
|
|
28
28
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
29
29
|
|
30
30
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
31
|
-
and L<
|
31
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
32
32
|
|
33
33
|
No subscription is necessary to post to the mailing list.
|
34
34
|
|
data/Documentation/dtas-env.pod
CHANGED
@@ -10,7 +10,7 @@ As dtas uses Bourne shell and exposes it to users, dtas should have
|
|
10
10
|
a cohesive set of common environment variables across its audio
|
11
11
|
production and playback environments. This attempts to document
|
12
12
|
them. Most of these environments are set and managed by dtas
|
13
|
-
itself, but users editing commands (e.g. via L<dtas-sourcedit(1)>
|
13
|
+
itself, but users editing commands (e.g. via L<dtas-sourcedit(1)>)
|
14
14
|
should be aware of them.
|
15
15
|
|
16
16
|
=head1 ENVIRONMENT
|
@@ -64,7 +64,7 @@ temporary files are placed for most programs.
|
|
64
64
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
65
65
|
|
66
66
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
67
|
-
and L<
|
67
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
68
68
|
|
69
69
|
No subscription is necessary to post to the mailing list.
|
70
70
|
|
@@ -45,7 +45,7 @@ This defaults to ~/.dtas/player.sock
|
|
45
45
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
46
46
|
|
47
47
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
48
|
-
and L<
|
48
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
49
49
|
|
50
50
|
No subscription is necessary to post to the mailing list.
|
51
51
|
|
@@ -109,7 +109,7 @@ state across restarts of dtas-player.
|
|
109
109
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
110
110
|
|
111
111
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
112
|
-
and L<
|
112
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
113
113
|
|
114
114
|
No subscription is necessary to post to the mailing list.
|
115
115
|
|
@@ -92,7 +92,7 @@ playback hardware are applied at the sink:
|
|
92
92
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
93
93
|
|
94
94
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
95
|
-
and L<
|
95
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
96
96
|
|
97
97
|
No subscription is necessary to post to the mailing list.
|
98
98
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
=head1 NAME
|
4
4
|
|
5
|
-
dtas-player_protocol - protocol for
|
5
|
+
dtas-player_protocol - protocol for controlling dtas-player
|
6
6
|
|
7
7
|
=head1 DESCRIPTION
|
8
8
|
|
@@ -382,7 +382,7 @@ Clear current tracklist
|
|
382
382
|
|
383
383
|
Show/or change consume status of the tracklist. Enabling this causes
|
384
384
|
tracks to be deleted from the tracklist after they are played or skipped.
|
385
|
-
With no args, this will show "true" or "false
|
385
|
+
With no args, this will show "true" or "false"
|
386
386
|
|
387
387
|
=item tl current
|
388
388
|
|
@@ -464,7 +464,7 @@ another client socket to issue non-watch commands.
|
|
464
464
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
465
465
|
|
466
466
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
467
|
-
and L<
|
467
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
468
468
|
|
469
469
|
No subscription is necessary to post to the mailing list.
|
470
470
|
|
@@ -71,7 +71,7 @@ See L<dtas-xdelay(1)>.
|
|
71
71
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
72
72
|
|
73
73
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
74
|
-
and L<
|
74
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
75
75
|
|
76
76
|
No subscription is necessary to post to the mailing list.
|
77
77
|
|
@@ -14,7 +14,7 @@ dtas-sinkedit spawns an editor to allow editing of a sink as a YAML file.
|
|
14
14
|
See L<dtas-player_protocol(7)> for details on SINKARGS.
|
15
15
|
|
16
16
|
On Linux machines with the sleepy_penguin RubyGem installed, L<inotify(7)>
|
17
|
-
is used to monitor the file for changes while the text
|
17
|
+
is used to monitor the file for changes while the text editor is running.
|
18
18
|
Each time a user finishes saving a file, changes are committed immediately.
|
19
19
|
This behavior may be disabled by using the -N or --no-watch command-line
|
20
20
|
switch.
|
@@ -64,7 +64,7 @@ This defaults to ~/.dtas/player.sock
|
|
64
64
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
65
65
|
|
66
66
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
67
|
-
and L<
|
67
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
68
68
|
|
69
69
|
No subscription is necessary to post to the mailing list.
|
70
70
|
|
@@ -17,7 +17,7 @@ non-interactively. This is useful for loading various profiles from the
|
|
17
17
|
filesystem.
|
18
18
|
|
19
19
|
On Linux machines with the sleepy_penguin RubyGem installed, L<inotify(7)>
|
20
|
-
is used to monitor the file for changes while the text
|
20
|
+
is used to monitor the file for changes while the text editor is running.
|
21
21
|
Each time a user finishes saving a file, changes are committed immediately.
|
22
22
|
This behavior may be disabled by using the -N or --no-watch command-line
|
23
23
|
switch.
|
@@ -71,7 +71,7 @@ This defaults to ~/.dtas/player.sock
|
|
71
71
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
72
72
|
|
73
73
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
74
|
-
and L<
|
74
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
75
75
|
|
76
76
|
No subscription is necessary to post to the mailing list.
|
77
77
|
|
data/Documentation/dtas-tl.pod
CHANGED
@@ -29,7 +29,7 @@ client).
|
|
29
29
|
=item consume [BOOLEAN] - show, enable, or disable consume mode
|
30
30
|
|
31
31
|
Enabling "consume" mode causes tracks to be removed when they are
|
32
|
-
done playing (or skipped.
|
32
|
+
done playing (or skipped).
|
33
33
|
|
34
34
|
=item current - display the current track, "NONE" if not playing
|
35
35
|
|
@@ -78,7 +78,7 @@ display the current tracklist
|
|
78
78
|
|
79
79
|
$ dtas-tl cat
|
80
80
|
|
81
|
-
to add an
|
81
|
+
to add an entire directory of FLAC files
|
82
82
|
|
83
83
|
$ dtas-tl addtail /path/to/directory/*.flac
|
84
84
|
|
@@ -114,7 +114,7 @@ This defaults to ~/.dtas/player.sock
|
|
114
114
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
115
115
|
|
116
116
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
117
|
-
and L<
|
117
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
118
118
|
|
119
119
|
No subscription is necessary to post to the mailing list.
|
120
120
|
|
@@ -80,7 +80,7 @@ are greatly appreciated.
|
|
80
80
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
81
81
|
|
82
82
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
83
|
-
and L<
|
83
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
84
84
|
|
85
85
|
No subscription is necessary to post to the mailing list.
|
86
86
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
All feedback welcome via plain-text mail to: L<mailto:dtas-all@nongnu.org>
|
7
7
|
|
8
8
|
Mailing list archives available at L<https://80x24.org/dtas-all/>
|
9
|
-
and L<
|
9
|
+
and L<https://lists.gnu.org/archive/html/dtas-all/>
|
10
10
|
|
11
11
|
No subscription is necessary to post to the mailing list.
|
12
12
|
}
|
data/GIT-VERSION-GEN
CHANGED
data/HACKING
CHANGED
@@ -18,7 +18,7 @@ developers do. Please send patches via git-send-email(1) to the public
|
|
18
18
|
mailing list at <dtas-all@nongnu.org>. Pull requests should be
|
19
19
|
formatted using git-request-pull(1).\
|
20
20
|
Mailing list archives available at <https://80x24.org/dtas-all/> and
|
21
|
-
<
|
21
|
+
<https://lists.gnu.org/archive/html/dtas-all/>\
|
22
22
|
No subscription is necessary to post to the mailing list.
|
23
23
|
|
24
24
|
# COPYRIGHT
|
data/INSTALL
CHANGED
@@ -39,10 +39,10 @@ For future upgrades of dtas (upgrades to dtas-linux will be infrequent)
|
|
39
39
|
|
40
40
|
Grab the latest tarball from our HTTPS site:
|
41
41
|
|
42
|
-
https://80x24.org/dtas/2019/dtas-0.
|
42
|
+
https://80x24.org/dtas/2019/dtas-0.17.0.tar.gz
|
43
43
|
|
44
|
-
$ tar zxvf dtas-0.
|
45
|
-
$ cd dtas-0.
|
44
|
+
$ tar zxvf dtas-0.17.0.tar.gz
|
45
|
+
$ cd dtas-0.17.0
|
46
46
|
$ sudo ruby setup.rb
|
47
47
|
|
48
48
|
GNU/Linux users may optionally install the "sleepy_penguin" package:
|
data/README
CHANGED
@@ -25,7 +25,7 @@ for audio. dtas-player supports:
|
|
25
25
|
* ReplayGain (including fallback gain and peak normalization)
|
26
26
|
|
27
27
|
dtas-player is a *nix pipeline and process manager. It may be used
|
28
|
-
spawn and pipe to
|
28
|
+
spawn and pipe to arbitrary Unix commands, not just audio-related
|
29
29
|
commands. It can interactively restart/replace the source (audio
|
30
30
|
decoder) component of a pipeline while keeping the sink (playback
|
31
31
|
endpoint) running.
|
data/TODO
CHANGED
@@ -3,7 +3,9 @@
|
|
3
3
|
|
4
4
|
* tests for bin/*
|
5
5
|
|
6
|
+
* consider rewriting piecemeal in a more stable glue language than Ruby
|
7
|
+
|
6
8
|
# COPYRIGHT
|
7
9
|
|
8
|
-
Copyright 2013-
|
10
|
+
Copyright 2013-2019 all contributors <dtas-all@nongnu.org>
|
9
11
|
License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
|
data/bin/dtas-console
CHANGED
@@ -53,8 +53,6 @@ def update_tfmt(prec, tsec)
|
|
53
53
|
events = []
|
54
54
|
interval = 1.0 / 10 ** prec_nr
|
55
55
|
|
56
|
-
pause = nil
|
57
|
-
|
58
56
|
def show_events(lineno, screen, events)
|
59
57
|
Curses.setpos(lineno += 1, 0)
|
60
58
|
Curses.clrtoeol
|
@@ -121,7 +119,6 @@ def may_fail(res, events)
|
|
121
119
|
pre_mute_vol = 1.0
|
122
120
|
enc_locale = Encoding.find("locale")
|
123
121
|
$stdout.set_encoding(enc_locale)
|
124
|
-
enc_opts = { undef: :replace, invalid: :replace, replace: '?' }
|
125
122
|
begin
|
126
123
|
Curses.init_screen
|
127
124
|
Curses.nonl
|
@@ -135,7 +132,6 @@ def may_fail(res, events)
|
|
135
132
|
pfmt = cur['format']
|
136
133
|
elapsed = samples = 0
|
137
134
|
fmt = total = ''
|
138
|
-
paused = false
|
139
135
|
if current = cur['current']
|
140
136
|
infile = current['infile'] || current['command']
|
141
137
|
elapsed = DTAS.now - current['spawn_at']
|
@@ -150,7 +146,6 @@ def may_fail(res, events)
|
|
150
146
|
end
|
151
147
|
elsif cur['paused'] && infile = cur['current_paused']
|
152
148
|
fmt = "[paused] (#{fmt_to_s(pfmt)})"
|
153
|
-
paused = true
|
154
149
|
infile = infile['command'] if Hash === infile
|
155
150
|
if Array === infile
|
156
151
|
infile, elapsed = infile
|
@@ -169,7 +164,8 @@ def may_fail(res, events)
|
|
169
164
|
# FS encoding != locale encoding, but we need to display an FS path
|
170
165
|
# name to whatever locale the terminal is encoded to, so force it
|
171
166
|
# and risk mojibake...
|
172
|
-
infile.encode(enc_locale,
|
167
|
+
infile.encode(enc_locale,
|
168
|
+
undef: :replace, invalid: :replace, replace: '?')
|
173
169
|
Curses.setpos(lineno += 1, 0)
|
174
170
|
Curses.clrtoeol
|
175
171
|
Curses.addstr(infile)
|
@@ -220,10 +216,9 @@ def may_fail(res, events)
|
|
220
216
|
case event
|
221
217
|
when "pause"
|
222
218
|
if current
|
223
|
-
|
219
|
+
current['infile'] || current['command']
|
224
220
|
end
|
225
221
|
when %r{\Afile }
|
226
|
-
pause = nil
|
227
222
|
end
|
228
223
|
events << "#{Time.now.strftime(tfmt)} #{event}"
|
229
224
|
# something happened, refresh current
|
data/bin/dtas-readahead
CHANGED
@@ -57,7 +57,7 @@ def seek_to_cur_pos(cur_pid, fp)
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
rescue Errno::ENOENT => e # race, process is dead
|
60
|
-
return
|
60
|
+
return nil
|
61
61
|
rescue => e
|
62
62
|
warn "error reading FDs from for PID:#{cur_pid}: #{e.message}"
|
63
63
|
end
|
@@ -71,7 +71,7 @@ def seek_to_cur_pos(cur_pid, fp)
|
|
71
71
|
end
|
72
72
|
pos
|
73
73
|
rescue Errno::ENOENT => e # race, process is dead
|
74
|
-
return
|
74
|
+
return nil
|
75
75
|
end
|
76
76
|
|
77
77
|
def children_of(ppid)
|
data/dtas-linux.gemspec
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
"via tee(), splice() and eventfd() on Linux"
|
13
13
|
s.email = %q{e@80x24.org}
|
14
14
|
s.files = []
|
15
|
-
s.homepage = 'https://80x24.org/dtas/'
|
15
|
+
s.homepage = 'https://80x24.org/dtas.git/about/'
|
16
16
|
s.add_dependency(%q<dtas>, '~> 0.16')
|
17
17
|
s.add_dependency(%q<sleepy_penguin>, '~> 3.5')
|
18
18
|
s.licenses = 'GPL-3.0+'
|
data/dtas-mpris.gemspec
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
"This is currently a dummy package as dtas-mpris is not implemented"
|
12
12
|
s.email = %q{e@80x24.org}
|
13
13
|
s.files = []
|
14
|
-
s.homepage = 'https://80x24.org/dtas/'
|
14
|
+
s.homepage = 'https://80x24.org/dtas.git/about/'
|
15
15
|
s.add_dependency(%q<dtas>)
|
16
16
|
s.add_dependency(%q<ruby-dbus>)
|
17
17
|
s.licenses = 'GPL-2.0+'
|
data/dtas.gemspec
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
s.email = %q{e@80x24.org}
|
11
11
|
s.executables = manifest.grep(%r{\Abin/}).map { |s| s.sub(%r{\Abin/}, "") }
|
12
12
|
s.files = manifest
|
13
|
-
s.homepage = 'https://80x24.org/dtas/'
|
13
|
+
s.homepage = 'https://80x24.org/dtas.git/about/'
|
14
14
|
s.licenses = "GPL-3.0+"
|
15
15
|
s.required_ruby_version = '>= 1.9.3'
|
16
16
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#compdef dtas-archive
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
|
6
|
+
_arguments -S \
|
7
|
+
"--type=[file type]" \
|
8
|
+
"--compression=[compression factor for sox]:select compression:({0..8})" \
|
9
|
+
"--jobs=[number of jobs]: :_guard '[0-9]#' value" \
|
10
|
+
"--stats[save stats on the file]" \
|
11
|
+
"--keep-going[continue after error]" \
|
12
|
+
"--dry-run[only print commands, do not run them]" \
|
13
|
+
"--repeat=[number of times to check]: :_guard '[0-9]#' value" \
|
14
|
+
"--help[display help message]" \
|
15
|
+
":select source:_files" \
|
16
|
+
":select destination:_files"
|
@@ -0,0 +1,114 @@
|
|
1
|
+
#compdef dtas-ctl
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
|
6
|
+
_arguments \
|
7
|
+
':dtas-ctl command:((
|
8
|
+
cd\:"change the current working directory of the player"
|
9
|
+
clear\:"clear current queue"
|
10
|
+
cue\:"display the index/offsets of the embedded CUE sheet"
|
11
|
+
current\:"output information about the current track/command in YAML"
|
12
|
+
enq\:"enqueue the given FILENAME for playback"
|
13
|
+
enq-cmd\:"run the following command for playback"
|
14
|
+
env\:"set/unset environment variables"
|
15
|
+
format\:"configure the format between source and sink"
|
16
|
+
pause\:"pause playback"
|
17
|
+
play\:"restart playback from pause"
|
18
|
+
play_pause\:"toggle the play/pause state"
|
19
|
+
queue\ cat\:"dump the contents of the queue as YAML"
|
20
|
+
restart\:"restarts all processes in the current pipeline"
|
21
|
+
rg\:"configure ReplayGain support"
|
22
|
+
seek\:"seek the current track to a specified time"
|
23
|
+
skip\:"abort current track/command"
|
24
|
+
sink\:"control sinks"
|
25
|
+
source\:"control sources"
|
26
|
+
state\ dump\:"immediately dump the state of the player"
|
27
|
+
tl\:"control tracklist"
|
28
|
+
trim\:"limits playback of all tracks in the tracklist"
|
29
|
+
watch\:"adds the client to the passive watch list for notifications"
|
30
|
+
))' \
|
31
|
+
"*::subcmd:->subcmd" && return 0
|
32
|
+
|
33
|
+
case "$words[1]" in
|
34
|
+
(cd)
|
35
|
+
_arguments \
|
36
|
+
":select dir:_path_files -/"
|
37
|
+
;;
|
38
|
+
(cue)
|
39
|
+
_arguments \
|
40
|
+
':dtas-ctl command:((
|
41
|
+
next\:"skip to the next cue sheet offset"
|
42
|
+
prev\:"skip to the previous cue sheet offset"
|
43
|
+
goto\:"go to the cue index"
|
44
|
+
seek\:"seek within the current cue index"
|
45
|
+
))'
|
46
|
+
;;
|
47
|
+
(enq)
|
48
|
+
_arguments \
|
49
|
+
"*:select file:_files"
|
50
|
+
;;
|
51
|
+
(format)
|
52
|
+
_arguments \
|
53
|
+
'*:dtas-ctl format command:((
|
54
|
+
channels\:"number of channels to use internally"
|
55
|
+
endian\:"change endianess"
|
56
|
+
bits\:"sample precision"
|
57
|
+
rate\:"sample rate of audio"
|
58
|
+
type\:"change the raw PCM format"
|
59
|
+
))'
|
60
|
+
;;
|
61
|
+
(seek)
|
62
|
+
_arguments \
|
63
|
+
":select track:_guard '[0-9]#' 'track number'"
|
64
|
+
;;
|
65
|
+
(sink)
|
66
|
+
_arguments \
|
67
|
+
':sink subcommand:((
|
68
|
+
ls\:"list names of current sinks"
|
69
|
+
cat\:"dump SINKNAME config in YAML"
|
70
|
+
rm\:"remove SINKNAME"
|
71
|
+
ed\:"create/edit SINKNAME"
|
72
|
+
))'
|
73
|
+
;;
|
74
|
+
(source)
|
75
|
+
_arguments \
|
76
|
+
':source subcommand:((
|
77
|
+
cat\:"dump the current source command and env in YAML"
|
78
|
+
ed\:"edit the source parameters"
|
79
|
+
ls\:"dump the names of sources sorted by tryorder"
|
80
|
+
restart\:"restart the current source command"
|
81
|
+
))'
|
82
|
+
;;
|
83
|
+
(state dump)
|
84
|
+
_arguments \
|
85
|
+
":select file:_files"
|
86
|
+
;;
|
87
|
+
(tl)
|
88
|
+
_arguments \
|
89
|
+
':tl subcommand:((
|
90
|
+
add\:"add files to the tracklist"
|
91
|
+
clear\:"clear current tracklist"
|
92
|
+
consume\:"show/or change consume status of the tracklist"
|
93
|
+
current\:"display the pathname to the currently playing track"
|
94
|
+
current-id\:"display the TRACKID of the currently playing track"
|
95
|
+
remove\:"remove the track with the given TRACKID from the track list"
|
96
|
+
get\:"returns a list of TRACKIDS mapped to shell-escaped filenames"
|
97
|
+
goto\:"plays the given TRACKID"
|
98
|
+
max\:"sets or gets the maximum number of tracks allowed in the tracklist"
|
99
|
+
next\:"jump to the next track in the tracklist"
|
100
|
+
prev\:"jump to the previous track in the tracklist"
|
101
|
+
repeat\:"show/or change repeat status of the tracklist"
|
102
|
+
shuffle\:"show/or change the current shuffle status of the tracklist"
|
103
|
+
swap\:"swaps the positions of two tracks"
|
104
|
+
tracks\:"returns a list of all TRACKIDS in the tracklist"
|
105
|
+
))'
|
106
|
+
;;
|
107
|
+
(trim)
|
108
|
+
_arguments \
|
109
|
+
":select beginning" \
|
110
|
+
":select end"
|
111
|
+
;;
|
112
|
+
(*)
|
113
|
+
;;
|
114
|
+
esac
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#compdef dtas-mlib
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
#
|
6
|
+
_arguments \
|
7
|
+
"--database=[database]:select file:_files" \
|
8
|
+
"--force[force updates]" \
|
9
|
+
"--help[display help message]" \
|
10
|
+
':dtas-mlib action:((
|
11
|
+
dump\:"dump database"
|
12
|
+
search\:"search database"
|
13
|
+
stats\:"display statistics"
|
14
|
+
update\:"migrate database"
|
15
|
+
))' \
|
16
|
+
"*::subcmd:->subcmd" && return 0
|
17
|
+
|
18
|
+
case "$words[1]" in
|
19
|
+
(dump|update)
|
20
|
+
_arguments -S \
|
21
|
+
":select directory:_path_files -/"
|
22
|
+
;;
|
23
|
+
(search)
|
24
|
+
_arguments -S \
|
25
|
+
"*:search term:"
|
26
|
+
;;
|
27
|
+
(*)
|
28
|
+
;;
|
29
|
+
esac
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#compdef dtas-msinkctl
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
|
6
|
+
_arguments \
|
7
|
+
"1:select action:(active{,-{set,add,sub}} nonblock)" \
|
8
|
+
"*:select sink:($(dtas-ctl sink ls 2> /dev/null))"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#compdef dtas-sinkedit
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
|
6
|
+
_arguments \
|
7
|
+
"--no-watch[disable inotify support]" \
|
8
|
+
"--dry-run[only print commands, do not run them]" \
|
9
|
+
"--verbose[print out commands sent to change the sink]" \
|
10
|
+
"--help[display help message]" \
|
11
|
+
":select sink:($(dtas-ctl sink ls 2> /dev/null))"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#compdef dtas-sourceedit
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
|
6
|
+
_arguments \
|
7
|
+
"--no-watch[disable inotify support]" \
|
8
|
+
"--dry-run[only print commands, do not run them]" \
|
9
|
+
"--verbose[print out commands sent to change the source]" \
|
10
|
+
"--help[display help message]" \
|
11
|
+
":select source:($(dtas-ctl source ls 2> /dev/null))"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#compdef dtas-splitfx
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
|
6
|
+
_arguments -S \
|
7
|
+
"--dry-run[only print commands, do not run them]" \
|
8
|
+
"--jobs=[number of jobs]: :_guard '[0-9]#' value" \
|
9
|
+
"--no-dither[don't apply sox dithering]" \
|
10
|
+
"--outdir=[select output directory]:select directory:_path_files -/" \
|
11
|
+
"--compression=[compression factor for sox]:select compression:({0..8})" \
|
12
|
+
"--rate=[sample rate of audio]:select sample rate:(22050 44100 48000)" \
|
13
|
+
"--bits=[sample precision]:select precision:(8 16 24)" \
|
14
|
+
"--trim=[sections of audio to cut]:select sections:_guard '[0-9,]#' 'value'" \
|
15
|
+
"--sox-pipe[use as pipeline]" \
|
16
|
+
'1:select splitfx file:_files -g "*.yml"' \
|
17
|
+
"*:select file:_files"
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#compdef dtas-tl
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
|
6
|
+
_arguments \
|
7
|
+
':dtas-tl command:((
|
8
|
+
aac\:"add tracks after current track in the tracklist"
|
9
|
+
addhead\:"add tracks to the beginning of the tracklist"
|
10
|
+
addtail\:"add tracks to the end of the tracklist"
|
11
|
+
consume\:"enabling \"consume\" mode"
|
12
|
+
current\:"display the current track"
|
13
|
+
current-id\:"display the track of the current track"
|
14
|
+
cat\:"display a tracklist"
|
15
|
+
clear\:"remove all tracks from the tracklist"
|
16
|
+
edit\:"spawn an editor to allow editing the tracklist"
|
17
|
+
goto\:"play track immediately"
|
18
|
+
reto\:"play track matching regular expression"
|
19
|
+
next\:"play the next track in the tracklist"
|
20
|
+
prev\:"play the previous track in the tracklist"
|
21
|
+
repeat\:"control track repeating"
|
22
|
+
shuffle\:"control playback randomization"
|
23
|
+
))' \
|
24
|
+
"*::subcmd:->subcmd" && return 0
|
25
|
+
|
26
|
+
case "$words[1]" in
|
27
|
+
(aac|addtail)
|
28
|
+
_arguments \
|
29
|
+
":select file:_files"
|
30
|
+
;;
|
31
|
+
(addhead)
|
32
|
+
_arguments \
|
33
|
+
"*:select file:_files"
|
34
|
+
;;
|
35
|
+
(consume|repeat|shuffle)
|
36
|
+
_arguments \
|
37
|
+
":select state:(true false)"
|
38
|
+
;;
|
39
|
+
(goto)
|
40
|
+
_arguments \
|
41
|
+
":select track:($(dtas-ctl tl tracks 2> /dev/null))"
|
42
|
+
;;
|
43
|
+
(reto)
|
44
|
+
_arguments \
|
45
|
+
"-F[use fixed strings]" \
|
46
|
+
"-i[ignore case]" \
|
47
|
+
":search term" \
|
48
|
+
":select beginning"
|
49
|
+
;;
|
50
|
+
(*)
|
51
|
+
;;
|
52
|
+
esac
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#compdef dtas-xdelay
|
2
|
+
|
3
|
+
# To the extent possible under law, James Rowe has waived all copyright and
|
4
|
+
# related or neighboring rights to this example.
|
5
|
+
|
6
|
+
_arguments -S \
|
7
|
+
"--crossover-frequency=[frequency at which to set the crossover]: :_guard '[0-9]#' frequency" \
|
8
|
+
"--lowpass-delay[delay the lowpass frequency instead of the highpass one]" \
|
9
|
+
"--channels=[number of channels]:select channels:(1 2)" \
|
10
|
+
"--rate=[sample rate of audio]:select sample rate:(22050 44100 48000)" \
|
11
|
+
"--type=[file type]:select output type:($(sox --help 2> /dev/null | sed -n '/AUDIO FILE FORMATS/s/.*: //p'))" \
|
12
|
+
"--dry-run[only print commands, do not run them]" \
|
13
|
+
"--lowpass=[Custom format string for lowpass filter]" \
|
14
|
+
"--highpass=[Custom format string for highpass filter]" \
|
15
|
+
":select input1:_files" \
|
16
|
+
":select input2:_files" \
|
17
|
+
":select delay:_guard '[0-9]#' delay"
|
data/lib/dtas.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# frozen_string_literal: true
|
4
4
|
|
5
5
|
# DTAS currently exposes no public API for Ruby programmers.
|
6
|
-
# See https://80x24.org/dtas/ for more info.
|
6
|
+
# See https://80x24.org/dtas.git/about/ for more info.
|
7
7
|
module DTAS
|
8
8
|
|
9
9
|
# try to use the monotonic clock in Ruby >= 2.1, it is immune to clock
|
data/lib/dtas/buffer/splice.rb
CHANGED
@@ -12,7 +12,6 @@ module DTAS::Buffer::Splice # :nodoc:
|
|
12
12
|
MAX_AT_ONCE_1 = 65536
|
13
13
|
F_MOVE = SleepyPenguin::F_MOVE
|
14
14
|
F_NONBLOCK = SleepyPenguin::F_NONBLOCK
|
15
|
-
TRY = { exception: false }.freeze
|
16
15
|
|
17
16
|
def buffer_size
|
18
17
|
@to_io.pipe_size
|
@@ -32,7 +31,8 @@ def discard(bytes)
|
|
32
31
|
def broadcast_one(targets, limit = nil)
|
33
32
|
# single output is always non-blocking
|
34
33
|
limit ||= MAX_AT_ONCE_1
|
35
|
-
s = SleepyPenguin.splice(@to_io, targets[0], limit, F_MOVE|F_NONBLOCK,
|
34
|
+
s = SleepyPenguin.splice(@to_io, targets[0], limit, F_MOVE|F_NONBLOCK,
|
35
|
+
exception: false)
|
36
36
|
if Symbol === s
|
37
37
|
targets # our one and only target blocked on write
|
38
38
|
else
|
@@ -71,7 +71,8 @@ def __broadcast_tee(blocked, targets, chunk_size)
|
|
71
71
|
targets.delete_if do |dst|
|
72
72
|
begin
|
73
73
|
t = (dst.nonblock? || most_teed == 0) ?
|
74
|
-
SleepyPenguin.tee(@to_io, dst, chunk_size, F_NONBLOCK,
|
74
|
+
SleepyPenguin.tee(@to_io, dst, chunk_size, F_NONBLOCK,
|
75
|
+
exception: false) :
|
75
76
|
__tee_in_full(@to_io, dst, chunk_size)
|
76
77
|
if Integer === t
|
77
78
|
if t > most_teed
|
@@ -119,7 +120,8 @@ def broadcast_inf(targets, limit = nil)
|
|
119
120
|
begin
|
120
121
|
targets << last
|
121
122
|
if last.nonblock? || most_teed == 0
|
122
|
-
s = SleepyPenguin.splice(@to_io, last, bytes, F_MOVE|F_NONBLOCK,
|
123
|
+
s = SleepyPenguin.splice(@to_io, last, bytes, F_MOVE|F_NONBLOCK,
|
124
|
+
exception: false)
|
123
125
|
if Symbol === s
|
124
126
|
blocked << last
|
125
127
|
|
data/lib/dtas/player.rb
CHANGED
@@ -282,7 +282,7 @@ def sink_death(sink, status)
|
|
282
282
|
if deleted[0]
|
283
283
|
warn("#{sink.name} died unexpectedly: #{status.inspect}")
|
284
284
|
deleted.each { |t| drop_target(t) }
|
285
|
-
|
285
|
+
do_pause unless @targets[0]
|
286
286
|
return # sink stays dead if it died unexpectedly
|
287
287
|
end
|
288
288
|
|
@@ -451,7 +451,7 @@ def __current_drop(src = @current)
|
|
451
451
|
# pull data from sink_buf into @targets, source feeds into sink_buf
|
452
452
|
def sink_iter
|
453
453
|
wait_iter = broadcast_iter(@sink_buf, @targets)
|
454
|
-
|
454
|
+
do_pause if nil == wait_iter # sink error, stop source
|
455
455
|
return wait_iter if @current
|
456
456
|
|
457
457
|
# no source left to feed sink_buf, drain the remaining data
|
data/perl/dtas-graph
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
#!/usr/bin/perl -w
|
2
|
-
# Copyright (C) 2013-2016 all contributors <dtas-all@nongnu.org>
|
2
|
+
# Copyright (C) 2013-2016, 2019 all contributors <dtas-all@nongnu.org>
|
3
3
|
# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
|
4
|
+
#
|
5
|
+
# Process visualizer which shows pipe connections between processes with
|
6
|
+
# ASCII art. Useful for displaying complex interations between different
|
7
|
+
# processes in a non-traditional pipeline.
|
4
8
|
use strict;
|
5
9
|
use Graph::Easy; # for ASCII-art graphs
|
6
10
|
$^O =~ /linux/ or print STDERR "$0 probably only works on Linux...\n";
|
@@ -123,7 +127,8 @@ foreach my $pid (sort { $a <=> $b } keys %pids) {
|
|
123
127
|
print "\nPIPEID PIPE_INO\n";
|
124
128
|
foreach my $pipe_id (sort { $a <=> $b } keys %graphed) {
|
125
129
|
printf "% 6s", "|$pipe_id";
|
126
|
-
|
130
|
+
my $ino = $graphed{$pipe_id};
|
131
|
+
printf " %u (0x%0x)\n", $ino, $ino;
|
127
132
|
}
|
128
133
|
|
129
134
|
print $graph->as_ascii;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dtas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dtas hackers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |-
|
14
14
|
Free Software command-line tools for audio playback, mastering, and
|
@@ -89,6 +89,19 @@ files:
|
|
89
89
|
- examples/README
|
90
90
|
- examples/splitfx.sample.yml
|
91
91
|
- examples/tfx.sample.yml
|
92
|
+
- examples/zsh-completion/README
|
93
|
+
- examples/zsh-completion/_dtas-archive
|
94
|
+
- examples/zsh-completion/_dtas-ctl
|
95
|
+
- examples/zsh-completion/_dtas-cueedit
|
96
|
+
- examples/zsh-completion/_dtas-enq
|
97
|
+
- examples/zsh-completion/_dtas-mlib
|
98
|
+
- examples/zsh-completion/_dtas-msinkctl
|
99
|
+
- examples/zsh-completion/_dtas-partstats
|
100
|
+
- examples/zsh-completion/_dtas-sinkedit
|
101
|
+
- examples/zsh-completion/_dtas-sourceedit
|
102
|
+
- examples/zsh-completion/_dtas-splitfx
|
103
|
+
- examples/zsh-completion/_dtas-tl
|
104
|
+
- examples/zsh-completion/_dtas-xdelay
|
92
105
|
- lib/dtas.rb
|
93
106
|
- lib/dtas/buffer.rb
|
94
107
|
- lib/dtas/buffer/read_write.rb
|
@@ -191,7 +204,7 @@ files:
|
|
191
204
|
- test/test_tracklist.rb
|
192
205
|
- test/test_unixserver.rb
|
193
206
|
- test/test_util.rb
|
194
|
-
homepage: https://80x24.org/dtas/
|
207
|
+
homepage: https://80x24.org/dtas.git/about/
|
195
208
|
licenses:
|
196
209
|
- GPL-3.0+
|
197
210
|
metadata: {}
|
@@ -210,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
223
|
- !ruby/object:Gem::Version
|
211
224
|
version: '0'
|
212
225
|
requirements: []
|
213
|
-
rubygems_version: 3.0.
|
226
|
+
rubygems_version: 3.1.0.pre2
|
214
227
|
signing_key:
|
215
228
|
specification_version: 4
|
216
229
|
summary: duct tape audio suite for *nix
|