# QT_Capture.py # (C)2014, B.Walker, G0LCU. # Issued under MIT licence. # # A DEMO to show how to capture an audio snippet for use in simple AudioScopes, etc... # Designed around OSX 10.7.x and greater using a _virgin_ OSX install and requires NO dependences. # NOTE:- Python 2.7.1 is the default OSX 10.7.x Python install. # # Tested on Python 2.5.6 to 3.4.1 and saves to the default '$HOME/Movies' directory\folder\drawer. # The file is a(n) *.aifc type of file and can easily be converted using the default /usr/bin/afconvert shell command # to most filetypes, including the *.WAV format used here... # NOTE:- afplay and afconvert are part of the default install on OSX 10.7.x and can be found inside the /usr/bin folder... # # OSX 10.7.5, before running this script start QuickTime Player and from its menu select File -> New Audio Recording. # From the Audio Recording display select the down pointing arrow and select Maximum Quality. Also select the input # you want to test with; on this MacBook Pro I used the default internal microphone. # Now close the Audio Recording window down, there is no need to do a recording. Nothing else is needed to do. # # Enjoy finding simple solutions to often very difficult problems. # Bazza... import os import sys # Create a function to do the task. def osxcapture(seconds="2"): sys.stdout = open("/tmp/OSXCapture", "w") # Generate a simple AppleScript file to launch QuickTime Player _silently_. print('''tell application "QuickTime Player" set sample to (new audio recording) set visible of front window to false tell sample delay 1.5 start''') print("delay " + seconds) print('''stop end tell quit end tell''') # Reset stdout back to the default. sys.stdout = sys.__stdout__ # Now capture the audio as '$HOME/Movies/Audio Recording.aifc'... os.system("osascript /tmp/OSXCapture") # OSX 10.7.x and greater has a default shell audio file converter. # This DEMO CAN convert an 'aifc' file to an unsigned 8 bit, mono, at the _equivalent_ of 48000Hz sampling speed... # Use:- afconvert -f 'WAVE' -c 1 -d UI8@48000 "$HOME/Movies/Audio Recording.aifc" $HOME/Movies/sample.wav # to change to 8 bit unsigned integer, mono at 48000Hz _sampling_ rate. # Below is a very, very basic function to convert the file into a more usable CD standard format WAV file... # It is easy to convert to a .RAW data file from a .WAV file for AudioScope/Audio_Oscilloscope displaying purposes, # this is a task to solve for yourselves. This is the difficult part... def audio_convert(): sys.stdout = open("/tmp/OSXConvert", "w") print('''afconvert -f 'WAVE' -c 2 -d I16@44100 "$HOME/Movies/Audio Recording.aifc" $HOME/Movies/sample.wav''') sys.stdout = sys.__stdout__ # This piece of DEMO code DELETES ALL *.aifc files inside $HOME/Movies drawer\folder\directory so be VERY AWARE! os.system("chmod 755 /tmp/OSXConvert; /tmp/OSXConvert; rm $HOME/Movies/*.aifc") # A basic 5 second test. The file created is '$HOME/Movies/Audio Recording.aifc'... print("Start the DEMO capture using a _hidden_ Quicktime Player as the source...") osxcapture("5") print("Capture done!") # Now convert to a *.WAV file... print("Now convert to a CD standard WAVE file.") audio_convert() print("Conversion done...") # A TEST using the OSX 10.7.x default shell command afplay and play the file as a simple listening test... print("Finally a listening test using the default 'afplay'...") os.system("afplay $HOME/Movies/sample.wav") print("End of DEMO program...") # End of QT_Capture.py DEMO...