Welcome, guest | Sign In | My Account | Store | Cart
#!/usr/bin/python
# -*- coding: utf-8 -*-
''' Sets sound emulation variables for USB microphone CARD_NAME. 
Also sets the microphone volume level, since that is often set at 
zero in the Linux context. VirtualBox is reniced for better
performance.'''

import codecs
from os import environ, system
from subprocess import Popen, PIPE
from time import sleep
import sys

HOME = environ['HOME']
CARD_NAME = 'C-Media USB Audio Device'

def start_vm():
    """Start the virtual machine, possible using emulation."""

    my_env = environ
    if opts.emulate:
        # aplay -l | awk '/C-Media USB Audio Device/ { print $2 }' | sed 's/:/,/'
        # VBOX_ALSA_DAC_DEV="hw:1,0" VBOX_ALSA_ADC_DEV="hw:1,0" VirtualBox -startvm "urd-xp"
        aplay_output = Popen(["aplay", "-l"], stdout=PIPE).communicate()[0].splitlines()
        for line in aplay_output:
            if CARD_NAME in line:
                card_info = line.split(' ')
                card_number = card_info[1][0:-1]
                print "card_number", card_number
                DEVICE = 'hw:%s,0' % card_number
                my_env["VBOX_ALSA_DAC_DEV"] = DEVICE
                my_env["VBOX_ALSA_ADC_DEV"] = DEVICE
                # amixer -c 1 cset name='Auto Gain Control' 0
                Popen(['amixer', '-c', card_number, 'cset', 'name=Auto Gain Control', '0']) #1
                Popen(['amixer', '-c', card_number, 'cset', 'name=Mic Capture Volume', '16']) #13
                Popen(['amixer', '-c', card_number, 'cset', 'name=Mic Playback Volume', '12'])
                Popen(['amixer', '-c', card_number, 'cset', 'name=Speaker Playback Volume', '120'])
                break
        if not card_number:
            print "\nSorry, %s not found" % CARD_NAME
            print aplay_output
            sys.exit()
            
    ## echo "$USER ALL= NOPASSWD:/usr/bin/renice,/usr/bin/nice" >> /etc/sudoers
    # VirtualBox -startvm urd-xp & sleep 4; \
    # sudo renice -n -5 `ps -eL | g VirtualBox | awk '{print $2}'`
    Popen(['VirtualBox', '-startvm', 'urd-xp'], env = my_env)
    sleep(4)
    print "** renicing"
    Popen("sudo renice -n -3 `ps -eL | grep VirtualBox | awk '{print $2}'`", 
        shell = True)

if '__main__' == __name__:
    sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

    import optparse # Late import, in case this project becomes a library
    opt_parser = optparse.OptionParser(usage="usage: %prog [options] FILE")
    opt_parser.add_option('-e', '--emulate', 
                    action="store_true", default=False,
                    help="Use USB sound as emulated hardware")
    opts, args = opt_parser.parse_args()

    start_vm()

Diff to Previous Revision

--- revision 3 2010-11-24 19:44:49
+++ revision 4 2010-12-14 14:53:07
@@ -2,33 +2,62 @@
 # -*- coding: utf-8 -*-
 ''' Sets sound emulation variables for USB microphone CARD_NAME. 
 Also sets the microphone volume level, since that is often set at 
-zero in the Linux context.'''
+zero in the Linux context. VirtualBox is reniced for better
+performance.'''
 
-# aplay -l | awk '/C-Media USB Audio Device/ { print $2 }' | sed 's/:/,/'
-# VBOX_ALSA_DAC_DEV="hw:1,0" VBOX_ALSA_ADC_DEV="hw:1,0" VirtualBox -startvm "urd-xp"
-
+import codecs
 from os import environ, system
 from subprocess import Popen, PIPE
+from time import sleep
+import sys
 
 HOME = environ['HOME']
 CARD_NAME = 'C-Media USB Audio Device'
 
-aplay_output = Popen(["aplay", "-l"], stdout=PIPE).communicate()[0].splitlines()
-for line in aplay_output:
-    if CARD_NAME in line:
-        card_info = line.split(' ')
-        card_number = card_info[1][0:-1]
-        print "card_number", card_number
-        DEVICE = 'hw:%s,0' % card_number
-        my_env = environ
-        my_env["VBOX_ALSA_DAC_DEV"] = DEVICE
-        my_env["VBOX_ALSA_ADC_DEV"] = DEVICE
-        Popen(['amixer', '-c', '2', 'cset', 'name=Mic Capture Volume', '15'])
-        Popen(['amixer', '-c', '2', 'cset', 'name=Mic Playback Volume', '12'])
-        Popen(['amixer', '-c', '2', 'cset', 'name=Speaker Playback Volume', '15'])
-        Popen(['VirtualBox', '-startvm', 'urd-xp'], env = my_env)
-        break
-if not card_number:
-    print "\nSorry, %s not found" % CARD_NAME
-    print aplay_output
-    
+def start_vm():
+    """Start the virtual machine, possible using emulation."""
+
+    my_env = environ
+    if opts.emulate:
+        # aplay -l | awk '/C-Media USB Audio Device/ { print $2 }' | sed 's/:/,/'
+        # VBOX_ALSA_DAC_DEV="hw:1,0" VBOX_ALSA_ADC_DEV="hw:1,0" VirtualBox -startvm "urd-xp"
+        aplay_output = Popen(["aplay", "-l"], stdout=PIPE).communicate()[0].splitlines()
+        for line in aplay_output:
+            if CARD_NAME in line:
+                card_info = line.split(' ')
+                card_number = card_info[1][0:-1]
+                print "card_number", card_number
+                DEVICE = 'hw:%s,0' % card_number
+                my_env["VBOX_ALSA_DAC_DEV"] = DEVICE
+                my_env["VBOX_ALSA_ADC_DEV"] = DEVICE
+                # amixer -c 1 cset name='Auto Gain Control' 0
+                Popen(['amixer', '-c', card_number, 'cset', 'name=Auto Gain Control', '0']) #1
+                Popen(['amixer', '-c', card_number, 'cset', 'name=Mic Capture Volume', '16']) #13
+                Popen(['amixer', '-c', card_number, 'cset', 'name=Mic Playback Volume', '12'])
+                Popen(['amixer', '-c', card_number, 'cset', 'name=Speaker Playback Volume', '120'])
+                break
+        if not card_number:
+            print "\nSorry, %s not found" % CARD_NAME
+            print aplay_output
+            sys.exit()
+            
+    ## echo "$USER ALL= NOPASSWD:/usr/bin/renice,/usr/bin/nice" >> /etc/sudoers
+    # VirtualBox -startvm urd-xp & sleep 4; \
+    # sudo renice -n -5 `ps -eL | g VirtualBox | awk '{print $2}'`
+    Popen(['VirtualBox', '-startvm', 'urd-xp'], env = my_env)
+    sleep(4)
+    print "** renicing"
+    Popen("sudo renice -n -3 `ps -eL | grep VirtualBox | awk '{print $2}'`", 
+        shell = True)
+
+if '__main__' == __name__:
+    sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
+
+    import optparse # Late import, in case this project becomes a library
+    opt_parser = optparse.OptionParser(usage="usage: %prog [options] FILE")
+    opt_parser.add_option('-e', '--emulate', 
+                    action="store_true", default=False,
+                    help="Use USB sound as emulated hardware")
+    opts, args = opt_parser.parse_args()
+
+    start_vm()

History