def fancyCrackle(self, levels, volume): levels = self.uniformSample(levels, self.MAX_BEEP_COUNT ) beepLen = self.BEEP_LEN pauseLen = self.PAUSE_LEN pauseBufSize = NVDAHelper.generateBeep(None,self.BASE_FREQ,pauseLen,0, 0) beepBufSizes = [NVDAHelper.generateBeep(None,self.getPitch(l), beepLen, volume, volume) for l in levels] bufSize = sum(beepBufSizes) + len(levels) * pauseBufSize buf = ctypes.create_string_buffer(bufSize) bufPtr = 0 for l in levels: bufPtr += NVDAHelper.generateBeep( ctypes.cast(ctypes.byref(buf, bufPtr), ctypes.POINTER(ctypes.c_char)), self.getPitch(l), beepLen, volume, volume) bufPtr += pauseBufSize # add a short pause tones.player.stop() tones.player.feed(buf.raw)
def play(values): pitches = list(map(value_to_pitch, values)) n = len(pitches) beepBufSizes = [ NVDAHelper.generateBeep(None, pitches[i], beep_duration, beep_volume, beep_volume) for i in range(n) ] bufSize = sum(beepBufSizes) buf = ctypes.create_string_buffer(bufSize) bufPtr = 0 for pitch in pitches: bufPtr += NVDAHelper.generateBeep( ctypes.cast(ctypes.byref(buf, bufPtr), ctypes.POINTER(ctypes.c_char)), pitch, beep_duration, beep_volume, beep_volume) tones.player.stop() speech.cancelSpeech() tones.player.feed(buf.raw)
def fancyBeep(self, chord, length, left=10, right=10): beepLen = length freqs = self.getChordFrequencies(chord) intSize = 8 # bytes bufSize = max([NVDAHelper.generateBeep(None,freq, beepLen, right, left) for freq in freqs]) if bufSize % intSize != 0: bufSize += intSize bufSize -= (bufSize % intSize) tones.player.stop() bbs = [] result = [0] * (bufSize//intSize) for freq in freqs: buf = ctypes.create_string_buffer(bufSize) NVDAHelper.generateBeep(buf, freq, beepLen, right, left) bytes = bytearray(buf) unpacked = struct.unpack("<%dQ" % (bufSize / intSize), bytes) result = map(operator.add, result, unpacked) maxInt = 1 << (8 * intSize) result = map(lambda x : x %maxInt, result) packed = struct.pack("<%dQ" % (bufSize / intSize), *result) tones.player.feed(packed)