sound trigger/external switch for tethered shooting

Everything camera related. Includes triggers, batteries, power supplies, flatbeds and sheet-feeding scanners, too.

Moderator: peterZ

Post Reply
User avatar
Gerard
Posts: 154
Joined: 17 Oct 2010, 07:15
Number of books owned: 0
Location: Berlin (Germany)

sound trigger/external switch for tethered shooting

Post by Gerard »

Hi,

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
2012-05-20 18.16.51.jpg
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)
this script can run in background and send an key press to the application in forderground
Post Reply