def main(argv):
    if len(argv) < 2:
        print "Usage: {0} <source> [<options> ..]".format(sys.argv[0])
        return 1

    loop = gobject.MainLoop()
    window = gtk.Window()

    if "--analyzer" in argv:
        visualizer = audio.visual.Analyzer()
    else:
        visualizer = audio.visual.Oscilloscope("--fill" in argv)

    if argv[1] == "mic":
        source = audio.source.Microphone(emit=True)
    elif argv[1] == "tone":
        source = audio.source.Tone(emit=True)
    else:
        location = argv[1]
        if not location.startswith("/"):
            location = os.path.join(os.getcwd(), location)
        source = audio.source.AudioFile(location, emit=True)

    window.connect("delete-event", delete_cb, source, loop)
    source.connect("new-data", new_data_cb, visualizer)

    window.add(visualizer)
    window.show_all()

    source.start()

    gobject.threads_init()
    loop.run()

    return 0
def start_dnd_cb(widget, source):
    source.start()