everything related to duct tape audio suite (dtas)
 help / color / Atom feed
* [PATCH] use omap (ordered map) for env hashes
@ 2015-01-26 21:52 Eric Wong
  0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2015-01-26 21:52 UTC (permalink / raw)
  To: dtas-all; +Cc: Eric Wong

While the Ruby Hash class is ordered in 1.9+, the YAML
specifications do not specify hashes as ordered by default.
Thus we must explicitly declare ordering via !omap for
interopability with non-Ruby tools.

This makes the YAML output of dtas-sourcedit and dtas-sinkedit
slightly more verbose

Users of dtas-splitfx are also encouraged to declare !omap
when creating their YAML files for interoperability.

Ordering env is important because any implementation of
built-in variable expansion is dependent on it.
---
 Documentation/dtas-splitfx.txt | 4 ++--
 examples/splitfx.sample.yml    | 2 +-
 examples/tfx.sample.yml        | 2 +-
 lib/dtas/player.rb             | 6 ++++++
 4 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/Documentation/dtas-splitfx.txt b/Documentation/dtas-splitfx.txt
index 3c421a4..8e37523 100644
--- a/Documentation/dtas-splitfx.txt
+++ b/Documentation/dtas-splitfx.txt
@@ -38,8 +38,8 @@ to use ecasound(1), too.
 # FILE FORMAT
 
 * infile - string, the pathname of the original audio file
-* env - hash of environment variables to set for all commands
-    env:
+* env - ordered hash of environment variables to set for all commands
+    env: !omap
       FX: vol +3dB stats
 * comments - hash of common tags for all audio (e.g. ARTIST, ALBUM, YEAR)
     comments:
diff --git a/examples/splitfx.sample.yml b/examples/splitfx.sample.yml
index d7ee06b..bbd224b 100644
--- a/examples/splitfx.sample.yml
+++ b/examples/splitfx.sample.yml
@@ -11,7 +11,7 @@ comments:
 # the sox command for dtas-player playback, there is no need to
 # specify this as it is the default:
 # command: exec sox "$INFILE" $SOXFMT - $TRIMFX $RGFX $FX
-env:
+env: !omap
   PATH: $PATH
   # these effects may be used in any command in this file, including targets
   SOX_OPTS: $SOX_OPTS -R
diff --git a/examples/tfx.sample.yml b/examples/tfx.sample.yml
index 2cbfbbc..205a0a1 100644
--- a/examples/tfx.sample.yml
+++ b/examples/tfx.sample.yml
@@ -4,7 +4,7 @@
 # test_trimfx.rb relies on this.
 ---
 infile: foo.flac
-env:
+env: !omap
   PATH: $PATH
   SOX_OPTS: $SOX_OPTS -R
   I2: second.flac
diff --git a/lib/dtas/player.rb b/lib/dtas/player.rb
index d63bc8a..d6707c3 100644
--- a/lib/dtas/player.rb
+++ b/lib/dtas/player.rb
@@ -120,6 +120,10 @@ class DTAS::Player # :nodoc:
     rv
   end
 
+  def to_omap(hash)
+    YAML::Omap === hash ? hash : YAML::Omap.new.merge!(hash)
+  end
+
   def self.load(hash)
     rv = new
     rv.instance_eval do
@@ -150,6 +154,7 @@ class DTAS::Player # :nodoc:
         @source_map.each do |name, src|
           src_hsh = v[name] or next
           src.load!(src_hsh)
+          src.env = to_omap(src.env)
         end
         source_map_reload
       end
@@ -161,6 +166,7 @@ class DTAS::Player # :nodoc:
       if sinks = hash["sinks"]
         sinks.each do |sink_hsh|
           sink = DTAS::Sink.load(sink_hsh)
+          sink.env = to_omap(sink.env)
           @sinks[sink.name] = sink
         end
       end
-- 
EW



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, back to index

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-26 21:52 [PATCH] use omap (ordered map) for env hashes Eric Wong

everything related to duct tape audio suite (dtas)

Archives are clonable:
	git clone --mirror https://80x24.org/dtas-all
	git clone --mirror http://ou63pmih66umazou.onion/dtas-all

Example config snippet for mirrors

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.audio.dtas
	nntp://ou63pmih66umazou.onion/inbox.comp.audio.dtas

 note: .onion URLs require Tor: https://www.torproject.org/

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git