Example #1
0
def echocancel(outputdata, inputdata):
    pos = audioop.findmax(outputdata, 800)  # one tenth second
    out_test = outputdata[pos * 2:]
    in_test = inputdata[pos * 2:]
    ipos, factor = audioop.findfit(in_test, out_test)
    prefill = '\0' * (pos + ipos) * 2
    postfill = '\0' * (len(inputdata) - len(prefill) - len(outputdata))
    outputdata = prefill + audioop.mul(outputdata, 2 - factor) + postfill
    return audioop.add(inputdata, outputdata, 2)
def echocancel(outputdata, inputdata):
    pos = audioop.findmax(outputdata, 800)   # one tenth second
    out_test = outputdata[pos*2:]
    in_test = inputdata[pos*2:]
    ipos, factor = audioop.findfit(in_test,out_test)
    prefill = '\0'*(pos+ipos)*2
    postfill = '\0'*(len(inputdata)-len(prefill)-len(outputdata))
    outputdata = prefill + audioop.mul(outputdata,2-factor) + postfill
    return audioop.add(inputdata, outputdata,2)
Example #3
0
 def echocancel(outputdata, inputdata):
     """Try to identify an echo and remove it.
     Should contain 2-byte samples"""
     pos = audioop.findmax(outputdata, 800)
     out_test = outputdata[pos*2:]
     in_test = inputdata[pos*2:]
     ipos, factor = audioop.findfit(in_test, out_test)
     factor = audioop.findfactor(in_test[ipos*2:ipos*2+len(out_test)], out_test)
     prefill = '\0'*(pos+ipos)*2
     postfill = '\0'*(len(inputdata) - len(prefill) - len(outputdata))
     outputdata = prefill + audioop.mul(outputdata, 2, -factor) + postfill
     return audioop.add(inputdata, outputdata, 2)
Example #4
0
def findfit(scratch_frag, final_frag, sound_file):
  '''Calculates the offset (in seconds) between scratch_frag & final_frag.
     Both fragments are assumed to contain the same, loud "clapper" event.
     The SoundFile object is used for common stream parameters.'''
  import audioop
  nchannels = sound_file.stream.getnchannels()
  framerate = sound_file.stream.getframerate()
  width = sound_file.stream.getsampwidth()
  assert(width==2)

  # Simplify the sound streams to make it quicker to find a match.
  # Left channel only.
  if nchannels > 1:
    scratch_frag_ = audioop.tomono(scratch_frag, width, 1, 0)
    final_frag_   = audioop.tomono(final_frag,   width, 1, 0)
  else:
    scratch_frag_ = scratch_frag
    final_frag_   = final_frag
  nchannels_ = 1

  # Downsample to 8000/sec
  framerate_ = 8000
  scratch_frag_,state =\
      audioop.ratecv(scratch_frag_, width, nchannels_, framerate, framerate_, None)
  final_frag_,state =\
      audioop.ratecv(final_frag_,   width, nchannels_, framerate, framerate_, None)
  bytes_per_second_ = nchannels_ * framerate_ * width

  # Find the clapper in final
  length_samples = int(0.001 * framerate * nchannels_) # 0.1 sec
  final_off_samples = audioop.findmax(final_frag_, length_samples)

  # Search for a 2 second 'needle' centred on where we found the 'clapper'
  needle_bytes = 2 * bytes_per_second_
  b0 = max(0, final_off_samples * width - int(needle_bytes/2))
  print '"clapper" at final:', 1.0*b0/bytes_per_second_, 'sec'
  b1 = b0 + needle_bytes
  final_clapper_frag = final_frag_[b0:b1]
  scratch_off_samples,factor = audioop.findfit(scratch_frag_, final_clapper_frag)
  scratch_off_bytes = scratch_off_samples * width
  print 'match at scratch:', 1.0*scratch_off_bytes/bytes_per_second_, 'sec', " factor =",factor

  # Calculate the offset (shift) between the two fragments.
  shift_sec = (scratch_off_bytes - b0) * 1.0 / bytes_per_second_
  print 'shift =', shift_sec, 'seconds'
  return shift_sec
Example #5
0
def _find_maxes(data, duration, start, stop, num):
    global COUNT
    return_list = []
    if stop - start < duration:
        return return_list
    try:
        m = audioop.findmax(data[start:stop], duration)
    except audioop.error:
        print('got an error with data: {} {}'.format(start, stop))
        return return_list
    COUNT += 1
    return_list.append(m)
    if COUNT < num:
        return_list.extend(_find_maxes(data, duration, start, m * 2, num))
        return_list.extend(
            _find_maxes(data, duration, (m + duration) * 2, stop, num))
    return return_list
 def test_findmax(self):
     self.assertEqual(audioop.findmax(datas[2], 1), 5)
     self.assertEqual(audioop.findmax(bytearray(datas[2]), 1), 5)
     self.assertEqual(audioop.findmax(memoryview(datas[2]), 1), 5)
Example #7
0
 def test_findmax(self):
     self.assertEqual(audioop.findmax(data[1], 1), 2)
Example #8
0
 def test_findmax(self):
     self.assertEqual(audioop.findmax(data[1], 1), 2)
Example #9
0
def testfindmax(data):
	if audioop.findmax(data[1], 1) <> 2:
		return 0
	return 1
def testfindmax(data):
    if verbose:
        print 'findmax'
    if audioop.findmax(data[1], 1) <> 2:
        return 0
    return 1
Example #11
0
def testfindmax(data):
    if verbose:
        print 'findmax'
    if audioop.findmax(data[1], 1) != 2:
        return 0
    return 1
 def test_findmax(self):
     self.assertEqual(audioop.findmax(datas[2], 1), 5)
     self.assertEqual(audioop.findmax(bytearray(datas[2]), 1), 5)
     self.assertEqual(audioop.findmax(memoryview(datas[2]), 1), 5)