A small Python script that sets sound emulation variables for a particular USB microphone that you want to use, and sets the microphone volume level, since that is often set at zero in the Linux context.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #!/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()
|
Tags: sound, virtualbox