dtas 0.16.1 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Documentation/GNUmakefile +1 -1
  3. data/Documentation/dtas-archive.pod +1 -1
  4. data/Documentation/dtas-console.pod +1 -1
  5. data/Documentation/dtas-ctl.pod +1 -1
  6. data/Documentation/dtas-cueedit.pod +1 -1
  7. data/Documentation/dtas-enq.pod +1 -1
  8. data/Documentation/dtas-env.pod +2 -2
  9. data/Documentation/dtas-msinkctl.pod +1 -1
  10. data/Documentation/dtas-player.pod +1 -1
  11. data/Documentation/dtas-player_effects.pod +1 -1
  12. data/Documentation/dtas-player_protocol.pod +3 -3
  13. data/Documentation/dtas-player_sink_examples.pod +1 -1
  14. data/Documentation/dtas-sinkedit.pod +2 -2
  15. data/Documentation/dtas-sourceedit.pod +2 -2
  16. data/Documentation/dtas-tl.pod +3 -3
  17. data/Documentation/dtas-xdelay.pod +1 -1
  18. data/Documentation/update-footer.rb +1 -1
  19. data/GIT-VERSION-GEN +1 -1
  20. data/HACKING +1 -1
  21. data/INSTALL +3 -3
  22. data/README +1 -1
  23. data/TODO +3 -1
  24. data/bin/dtas-console +3 -8
  25. data/bin/dtas-readahead +2 -2
  26. data/dtas-linux.gemspec +1 -1
  27. data/dtas-mpris.gemspec +1 -1
  28. data/dtas.gemspec +1 -1
  29. data/examples/zsh-completion/README +3 -0
  30. data/examples/zsh-completion/_dtas-archive +16 -0
  31. data/examples/zsh-completion/_dtas-ctl +114 -0
  32. data/examples/zsh-completion/_dtas-cueedit +7 -0
  33. data/examples/zsh-completion/_dtas-enq +7 -0
  34. data/examples/zsh-completion/_dtas-mlib +29 -0
  35. data/examples/zsh-completion/_dtas-msinkctl +8 -0
  36. data/examples/zsh-completion/_dtas-partstats +7 -0
  37. data/examples/zsh-completion/_dtas-sinkedit +11 -0
  38. data/examples/zsh-completion/_dtas-sourceedit +11 -0
  39. data/examples/zsh-completion/_dtas-splitfx +17 -0
  40. data/examples/zsh-completion/_dtas-tl +52 -0
  41. data/examples/zsh-completion/_dtas-xdelay +17 -0
  42. data/lib/dtas.rb +1 -1
  43. data/lib/dtas/buffer/splice.rb +6 -4
  44. data/lib/dtas/player.rb +2 -2
  45. data/perl/dtas-graph +7 -2
  46. metadata +17 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b74b23fa5bd7ea3dc3cf6a7799db5942501eebe4e83a8a2d20040124bd54197
4
- data.tar.gz: fbda6adfd9bcb6840d0dbcc2e9591df1a7f82b1c9ab39e3f85b05bcdef995443
3
+ metadata.gz: db19072a9f74af0a63fe5d9d2656b06643acba7e3a64d99de59548583bf535c1
4
+ data.tar.gz: 751bdfe20a0ac951a32587a68d1adb860255be610644fd8605f3010c82cc6196
5
5
  SHA512:
6
- metadata.gz: aad4a37ebae9e0452f173f6792637bfc1fc2742fbe5b8acaecff9eea7d51679430865ba2ebef2c056222bfe54a4d839423dc5f4ce34cff6380d853e4397a3d15
7
- data.tar.gz: 0fbdd8d7f01047a8d700138adac8413c50492a646d67cc30752ec4b5468f4a5b28204d6234ed0fb909c49b19c5dd5bf9bcb1fa34bba8f500dcb6eaf6dc2dd775
6
+ metadata.gz: 4cd403005637338693031ef441170a7fe1e7da77e86e826b3650e7d70344bafe9b3546c2873003f742da583457de7a544b24007dfecf017f7edd364edd05ce83
7
+ data.tar.gz: 282169bd243e103b3fea0398a31671e89c0c9ebba972d7924c4eb9542471410c9dcfa1f1b1c9fa2d0872145cd576aca528e96ec9d746bb889ac7eb5c96e4e286
@@ -69,7 +69,7 @@ all :: txt
69
69
 
70
70
  %.txt : %.pod
71
71
  $(pod2text) $< $@+
72
- touch -r $< $@+ 2>/dev/null || true # GNU-ism
72
+ touch -r $< $@+
73
73
  mv $@+ $@
74
74
 
75
75
  clean::
@@ -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<ftp://lists.gnu.org/dtas-all/>
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<ftp://lists.gnu.org/dtas-all/>
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
 
@@ -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<ftp://lists.gnu.org/dtas-all/>
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<ftp://lists.gnu.org/dtas-all/>
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
 
@@ -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<ftp://lists.gnu.org/dtas-all/>
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
 
@@ -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<ftp://lists.gnu.org/dtas-all/>
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<ftp://lists.gnu.org/dtas-all/>
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<ftp://lists.gnu.org/dtas-all/>
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<ftp://lists.gnu.org/dtas-all/>
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 controling dtas-player
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<ftp://lists.gnu.org/dtas-all/>
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<ftp://lists.gnu.org/dtas-all/>
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 exitor is running.
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<ftp://lists.gnu.org/dtas-all/>
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 exitor is running.
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<ftp://lists.gnu.org/dtas-all/>
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
 
@@ -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 an entire directory of FLAC files
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<ftp://lists.gnu.org/dtas-all/>
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<ftp://lists.gnu.org/dtas-all/>
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<ftp://lists.gnu.org/dtas-all/>
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
  }
@@ -5,7 +5,7 @@
5
5
  CONSTANT = "DTAS::VERSION"
6
6
  RVF = "lib/dtas/version.rb"
7
7
  GVF = "GIT-VERSION-FILE"
8
- DEF_VER = "v0.16.1"
8
+ DEF_VER = "v0.17.0"
9
9
  vn = DEF_VER
10
10
 
11
11
  # First see if there is a version file (included in release tarballs),
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
- <ftp://lists.gnu.org/dtas-all/>\
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.16.1.tar.gz
42
+ https://80x24.org/dtas/2019/dtas-0.17.0.tar.gz
43
43
 
44
- $ tar zxvf dtas-0.16.1.tar.gz
45
- $ cd dtas-0.16.1
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 abitrary Unix commands, not just audio-related
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-2016 all contributors <dtas-all@nongnu.org>\
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>
@@ -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, enc_opts)
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
- pause = current['infile'] || current['command']
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
@@ -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 false
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 false
74
+ return nil
75
75
  end
76
76
 
77
77
  def children_of(ppid)
@@ -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+'
@@ -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+'
@@ -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,3 @@
1
+ To use the completion functions defined in this directory either: add
2
+ the completions you wish to use to a directory in your $fpath, or add
3
+ this directory's path to $fpath *prior* to calling compinit.
@@ -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,7 @@
1
+ #compdef dtas-cueedit
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
+ ':select file:_files -g "*.flac"'
@@ -0,0 +1,7 @@
1
+ #compdef dtas-enq
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
+ "*:select file:_files"
@@ -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,7 @@
1
+ #compdef dtas-partstats
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
+ ":select file:_files"
@@ -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"
@@ -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
@@ -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, TRY)
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, TRY) :
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, TRY)
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
 
@@ -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
- __current_drop unless @targets[0]
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
- __current_drop if nil == wait_iter # sink error, stop source
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
@@ -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
- print " ", $graphed{$pipe_id}, "\n";
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.16.1
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-01-02 00:00:00.000000000 Z
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.1
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