def suma(nombre): sonido=Play(1024) Datos=sonido.open(nombre) sonido.start(Datos[0],Datos[1],Datos[2]) sonido.play(Datos[3]) sonido.closed()
class Gui(QtGui.QMainWindow,QtGui.QWidget): def __init__(self): super(Gui, self).__init__() self.speaker = "" self.directory = "" self.type = "" self.line=0 self.text=[] self.decode="" self.fname="output" self.rec=0 self.initUI() self.file = "" def initUI(self): self.setWindowIcon(QtGui.QIcon('logo.png')) self.vr = VoiceRec() self.pl = Play() self.vrThread = QThread() self.plThread = QThread() self.vr.moveToThread(self.vrThread) self.pl.moveToThread(self.plThread) self.figure = plt.figure(1) self.canvas = FigureCanvas(self.figure) self.toolbar = NavigationToolbar(self.canvas, self) self.centralwidget = QtGui.QWidget(self) self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) self.verticalLayout.addWidget(self.toolbar) self.verticalLayout.addWidget(self.canvas) self.centralwidget.setGeometry(10,10,825,330) openFile = QtGui.QAction(QtGui.QIcon('open.png'), '&Open', self) openFile.setShortcut('Ctrl+O') openFile.setStatusTip('Open new File') openFile.triggered.connect(self.showDialogOpen) chUser = QtGui.QAction('&Change Speaker', self) chUser.setStatusTip('Change Speaker') chUser.triggered.connect(self.changeUser) exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.closeEvent) utf_8 = QtGui.QAction('&UTF-8', self) utf_8.setStatusTip('utf-8') utf_8.triggered.connect(self.encodeUTF8) utf_16 = QtGui.QAction('&UTF-16', self) utf_16.setStatusTip('utf-16') utf_16.triggered.connect(self.encodeUTF16) Ascii = QtGui.QAction('&ASCII', self) Ascii.setStatusTip('ascii') Ascii.triggered.connect(self.encodeASCII) about = QtGui.QAction('&About', self) about.setStatusTip('More About Voice Recorder') about.triggered.connect(self.showAbout) self.textEdit = QtGui.QTextEdit(self) self.textEdit.setGeometry(10,360,825,104) self.textEdit.setStyleSheet("QTextEdit {font-size: 14pt}") self.textEdit.setText("Please Open a File...") self.textEdit.setReadOnly(True) self.Open = QtGui.QPushButton('Open', self) self.Open.move(10,480) self.Open.clicked.connect(self.showDialogOpen) self.Record = QtGui.QPushButton('Record', self) self.Record.move(155,480) self.Record.setEnabled(False) self.Record.clicked.connect(self.record) self.Stop = QtGui.QPushButton('Stop', self) self.Stop.move(300,480) self.Stop.setEnabled(False) self.Stop.clicked.connect(self.stop) self.Play = QtGui.QPushButton('Play', self) self.Play.move(445,480) self.Play.setEnabled(False) self.Play.clicked.connect(self.play) self.Back = QtGui.QPushButton('Back', self) self.Back.move(590,480) self.Back.setEnabled(False) self.Back.clicked.connect(self.showBack) self.Next = QtGui.QPushButton('Next', self) self.Next.move(735,480) self.Next.setEnabled(False) self.Next.clicked.connect(self.showNext) menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(openFile) fileMenu.addAction(chUser) fileMenu.addAction(exitAction) encodeMenu = menubar.addMenu('&Encoding') encodeMenu.addAction(Ascii) encodeMenu.addAction(utf_8) encodeMenu.addAction(utf_16) helpMenu = menubar.addMenu('&Help') helpMenu.addAction(about) self.setGeometry(200,200, 845, 550) self.setFixedSize(845 , 550) self.setWindowTitle('Akshar Voice Recorder') self.user = User(self) def showDialogOpen(self): plt.clf() self.canvas.draw() self.statusBar().showMessage('Open a File') self.fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file') if(self.fname!=""): self.Record.setEnabled(True) self.Play.setEnabled(True) self.Next.setEnabled(True) self.Back.setEnabled(True) self.directory=str(self.file)+"/"+str(self.speaker)+"_"+str(self.type)+"_"+str(self.fname).split("/")[-1] if not os.path.exists(self.directory): os.makedirs(self.directory) del self.text[:] f = open(self.fname, 'r') for lines in f: self.text.append(lines) f.close if(self.decode!=""): self.textEdit.setText(self.text[self.line].decode(self.decode)) else: self.textEdit.setText(self.text[self.line].decode('ascii')) self.line=0 else: self.Record.setEnabled(False) self.Play.setEnabled(False) self.Next.setEnabled(False) self.Back.setEnabled(False) self.statusBar().showMessage('') def showNext(self): plt.clf() self.canvas.draw() self.line+=1 if(len(self.text)>self.line): if(self.decode!=""): self.textEdit.setText(self.text[self.line].decode(self.decode)) else: self.textEdit.setText(self.text[self.line].decode('utf-8')) else: self.showDialogOpen() def showBack(self): plt.clf() self.canvas.draw() self.line-=1 if(len(self.text)>=self.line and self.line>=0): if(self.decode!=""): self.textEdit.setText(self.text[self.line].decode(self.decode)) else: self.textEdit.setText(self.text[self.line].decode('utf-8')) else: self.showDialogOpen() def showAbout(self): self.popup1=About() self.popup1.exec_() def encodeUTF8(self): self.decode="utf-8" def encodeUTF16(self): self.decode="utf-16" def encodeASCII(self): self.decode="ascii" def changeUser(self): self.user.__init__(self) def record(self): plt.clf() self.canvas.draw() self.statusBar().showMessage('Recording') self.rec=1 self.Record.setEnabled(False) self.Stop.setEnabled(True) self.Open.setEnabled(False) self.Play.setEnabled(False) self.Next.setEnabled(False) self.Back.setEnabled(False) self.vrThread.start() self.vr.record(self.directory, self.text[self.line].split(")")[0], self) def stop(self): self.statusBar().showMessage('') if self.rec == 1: self.vr.stop() self.vrThread.exit() self.vrThread.wait() self.vrThread.quit() elif self.rec == 2: self.pl.stop() self.plThread.exit() self.plThread.wait() self.plThread.quit() self.Record.setEnabled(True) self.Open.setEnabled(True) self.Play.setEnabled(True) self.Next.setEnabled(True) self.Back.setEnabled(True) self.rec=0 def play(self): self.statusBar().showMessage('Playing') self.rec=2 self.Record.setEnabled(False) self.Stop.setEnabled(True) self.Open.setEnabled(False) self.Play.setEnabled(False) self.Next.setEnabled(False) self.Back.setEnabled(False) self.plThread.start() self.pl.play(self.text[self.line].split(")")[0], self)
class Api: api_name = "" html_root = "" path = "" query = "" basePath = "" current_dir = None response = None player = None player_cfg = None playlist = None screensaver = False screensaver_file = "" enable_screensaver = False video_types = ["mp4", "mpeg", "mov"] pl_types = ["playlist"] # create an api/html object # options{"url": calling http_url, "api_name": page name for api calls, "html_root": root path for html pages} def __init__(self, options): self.player_cfg = ConfigParser.ConfigParser() self.player_cfg.read('config/player.cfg') print self.player_cfg # check for player settings in the configuration file if not self.player_cfg.has_section("player"): print("no player configuration found") sys.exit() # check for player settings in the configuration file if not self.player_cfg.has_section("screens"): print("no screen configuration found") sys.exit() self.screensaver_file = self.player_cfg.get("player", "screensaver") self.enable_screensaver = self.player_cfg.getboolean( "player", "enable_screensaver") # load play list self.playlist = Playlist() # self.playlist.name(options["playlist"]) # self.playlist.load() # init variables self.basePath = os.path.dirname("..") self.api_name = options["api_name"] self.html_root = options["html_root"] self.current_dir = options["base_dir"] # create response object self.response = Response() # ========================================================== # write player configuration file def writeplayer(self): with open('config/player.cfg', 'wb') as configfile: print("write config") self.player_cfg.write(configfile) # ========================================================== # call api or html pages, depending on the page path def get(self, url): self.__create_query(url) # redirect to api interface if self.path == self.api_name: return self.api() # redirect to html pages else: return self.html() # ========================================================== # call api or html pages, depending on the page path def post(self, url): self.__create_query(url) # redirect to api interface if self.path == self.api_name: return self.api() # redirect to html pages else: return self.html() # ========================================================== # check for valid video formats def file_type(self, file, types): if os.path.splitext(file)[1][1:] in types: return True return False # ========================================================== # get video file information from config file def read_info(self, file): response = Response() audio = Response() video = Response() response.set("file", file) # add video file cfg data filename = os.path.splitext(file)[0] if os.path.isfile(filename + ".cfg"): self.info = ConfigParser.ConfigParser() self.info.read(filename + ".cfg") # collect video data for info in self.info.items("video"): video.set(info[0], info[1]) # collect audio data for info in self.info.items("audio"): audio.set(info[0], info[1]) response.set("audio", audio) response.set("video", video) return response def get_files(self, types): files = [ f for f in listdir(self.current_dir) if (isfile(join(self.current_dir, f)) and self.file_type(f, types) == True and not f.startswith(".")) ] return sorted(files) def get_dirs(self): dirs = [ f for f in listdir(self.current_dir) if (isdir(join(self.current_dir, f)) and not f.startswith(".")) ] return sorted(dirs) # ========================================================== # ========================================================== # playback control # start playback of file def play(self, filename): # stop existing player self.stop() # create new player self.player = Play(filename, self.player_cfg) self.player.play() self.response.set("file", filename) # stop playback def stop(self): self.screensaver = False if isinstance(self.player, Play): self.player.quit() self.player = None # call autoplay on stopping # self.autoplay() # autoplay screen saver or next playlist entry def autoplay(self): # check for screen saver file if not os.path.isfile(self.screensaver_file): self.screensaver_file = "" self.enable_screensaver = False # start screen saver if enabled if self.screensaver_file and self.enable_screensaver != False: self.play(self.screensaver_file) self.screensaver = True # ========================================================== # ========================================================== # call api interface def api(self): # ============================== # reset response self.response.reset() # ============================== # get file parameter if self.query.get("file"): filepath = os.path.join(self.current_dir, self.query.get("file")[0]) else: filepath = "" # ==================================================== # COMMANDS # # filesystem # list: list current directory # cd: change directory # up: move current directory up # # player/video # status: get player status # fileinfo: get video config file informations # writeinfo: write information to video config file # play: start playback of file # # playlist # playlist: get playlist # # # commands with active player # # stop: stop playback # pause: pause playback # position: get playback position # ==================================================== # ============================== # cmd found if self.query.get("cmd"): # ============================== # status and command # ============================== cmd = self.query.get("cmd")[0] self.response.set("cmd", cmd) # add status to response if isinstance(self.player, Play): # stop on status stop if self.player.status() == "stop": self.stop() else: self.response.set("status", str(self.player.status())) else: self.response.set("status", "stop") # ============================== # list directory # ============================== if cmd == "list": self.response.set("dirinfo", self.read_file_info()) # ============================== # change directory # param: file # ============================== if cmd == "cd": new_dir = self.current_dir if not self.current_dir.endswith("/"): new_dir = new_dir + "/" self.current_dir = new_dir + self.query.get("file")[0] + "/" self.response.set("dirinfo", self.read_file_info()) # ============================== # go directory up # ============================== if cmd == "up": new_dir = self.current_dir if self.current_dir.endswith("/"): new_dir = self.current_dir[:-1] self.current_dir = '/'.join(new_dir.split("/")[:-1]) + '/' self.response.set("dirinfo", self.read_file_info()) # ============================== # get file informations file data # ============================== if cmd == "fileinfo": self.response.set("fileinfo", self.read_info(filepath)) # ============================== # write # param: file, video/audio parameters # ============================== if cmd == "writeinfo": filename = os.path.splitext(filepath)[0] + ".cfg" video_info = ConfigParser.ConfigParser() video_info.add_section("video") video_info.add_section("audio") for val in self.query: keyval = val.split("_") if len(keyval) > 1: video_info.set(keyval[0], keyval[1], self.query.get(val)[0]) self.info = video_info with open(filename, "wb") as configfile: video_info.write(configfile) self.response = self.read_info(filepath) # ============================== # set/enable/disable screen saver auto play # ============================== if cmd == "set_screensaver": self.player_cfg.set("player", "screensaver", filepath) self.player_cfg.set("player", "enable_screensaver", False) self.screensaver_file = filepath self.enable_screensaver = False self.writeplayer() if cmd == "enable_screensaver": self.player_cfg.set("player", "enable_screensaver", True) self.enable_screensaver = True self.writeplayer() if cmd == "disable_screensaver": self.player_cfg.set("player", "enable_screensaver", False) self.enable_screensaver = False self.writeplayer() scr = Response() # add screensaver info scr.set("enable_screensaver", self.enable_screensaver) scr.set("screensaver", self.screensaver) scr.set("screensaver_file", self.screensaver_file) self.response.set("screensaver", scr) # ============================== # get playlist # param: none -> return playlist # param: file -> load new playlist # ============================== if cmd == "playlist": # if filepath: load new playlist if filepath: self.playlist.name(filepath) self.playlist.load() self.response = self.playlist.list() # ============================== # add to active playlist # param: file -> video filename # param: pos -> position in the playlist # if no position, append to end # ============================== if cmd == "addtoplaylist": if filepath: # add at position if self.query.get("pos"): self.response = self.playlist.add( filepath, self.query.get("pos")[0]) # append else: self.response = self.playlist.add(filepath) # ============================== # removefromplaylist # param: pos -> position of file # to in the playlist to be removed # ============================== if cmd == "removefromplaylist": self.response = self.playlist.remove(self.query.get("pos")[0]) # ==================================================== # ==================================================== # start playback # ==================================================== # ==================================================== if os.path.isfile(filepath): # start playback if file exists if cmd == "play": self.play(filepath) # ==================================================== # commands to active player # ==================================================== # player is active if isinstance(self.player, Play): # add playing filename self.response.set("file", self.player.get_file_name()) self.response.set("position", self.player.position()) self.response.set("length", self.player.length()) self.response.set("time", self.player.time()) self.response.set("volume", self.player.get_volume()) # ============================== # toggle pause/play # ============================== if cmd == "pause": self.player.pause() # ============================== # stop playback # ============================== if cmd == "stop": self.stop() # ============================== # seek position # ============================== if cmd == "seek": self.player.seek(self.query.get("position")[0]) # ============================== # set volume # ============================== if cmd == "volume": self.player.volume(self.query.get("volume")[0]) # no active player else: self.response.set("warning", "no player") self.response.set("position", 0) self.player = None self.autoplay() """Respond to a GET request.""" return ({ "code": 200, "content-type": "application/json", "response": self.response.render() }) # ========================================================== # ========================================================== # call html pages def html(self): # no path, try index.html if self.path == "": self.path = "index.html" # add http base to path http_path = os.path.join(self.basePath, self.html_root) # get content type ctype = self.guess_type(self.path) # look for file and render if os.path.isfile(os.path.join(http_path, self.path)): """Return page""" # copy html file to output html = open(os.path.join(http_path, self.path), "rb") response = html.read() html.close() return ({"code": 200, "content-type": ctype, "response": response}) # no page found -> 404 else: """Return 404 page""" # copy html file to output html = open(os.path.join(self.basePath, http_path, "404.html"), "rb") response = html.read() html.close() return ({ "code": 404, "content-type": "text/html", "response": response }) def __create_query(self, url): # remove leading / if url.startswith("/"): url = url[1:] self.query = {} self.path = url.split("?") # has self.query -> parse self.query if len(self.path) > 1: self.query = urlparse.parse_qs(self.path[1]) # get path self.path = self.path[0] def read_file_info(self): dirinfo = Response() dirinfo.set("dir", self.current_dir) dirinfo.set("dirs", self.get_dirs()) dirinfo.set("files", self.get_files(self.video_types)) # dirinfo.set("playlist", self.playlist.list()) dirinfo.set("pl_files", self.get_files(self.pl_types)) return dirinfo def guess_type(self, path): """Guess the type of a file. Argument is a PATH (a filename). Return value is a string of the form type/subtype, usable for a MIME Content-type header. The default implementation looks the file's extension up in the table self.extensions_map, using application/octet-stream as a default; however it would be permissible (if slow) to look inside the data to make a better guess. """ base, ext = posixpath.splitext(path) if ext in self.extensions_map: return self.extensions_map[ext] ext = ext.lower() if ext in self.extensions_map: return self.extensions_map[ext] else: return self.extensions_map[''] if not mimetypes.inited: mimetypes.init() # try to read system mime.types extensions_map = mimetypes.types_map.copy() extensions_map.update({ '': 'application/octet-stream', # Default '.py': 'text/plain', '.c': 'text/plain', '.h': 'text/plain', })
class Gui(QtGui.QMainWindow,QtGui.QWidget): def __init__(self): super(Gui, self).__init__() self.initUI() self.line=0 self.text=[] self.decode="" self.fname="output" self.rec=0 def initUI(self): self.setWindowIcon(QtGui.QIcon('logo.png')) self.vr = VoiceRec() self.pl = Play() self.spectro() self.vrThread = QThread() self.plThread = QThread() self.vr.moveToThread(self.vrThread) self.pl.moveToThread(self.plThread) openFile = QtGui.QAction(QtGui.QIcon('open.png'), '&Open', self) openFile.setShortcut('Ctrl+O') openFile.setStatusTip('Open new File') openFile.triggered.connect(self.showDialogOpen) exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.closeEvent) utf_8 = QtGui.QAction('&UTF-8', self) utf_8.setStatusTip('utf-8') utf_8.triggered.connect(self.encodeUTF8) utf_16 = QtGui.QAction('&UTF-16', self) utf_16.setStatusTip('utf-16') utf_16.triggered.connect(self.encodeUTF16) about = QtGui.QAction('&About', self) about.setStatusTip('More About Voice Recorder') about.triggered.connect(self.showAbout) self.textEdit = QtGui.QTextEdit(self) self.textEdit.setGeometry(10,30,825,104) self.textEdit.setStyleSheet("QTextEdit {font-size: 14pt}") self.textEdit.setText("Please Open a File...") self.textEdit.setReadOnly(True) self.Open = QtGui.QPushButton('Open', self) self.Open.move(10,160) self.Open.clicked.connect(self.showDialogOpen) self.Record = QtGui.QPushButton('Record', self) self.Record.move(155,160) self.Record.clicked.connect(self.record) self.Stop = QtGui.QPushButton('Stop', self) self.Stop.move(300,160) self.Stop.clicked.connect(self.stop) self.Play = QtGui.QPushButton('Play', self) self.Play.move(445,160) self.Play.clicked.connect(self.play) self.Back = QtGui.QPushButton('Back', self) self.Back.move(590,160) self.Back.clicked.connect(self.showBack) self.Next = QtGui.QPushButton('Next', self) self.Next.move(735,160) self.Next.clicked.connect(self.showNext) menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(openFile) fileMenu.addAction(exitAction) encodeMenu = menubar.addMenu('&Encoding') encodeMenu.addAction(utf_8) encodeMenu.addAction(utf_16) helpMenu = menubar.addMenu('&Help') helpMenu.addAction(about) self.setGeometry(200,200, 845, 550) self.setFixedSize(845 , 550) self.setWindowTitle('Voice Recorder') #self.setWindowIcon(QtGui.QIcon('logo.png')) self.show() def showDialogOpen(self): self.statusBar().showMessage('Open a File') self.fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file','/home') if(self.fname!=""): del self.text[:] f = open(self.fname, 'r') for lines in f: self.text.append(lines) f.close if(self.decode!=""): self.textEdit.setText(self.text[self.line].decode(self.decode)) else: self.textEdit.setText(self.text[self.line].decode('utf-8')) self.line=0 self.statusBar().showMessage('') def showNext(self): self.line+=1 if(len(self.text)>self.line): if(self.decode!=""): self.textEdit.setText(self.text[self.line].decode(self.decode)) else: self.textEdit.setText(self.text[self.line].decode('utf-8')) else: self.showDialogOpen() def showBack(self): self.line-=1 if(len(self.text)>=self.line and self.line>=0): if(self.decode!=""): self.textEdit.setText(self.text[self.line].decode(self.decode)) else: self.textEdit.setText(self.text[self.line].decode('utf-8')) else: self.showDialogOpen() def showAbout(self): self.popup1=About() self.popup1.exec_() def encodeUTF8(self): self.decode="utf-8" def encodeUTF16(self): self.decode="utf-16" def record(self): self.statusBar().showMessage('Recording') self.rec=1 self.Record.setEnabled(False) self.Open.setEnabled(False) self.Play.setEnabled(False) self.Next.setEnabled(False) self.Back.setEnabled(False) self.vrThread.start() self.vr.record(self.fname, self.line) def stop(self): self.statusBar().showMessage('') if self.rec == 1: self.vr.stop() self.vrThread.exit() self.vrThread.wait() self.vrThread.quit() elif self.rec == 2: self.pl.stop() self.plThread.exit() self.plThread.wait() self.plThread.quit() self.Record.setEnabled(True) self.Open.setEnabled(True) self.Play.setEnabled(True) self.Next.setEnabled(True) self.Back.setEnabled(True) self.rec=0 def play(self): self.statusBar().showMessage('Playing') self.rec=2 self.Record.setEnabled(False) self.Open.setEnabled(False) self.Play.setEnabled(False) self.Next.setEnabled(False) self.Back.setEnabled(False) self.plThread.start() self.pl.play(self.fname, self.line, self) def spectro(self): self.centralwidget = QtGui.QWidget(self) self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) self.qwtPlot = Qwt.QwtPlot(self.centralwidget) self.verticalLayout.addWidget(self.qwtPlot) self.centralwidget.setGeometry(10,200,825,330) self.c=Qwt.QwtPlotCurve() self.c.attach(self.qwtPlot) self.qwtPlot.setAxisScale(self.qwtPlot.yLeft, 0, 32000) self.timer = QTimer() self.timer.start(1.0) self.connect(self.timer, SIGNAL('timeout()'), self.plotSomething) self.SR=SwhRecorder() self.SR.setup() self.SR.continuousStart() def plotSomething(self): if self.SR.newAudio==False: return xs,ys=self.SR.fft() self.c.setData(xs,ys) self.qwtPlot.replot() self.SR.newAudio=False def closeEvent(self, event): self.SR.close() QtGui.qApp.quit()
downloader = Songs() if len(sys.argv) == 4: downloader.get_files('Downloads/', 'Downloads/songs.txt', sys.argv[2], sys.argv[3]) elif len(sys.argv) == 3: downloader.get_files(sys.argv[2]) else: raise Exception("Invalid format! Please use 'czplayer help' to get usage information.") downloader.get_download_list() downloader.download() elif sys.argv[1] == "play": player = Play() if len(sys.argv) == 4: player.set_order(sys.argv[2], sys.argv[3]) else: player.set_order("random") player.generate() player.play() elif sys.argv[1] == "help": print("Use CZPlayer by executing one of the following commands - ") print("'python3 czplayer.py help' for usage information.") print("'python3 czplayer.py download your_sudo_password your_username' for downloading songs present in Downloads/songs.txt. Playlist will be automatically updated.") print("'python3 czplayer.py download your_sudo_password' if you have executed the above command at least once.") print("'python3 czplayer.py play random' for listening to the songs in the playlist random order.") print("'python3 czplayer.py play custom [song_name_without_spaces, song_name_without_spaces, ..., song_name_without_spaces]'.") print("You can view the playlist by opening playlists/universal.txt.") else: print("Invalid format! Please use 'czplayer help' to get usage information.")