diff --git a/angleData/putAngleDataInThisFolder.txt b/angleData/putAngleDataInThisFolder.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/audioPlayer/pyaudioPlayer.py b/audioPlayer/pyaudioPlayer.py index 9e7ed1f893bb85dc13fe4e02644050ebaf4814aa..250828517562f2495964336cb25cba222131e4a8 100644 --- a/audioPlayer/pyaudioPlayer.py +++ b/audioPlayer/pyaudioPlayer.py @@ -28,11 +28,21 @@ class Buffer: def putChunk(self, signal): freeSpace = self.freeSpace() if freeSpace > len(signal): - self.buffer[self.end:self.end+len(signal)] = signal - self.end += len(signal) + if self.end+len(signal) < self.size: + self.buffer[self.end:self.end+len(signal)] = signal + self.end += len(signal) + else: + self.buffer[self.end:] = signal[:self.size-self.end] + self.buffer[:len(signal)-self.size+self.end] = signal[self.size-self.end:] + self.end = len(signal)-self.size+self.end else: - self.buffer[self.end:self.end+freeSpace] = signal[:freeSpace] - self.end += freeSpace + if self.end+freeSpace < self.size: + self.buffer[self.end:self.end+freeSpace] = signal[:freeSpace] + self.end += freeSpace + else: + self.buffer[self.end:] = signal[:self.size-self.end] + self.buffer[:freeSpace-self.size+self.end] = signal[self.size-self.end:freeSpace] + self.end = freeSpace-self.size+self.end print(self.end) def getChunk(self, chunkSize): @@ -40,12 +50,24 @@ class Buffer: return np.zeros(chunkSize) filledSpace = self.filledSpace() if self.filledSpace() >= chunkSize: - chunk = self.buffer[self.start: self.start + chunkSize] - self.start += chunkSize + if self.start + chunkSize < self.size: + chunk = self.buffer[self.start: self.start + chunkSize] + self.start += chunkSize + else: + chunk = np.zeros(chunkSize) + chunk[:self.size-self.start] = self.buffer[self.start:] + chunk[self.size-self.start:] = self.buffer[:chunkSize-self.size+self.start] + self.start = chunkSize-self.size+self.start else: chunk = np.zeros(chunkSize) - chunk[:filledSpace] = self.buffer[self.start : self.start + filledSpace] - self.start += filledSpace + if self.start + filledSpace < self.size: + chunk[:filledSpace] = self.buffer[self.start : self.start + filledSpace] + self.start += filledSpace + else: + chunk = np.zeros(chunkSize) + chunk[:self.size-self.start] = self.buffer[self.start:] + chunk[self.size-self.start:filledSpace] = self.buffer[:filledSpace-self.size+self.start] + self.start = filledSpace-self.size+self.start return chunk @@ -65,8 +87,8 @@ class pyaudioPlayer: rate=self.fs, output=True, frames_per_buffer = self.frameCount, - stream_callback = self._callback, - output_device_index = 0) + stream_callback = self._callback + ) def _callback(self,in_data, frame_count, time_info, status): if self.buffer.empty() == True: diff --git a/distanceData/putDistanceDataInThisFolder.txt b/distanceData/putDistanceDataInThisFolder.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/fileParse.py b/fileParse.py new file mode 100644 index 0000000000000000000000000000000000000000..cf1db370807a7a146caf833c3c116a6ea5a2b6c0 --- /dev/null +++ b/fileParse.py @@ -0,0 +1,42 @@ +from os import listdir, unlink +from os.path import isfile, join +import numpy as np + +class FileParse: + def __init__(self,folderPath): + self.folderPath = folderPath + + def fileCount(self): + return len(listdir(self.folderPath)) + + def removeFile(self,file_path): + try: + unlink(file_path) + except Exception as e: + print("failed to delete") + + def read(self): + file_list = listdir(self.folderPath) + data = "" + + for i, file in enumerate(file_list): + file_path = join(self.folderPath, file) + if i==(len(file_list)-1): + f = open(file_path, "r") + data = f.read() + f.close() + self.removeFile(file_path) + + result = [] + samples = data.splitlines() + for i, sample in enumerate(samples): + result.append([]) + s = sample.split(',') + for j, a in enumerate(s): + result[i].append(a) + + return result + +if __name__ == "__main__": + fp = FileParse("./test") + print(fp.read()) \ No newline at end of file diff --git a/numberToSpeech/__init__.py b/numberToSpeech/__init__.py index 925e207f09e5018c5a6af9a76d6822659eeb692e..35459e99961fefe5ed01e709534e244a1e2d05de 100644 --- a/numberToSpeech/__init__.py +++ b/numberToSpeech/__init__.py @@ -1 +1 @@ -from .numberToSpeech import numberToSpeech \ No newline at end of file +from .numberToSpeech import NumberToSpeech \ No newline at end of file diff --git a/realtimeSampleApp.py b/realtimeSampleApp.py index 9f73e12362fa028de2d3a2e53d088dc221ffe299..003cc3e0ae4a426c896088f9e98bc038c7b5dc5d 100644 --- a/realtimeSampleApp.py +++ b/realtimeSampleApp.py @@ -5,7 +5,7 @@ import numpy as np import time duration = 0.05 -fs = 48000 +fs = 44100 flc = MaxMinConverter(10,300,220,880) vlc = MaxMinConverter(10,300,0.2,0.9) diff --git a/team.py b/team.py new file mode 100644 index 0000000000000000000000000000000000000000..2a66f185d3beddba109e9416ff67831e26f09e99 --- /dev/null +++ b/team.py @@ -0,0 +1,59 @@ +from audioPlayer import pyaudioPlayer +from signalGenerator import sineGenerator +from distance2Frequency import MaxMinConverter, derivativeConverter +from numberToSpeech import NumberToSpeech +import numpy as np +import time +from fileParse import FileParse +import math +import statistics + +duration = 0.1 # duration of the sine wave +sleepDuration = 0.1 # duration of waiting for sine wave to play +speechDuration = 2.0 # duration of waiting for the speech to end +volume = 0.75 #volume +fs = 44100 #DONT CHANGE + +flc = MaxMinConverter(10,300,220,880) +fdc = derivativeConverter(2,200,110,220,440,880) +tts = NumberToSpeech() +player = pyaudioPlayer(fs) +sg = sineGenerator(fs) +fpDistance = FileParse("./distanceData") #place folder path here +fpAngle = FileParse("./angleData") #place folder path here +player.play() +meanRadian = 0 + +if(fpDistance.fileCount()>0): + try: + datas = fpDistance.read() + for data in datas: + print(data) + distance = int(data[1]) + mode = data[0] + if mode =='0' or mode =='1': + frequency = 0 + if(mode=='0'): + frequency = flc.convert(distance) + elif (mode=='1'): + frequency = fdc.convert(distance) + signal = sg.generate(frequency,volume, duration) + player.appendBuffer(signal) + time.sleep(sleepDuration) + if mode == '2': + tts.say(distance) + time.sleep(speechDuration) + if mode == '3': + distance2 = int(data[2]) + print(fpAngle.fileCount()) + if fpAngle.fileCount()>0: + angleDatas = [angle for angle in fpAngle.read() if angle[1]=='4'] + meanRadian = math.radians(statistics.mean([float(a) for a in angleDatas[5]])) + height = distance*math.cos(meanRadian) + distance2*math.sin(meanRadian) + width = distance2*math.cos(meanRadian) + print("Height: ", height, " Width: ", width) + + + + except KeyboardInterrupt: # Ctrl+C + del player