Exemplo n.º 1
0
import portaudio

BUFFER_SIZE = 1024

wf = wave.open(sys.argv[1], 'rb')
atexit.register(wf.close)
nchannels, sampwidth, framerate, nframes, comptype, compname = wf.getparams()

def callback(in_list, out_list, time_info, user_data):
    frames = wf.readframes(len(out_list) / nchannels)
    if len(frames) < len(out_list):
        return portaudio.COMPLETE

    if sampwidth == 1:
        values = struct.unpack('%dB' % (len(frames) / nchannels), frames)
    elif sampwidth == 2:
        values = struct.unpack('%dh' % (len(frames) / nchannels), frames)

    for i in range(len(out_list)):
        out_list[i] = values[i]

    return portaudio.CONTINUE

portaudio.initialize()
atexit.register(portaudio.terminate)
stream = portaudio.open_default_stream(0, nchannels, portaudio.INT16,
                                       framerate, BUFFER_SIZE, callback, None)
stream.start()
while stream.is_active():
    time.sleep(1)
Exemplo n.º 2
0
saw_wave = lambda x: x % 2 - 1
sine_wave = lambda x: sin(x * pi)
square_wave = lambda x: int(x % 2) * 2 - 1
white_noise = lambda x: random()

def callback(in_list, out_list, time_info, user_data):
    if user_data[0] < NOTE_FREQUENCY:
        func = saw_wave
    elif user_data[0] < NOTE_FREQUENCY * 2:
        func = sine_wave
    elif user_data[0] < NOTE_FREQUENCY * 3:
        func = square_wave
    else:
        func = white_noise

    for i in range(0, len(out_list), 2):
        user_data[0] += NOTE_FREQUENCY / SAMPLE_RATE
        out_list[i] = func(user_data[0])
        out_list[i+1] = func(user_data[0])

    return portaudio.CONTINUE

portaudio.initialize()
register(portaudio.terminate)
stream = portaudio.open_default_stream(0, 2, portaudio.FLOAT32, SAMPLE_RATE,
                                       BUFFER_SIZE, callback, [0.0])
stream.start()
sleep(4)
stream.abort()