def runRecordGame(pipeline, game): try: freq = float(game['freq']) if game['band'] == 'am': freq = freq / 1000 # Configure the shark (set station, turn fin red to indicate recording) execute('fm -q %.2f' % (freq)) # Record the game print 'Recording ...', game execute(pipeline) print 'Recording complete.' except ExecuteError, err: print err
def verifAddrs(finName): fin = fins[finName] audioAddr = fin.audioAddr ctrlAddr = fin.ctrlAddr print "Using %s fin (audioAddr='%s', ctrlAddr='%s').\n" % ( finName, fin.audioAddr, fin.ctrlAddr ) print fill(dedent("""\ This fin is about to be tested. This will reset the station on both fins. Do not do this if you are already recording a program on the other fin. You have 10 seconds to kill me to avoid changing the station. """)) for i in range(9, -1, -1): sleep(1) print i sleep(1) print fill(dedent("""\ This test sets both fins to KFOG (97.7 FM), a music station. It then sets the fin that is to be used to KNBR (680 AM), a sports talk station and then to KQED (88.5 FM), which is NPR. Each has its own distinct sound that should be distinguishable. You should hear 10 seconds of sports talk and then 10 seconds of NPR. If you do not, then there are errors in the addresses and you need to fix fins.py. """)) try: for audioAddr, ctrlAddr in product(audioAddrs, ctrlAddrs): for addr in ctrlAddrs: execute('sharkctrl -fm 97.7 %s' % addr) audioAddr = fin.audioAddr ctrlAddr = fin.ctrlAddr print "ctrl addr:", ctrlAddr print "audio addr:", audioAddr print "station: KNBR 680 AM" execute('sharkctrl -am 680 %s' % ctrlAddr) execute('sharkctrl -blue 0 %s' % ctrlAddr) execute('sharkctrl -red 1 %s' % ctrlAddr) execute(pipeline % audioAddr) print "station: KQED 88.5 FM" execute('sharkctrl -fm 88.5 %s' % ctrlAddr) execute('sharkctrl -blue 63 %s' % ctrlAddr) execute('sharkctrl -red 1 %s' % ctrlAddr) execute(pipeline % audioAddr) execute('sharkctrl -red 0 %s' % ctrlAddr) execute('sharkctrl -blue 63 %s' % ctrlAddr) except ExecuteError, err: exit(err.text)
print "station: KNBR 680 AM" execute('sharkctrl -am 680 %s' % ctrlAddr) execute('sharkctrl -blue 0 %s' % ctrlAddr) execute('sharkctrl -red 1 %s' % ctrlAddr) execute(pipeline % audioAddr) print "station: KQED 88.5 FM" execute('sharkctrl -fm 88.5 %s' % ctrlAddr) execute('sharkctrl -blue 63 %s' % ctrlAddr) execute('sharkctrl -red 1 %s' % ctrlAddr) execute(pipeline % audioAddr) execute('sharkctrl -red 0 %s' % ctrlAddr) execute('sharkctrl -blue 63 %s' % ctrlAddr) except ExecuteError, err: exit(err.text) if __name__ == "__main__": try: print "Football Fin" print "############" verifAddrs('football') print print "Baseball Fin" print "############" verifAddrs('baseball') except KeyboardInterrupt: execute('sharkctrl -red 0 %s' % ctrlAddr) execute('sharkctrl -blue 63 %s' % ctrlAddr) print "Killed at user request." except ExecuteError, err: exit(err.text)
recorder=recorder, encoder=encoder ) # assure destination directory exists mkdir(expandPath(AudioDirectory)) # create a symbolic link to the latest game remove(latest) try: os.symlink(filename, latest) except (IOError, OSError), err: sys.exit("%s: %s." % (err.filename, err.strerror)) try: # Configure the shark (set station, turn fin red to indicate recording) execute('sharkctrl %s %s' % (Station, SharkCtrlAddr)) execute('sharkctrl -blue 0 %s' % SharkCtrlAddr) execute('sharkctrl -red 1 %s' % SharkCtrlAddr) # Record the game print 'Recording {desc} ({date}).'.format(**game) execute(pipeline) print 'Recording complete.' # Turn the fin back to blue to indicate not recording execute('sharkctrl -red 0 %s' % SharkCtrlAddr) execute('sharkctrl -blue 63 %s' % SharkCtrlAddr) except ExecuteError, err: sys.exit(err.text) announceNextGame(nextGame)
END:VEVENT """ ) IcsFooter = dedent( """\ END:VCALENDAR """ ) IcsFilename = "test.ics" Duration = 1 # minutes (must be integer) Repetitions = 2 now = datetime.utcnow() starts = [] for offset in range(Repetitions): startTime = now + timedelta(0, 60 * Duration * (2 * offset + 1)) # starts += [startTime.astimezone(tz.timezone('UTC'))] starts += [startTime] with open(IcsFilename, "w") as icsFile: icsFile.write(IcsHeader) for start in starts: icsFile.write(IcsBody.format(time=start.strftime("%Y%m%dT%H%M%SZ"), game="test%s" % start.strftime("%M"))) icsFile.write(IcsFooter) try: execute("./49ersd.py --duration {} {}".format(Duration / 60, IcsFilename)) except ExecuteError, err: sys.exit(err.text) except KeyboardInterrupt: exit("Killed by user")
def record(path, station, nextGame, Encoder): filename = os.path.join( path, nextGame.startDateTime.strftime("%m-%d") + "." + Encoder) # build the commands recorder = ' '.join([ 'arecord' # audio recorder , '-q' # quiet , '-d {duration}' # recording time , '--max-file-time {duration}' # recording time before switching files (must be >= recording time) , '-c 2' # input stream is 2 channels , '-f S16' # input stream is 16 bit signed , '-r 44100' # rate of input stream is 44.1kHz , '-D {device}' # audio generator , '-t raw' # output format is raw (don't use .wav, it cuts out after 3 hours and 22 minutes because of a size limit on .wav files) ]).format(duration=RecordingDurationSec, device=SharkAudioAddr) if Encoder == 'ogg': encoder = ' '.join([ 'oggenc' # Ogg encoder , '-Q' # quiet , '-r' # input format is raw , '--resample 8000' # sample rate (8000 and 11025 are suitable choices for AM radio) , '--downmix' # convert from stereo to mono , '-q 0' # quality level (range is -1 to 10 with 10 being highest) , '--ignorelength' # Allow input stream to exceed 4GB , '-o "{filename}"' # output file name , '--title "{title} ({date})"' # title , '--album "{title}"' # album , '--artist "{artist}"' # artist , '--date "{date}"' # date , '-' # read from standard input ]).format(filename=filename, title=nextGame.description, artist=nextGame.station, date=nextGame.startDateTime.__repr__()) elif Encoder == 'mp3': # DP- turned off old settings moved to 32kbps average; sounds much better encoder = ' '.join([ 'lame', '--quiet' # quiet , '-r' # raw format input #, '--resample 8' # resample to rate #, '-V3' # ??? #, '--vbr-new' # ??? #, '-q0' # quality level #, '-B16' # maximum bit rate #, '--lowpass 15.4' # apply lowpass filter #, '--athaa-sensitivity 1' # ??? , '--preset 32' # average bitrate of 32kbps , '--tt "{title}"' # title , '--ta "{artist}"' # artist , '-' # read from standard input , '{filename}' # write to filename ]).format(filename=filename, title=nextGame.description, artist=nextGame.station, date=nextGame.startDateTime.__repr__()) elif Encoder == 'spx': # This generates files that sound a little better than the ogg files but # are much larger (odd because it is based on ogg and it tailored for # the spoken word, perhaps it is because I cannot get the -vbr option to # work). I am using the wideband option because it sounded # better and took less space than the narrowband option. encoder = ' '.join([ 'speexenc', '-w' # wideband #, '--16bit' # 16 bit raw input stream #, '--le' # little endian input stream #, '--stereo' # stereo input stream , '--title "{title}"' # title , '--author "{artist}"' # artist , '-' # read from standard input , '{filename}' # write to filename ]).format(filename=filename, title=nextGame.description, artist=nextGame.station, date=nextGame.startDateTime.__repr__()) else: raise AssertionError, "%s: Unknown encoder" % encoder pipeline = '{recorder} | {encoder}'.format(recorder=recorder, encoder=encoder) try: # Configure the shark (set station, turn fin red to indicate recording) execute('%s %s %s' % (SHARK_EXE, station, SharkCtrlAddr)) execute('%s -blue 0 %s' % (SHARK_EXE, SharkCtrlAddr)) execute('%s -red 1 %s' % (SHARK_EXE, SharkCtrlAddr)) # Record the game print 'Recording ...', nextGame execute(pipeline) print 'Recording complete.' # Turn the fin back to blue to indicate not recording execute('%s -red 0 %s' % (SHARK_EXE, SharkCtrlAddr)) execute('%s -blue 63 %s' % (SHARK_EXE, SharkCtrlAddr)) if os.path.exists("./postRec.sh"): os.system("/bin/sh " + "./postRec.sh") except ExecuteError, err: print err sys.exit()
'FALSE', 'TRUE', '04/06/12', '03:10 PM', '06:10 PM', 'FREE', 'BUSY' ]) + '\n' CsvFilename = 'test.csv' Duration = 1 # minutes (must be integer) Repetitions = 2 now = datetime.now() starts = [] for offset in range(Repetitions): starts += [now + timedelta(0, 60*Duration*(2*offset + 1))] with open(CsvFilename, 'w') as csvFile: csvFile.write(CsvHeader) for start in starts: csvFile.write( CsvBody.format( date=start.strftime('%m/%d/%y'), time=start.strftime('%I:%M %p'), game="test%s" % start.strftime('%M'))) try: execute('./giantsd.py --duration {} {}'.format(Duration/60, CsvFilename)) except ExecuteError, err: sys.exit(err.text) except KeyboardInterrupt : exit('Killed by user')