• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • Unlinking Stereo Channels II

    January 10th, 2013
    sound, experiment, tech, vsl1818, math, music  [html]
    I have stereo channels I want to unlink. Simple linear interpolation turns out not to be the answer, so I need to determine the relationship between gain, pan, and the output levels experimentally. I set up my VSL1818 as:
      smartphone           AB 1818 VSL
    +------------+        +-----------+
    |  sine wave |        |           |
    | generation >--------> in1       |
    |     app    |        |      aux3 >-----+
    +------------+  +-----> in2       |     |
                    |     |      aux4 >--+  |
                    |  +--> in3       |  |  |
                    |  |  |           |  |  |
                    |  |  +-----------+  |  |
                    |  +-----------------+  |
                    +-----------------------+
    
    The phone generated a tone, which went into input 1 of the mixer. I connected outputs 3 and 4 of the vsl1818 back to inputs 2 and 3. In software I set the mixer to send input 1 to outputs 3 and 4. Then a program I wrote iterated through combinations of gain and pan while measuring the levels of input 2 and 3:
    pan %, gain %, left, right
    ...
    30, 60, 165, 143
    30, 61, 166, 145
    30, 62, 168, 146
    30, 63, 170, 147
    30, 64, 172, 150
    30, 65, 174, 151
    30, 66, 175, 153
    30, 67, 177, 156
    30, 68, 179, 157
    ...
    
    (full data, 10000 rows)
    This is frustrating because of two different sources of nonlinearity. The first is that gain and pan are combined in some way I don't yet understand. The second is that the chosen gain (out) and measured level (in) aren't linear either:

    Still, I can look at equivalence classes, combinations of gain and pan that all keep one channel the same while varying the other. Each graph shows all the combinations of gain (red) and pan (blue) that keep one channel at the specified level.

    One channel constant at 0 (raw)
    One channel constant at 24 (raw)
    One channel constant at 65 (raw)
    One channel constant at 84 (raw)
    One channel constant at 113 (raw)
    One channel constant at 131 (raw)
    One channel constant at 160 (raw)
    One channel constant at 187 (raw)
    One channel constant at 221 (raw)
    One channel constant at 235 (raw)

    My goal is two functions:

      def to_gain_pan(left, right):
         ...
         return gain, pan
    
      def to_left_right(gain, pan):
         ...
         return left, right
    
    I think I now have the data I need to write these functions, but I'm still not sure what they are.

    Comment via: google plus, facebook

    Recent posts on blogs I like:

    The Limit of Circles in the Suburbs

    In dense urban cores, it’s valuable to run circular rail lines. They connect dense near-center neighborhoods to one another without going through the more congested center, and help make transferring between parallel lines more efficient, again through av…

    via Pedestrian Observations September 6, 2020

    Collections: Bread, How Did They Make It? Addendum: Rice!

    As an addendum on to our four-part look at the general structures of the farming of cereal grains (I, II, III, IV) this post is going to briefly discuss some of the key ways that the structures of rice farming differ from the structures of wheat and barle…

    via A Collection of Unmitigated Pedantry September 4, 2020

    Notes on “Anthropology of Childhood” by David Lancy

    I read David Lancy’s “The Anthropology of Childhood: Cherubs, Chattel, and Changelings” and highlighted some passages. A lot of passages, it turns out. [content note: discussion of abortion and infanticide, including infanticide of children with disabilit…

    via The whole sky August 27, 2020

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact