def push_data(data): num_samples = CHUNK_SIZE /2 # Because each sample is 16 bits #Generate some psychodelic waveforms data.c += data.d data.d -= data.c / 1000.0 freq = 1100.0 + 1000.0*data.d raw = array('H') for i in xrange(num_samples): data.a += data.b data.b -= data.a/freq a5 = (int(500 * data.a))% 65535 raw.append(a5) data.num_samples += num_samples buffer = gst.Buffer(raw.tostring()) #Set its timestamp and duration buffer.timestamp = gst.util_uint64_scale(data.num_samples, gst.SECOND, SAMPLE_RATE) buffer.duration = gst.util_uint64_scale(CHUNK_SIZE, gst.SECOND, SAMPLE_RATE) #Push the buffer into the appsrc ret = data.app_source.emit("push-buffer", buffer) if (ret != gst.FLOW_OK): return False return True
def numpy_array_to_gst_buffer(frames, chunk_size, num_samples, sample_rate): from gst import Buffer """ gstreamer buffer to numpy array conversion """ buf = Buffer(getbuffer(frames.astype("float32"))) #Set its timestamp and duration buf.timestamp = gst.util_uint64_scale(num_samples, gst.SECOND, sample_rate) buf.duration = gst.util_uint64_scale(chunk_size, gst.SECOND, sample_rate) return buf
def numpy_array_to_gst_buffer(frames, chunk_size, num_samples, sample_rate): from gst import Buffer """ gstreamer buffer to numpy array conversion """ buf = Buffer(getbuffer(frames.astype("float32"))) # Set its timestamp and duration buf.timestamp = gst.util_uint64_scale(num_samples, gst.SECOND, sample_rate) buf.duration = gst.util_uint64_scale(chunk_size, gst.SECOND, sample_rate) return buf
def numpy_array_to_gst_buffer(frames, CHUNK_SIZE, num_samples, SAMPLE_RATE): from gst import Buffer """ gstreamer buffer to numpy array conversion """ buf = Buffer(getbuffer(frames.astype("float32"))) # Set its timestamp and duration buf.timestamp = gst.util_uint64_scale(num_samples, gst.SECOND, SAMPLE_RATE) buf.duration = gst.util_uint64_scale(CHUNK_SIZE, gst.SECOND, SAMPLE_RATE) return buf
def calculate_duration(num_samples, sample_rate): """Determine duration of samples using GStreamer helper for precise math.""" return gst.util_uint64_scale(num_samples, gst.SECOND, sample_rate)