i just made some experiments, i have two tethered cameras and an software to control it, this software shoots both cameras after a key press.
hitting that key on the keyboard while scanning is not so effective, so i've wrote a small python script that looks at the sound level and then emulates an key press.
next i hooked an switch to a video/audio out cable from my camera (cinch on one side and an trs connector on the other side) and put in my microphone input and this works also the sound2key python script (only linux)
Code: Select all
#!/usr/bin/python
## This is an example of a simple sound capture script.
##
## The script opens an ALSA pcm for sound capture. Set
## various attributes of the capture, and reads in a loop,
## Then prints the volume.
##
## To test it out, run it and shout at your microphone:
import alsaaudio, time, audioop
import virtkey
v = virtkey.virtkey()
# Open the device in nonblocking capture mode. The last argument could
# just as well have been zero for blocking mode. Then we could have
# left out the sleep call in the bottom of the loop
inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NONBLOCK)
# Set attributes: Mono, 8000 Hz, 16 bit little endian samples
inp.setchannels(1)
inp.setrate(8000)
inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)
# The period size controls the internal number of frames per period.
# The significance of this parameter is documented in the ALSA api.
# For our purposes, it is suficcient to know that reads from the device
# will return this many frames. Each frame being 2 bytes long.
# This means that the reads below will return either 320 bytes of data
# or 0 bytes of data. The latter is possible because we are in nonblocking
# mode.
inp.setperiodsize(160)
i=0
while True:
# Read data from device
l,data = inp.read()
if l:
# Return the maximum of the absolute value of all samples in a fragment.
v = audioop.max(data, 2)
if v > 22000:
print("shoot %04d %04d"%(i,v) )
i=i+1;
#where c is the char you want to type.
virtkey.virtkey().press_unicode(ord("b"))
time.sleep(.01)
virtkey.virtkey().release_unicode(ord("b"))
time.sleep(.001)