Python3: fix voip module
diff --git a/scapy/modules/voip.py b/scapy/modules/voip.py
index 389990d..420ed64 100644
--- a/scapy/modules/voip.py
+++ b/scapy/modules/voip.py
@@ -8,7 +8,7 @@
 """
 
 from __future__ import absolute_import
-import os
+import subprocess
 ###################
 #   Listen VoIP   #
 ###################
@@ -21,12 +21,12 @@
 from scapy.modules.six.moves import range
 
 
-sox_base = "sox -t .ul %s - -t ossdsp /dev/dsp"
+sox_base = (["sox", "-t", ".ul"], ["-", "-t", "ossdsp", "/dev/dsp"])
 
 if WINDOWS:
     if conf.prog.sox is None:
         raise OSError("Sox must be installed to play VoIP packets")
-    sox_base = "\"" + conf.prog.sox + "\" -t .ul %s - -t waveaudio"
+    sox_base = ([conf.prog.sox, "-t", ".ul"], ["-", "-t", "waveaudio"])
 
 
 def _merge_sound_bytes(x, y, sample_size=2):
@@ -75,7 +75,9 @@
     to read RTP VoIP packets
     """
 
-    dsp, rd = os.popen2(sox_base % "")
+    proc = subprocess.Popen(sox_base[0] + sox_base[1], stdin=subprocess.PIPE,
+                            stdout=subprocess.PIPE)
+    dsp, rd = proc.stdin, proc.stdout
 
     def play(pkt):
         if not pkt:
@@ -113,7 +115,9 @@
     .. seealso:: voip_play
     to play only incoming packets.
     """
-    dsp, rd = os.popen2(sox_base % "-c 2")
+    proc = subprocess.Popen(sox_base[0] + ["-c", "2"] + sox_base[1],
+                            stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+    dsp, rd = proc.stdin, proc.stdout
     global x1, x2
     x1 = ""
     x2 = ""
@@ -133,7 +137,14 @@
             x1, x2, r = _merge_sound_bytes(x1, x2)
             dsp.write(r)
 
-    sniff(store=0, prn=play, **kargs)
+    try:
+        sniff(store=0, prn=play, **kargs)
+    finally:
+        try:
+            dsp.close()
+            rd.close()
+        except Exception:
+            pass
 
 
 def voip_play3(lst=None, **kargs):
@@ -144,7 +155,9 @@
     .. seealso:: voip_play
     for basic VoIP packets
     """
-    dsp, rd = os.popen2(sox_base % "")
+    proc = subprocess.Popen(sox_base[0] + sox_base[1], stdin=subprocess.PIPE,
+                            stdout=subprocess.PIPE)
+    dsp, rd = proc.stdin, proc.stdout
 
     def play(pkt, dsp=dsp):
         if pkt and pkt.haslayer(UDP) and pkt.haslayer(RTP):