Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import wave
- from time import time
- import numpy as np
- import pyaudio
- import audioop
- from collections import OrderedDict
- from scipy import signal
- class DefaultListOrderedDict(OrderedDict):
- '''
- Ordered Dict of list to hold old and new RMS values
- '''
- def __missing__(self, k):
- self[k] = []
- return self[k]
- FORMAT = pyaudio.paInt16
- CHUNK = 2048
- WIDTH = 2
- CHANNELS = 1
- RATE = 44100
- RECORD_SECONDS = 3
- FACTOR = 7
- TT = time()
- freq = 100
- newfreq = 100
- phase = 0
- def callback(in_data, frame_count, time_info, status):
- # global TT, phase, freq, newfreq
- # if newfreq != freq:
- # phase = 2 * np.pi * TT * (freq - newfreq) + phase
- # freq = newfreq
- # left = (np.sin(phase + 2 * np.pi * freq * (TT + np.arange(frame_count) / float(RATE))))
- # data = np.zeros((left.shape[0] * 2,), np.float32)
- # data[::2] = left
- # data[1::2] = left
- # TT += frame_count / float(RATE)
- # return (data, pyaudio.paContinue)
- imp_ff = signal.filtfilt(b, a, np.fromstring(in_data, dtype=np.int16))
- return str(imp_ff)
- rmsdict = DefaultListOrderedDict()
- p = pyaudio.PyAudio()
- stream = p.open(format=FORMAT,
- channels=CHANNELS,
- rate=RATE,
- input=True,
- output=True,
- frames_per_buffer=CHUNK)
- # stream_callback=callback)
- stream_out = p.open(format=FORMAT,
- channels=CHANNELS,
- rate=RATE,
- output=True,
- frames_per_buffer=CHUNK)
- wf = wave.open("C:\SW\sample.wav", 'rb')
- start = time()
- print("* recording from microphone")
- isGoingLouder = True
- b, a = signal.butter(2, 0.03, analog=False)
- while True:
- data = stream.read(CHUNK)
- data = wf.readframes(CHUNK)
- # stream_out.write(data)
- # new_data = audioop.mul(data, WIDTH, FACTOR)
- # # audioop.
- # stream_out.write(new_data, CHUNK)
- #
- # if isGoingLouder:
- # FACTOR += 0.1
- # if FACTOR > 9:
- # isGoingLouder = False
- # else:
- # FACTOR -= 0.1
- # if FACTOR < 0:
- # isGoingLouder = True
- # print(FACTOR)
- #
- # now = time()
- # if now - start > 1 / 24.:
- # newfreq = 200 + np.sin(
- # 2 * np.pi * 1 / 20. * now) * 100 # update the frequency This will depend on y on the future
- # print("Frequency = " + str(newfreq))
- # start = now
- print("* done recording")
- stream.stop_stream()
- stream.close()
- p.terminate()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement