         
         switch identifier {
         case "ColumnInput", "ColumnOutput": return "Channel \(row + 1)"
-        case "ColumnInLevel": return NSNumber(float: 0.0)
+        case "ColumnInLevel":
+            if let p = processor {
+                return NSNumber(double: 100.0 * (p.getInputForChannel(row) ?? 0.0))
+            }
+            return NSNumber(double: 0.00)
         case "ColumnOutLevel":
             if let p = processor {
-                return NSNumber(float: 100.0 * (p.getOutputForChannel(row) ?? 0.0))
-            }
-            return NSNumber(float: 0.00)
+                return NSNumber(double: 100.0 * (p.getOutputForChannel(row) ?? 0.0))
+            }
+            return NSNumber(double: 0.00)
         case "ColumnNetwork": return nil == processorEntries[row].config ? "Not Selected" : processorEntries[row].network
         default: return nil
         }

        let index = channels[channel]
        guard index >= 0 else { return }
        
        // append audio samples
        detectors[index].appendAudioData(data, withSamples: length)
        
        // process
        dispatch_async(queueProcessing) {
            if self.detectors[index].seenSyllable() {
                // log
                DLog("\(channel) play")
                

//

import Cocoa
import Accelerate
import AudioToolbox

struct ProcessorEntry {
