Пример #1
0
 def openfile(self, event):
     dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", "*.wav", wx.OPEN)
     if dlg.ShowModal() == wx.ID_OK:
         path = dlg.GetPath()
         basename = os.path.basename(path)
         self.SetStatusText("You selected: %s" % basename)
     self.mypath = path
     self.x, self.fs, self.nbits = mir2.wavread(self.mypath)
     self.rec_input = self.x
     self.WC = 1
     self.on_reset(self)
     self.draw_figure()
     dlg.Destroy()
Пример #2
0
 def openfile(self, event):
     dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", "*.wav",
                         wx.OPEN)
     if dlg.ShowModal() == wx.ID_OK:
         path = dlg.GetPath()
         basename = os.path.basename(path)
         self.SetStatusText("You selected: %s" % basename)
     self.mypath = path
     self.x, self.fs, self.nbits = mir2.wavread(self.mypath)
     self.rec_input = self.x
     self.WC = 1
     self.on_reset(self)
     self.draw_figure()
     dlg.Destroy()
Пример #3
0
    def create_main_panel(self):
        """ Creates the main panel with all the controls on it:
             * mpl canvas 
             * mpl navigation toolbar
             * Control panel for interaction
        """
        self.panel = wx.Panel(self)
        
        # Create the mpl Figure and FigCanvas objects. 
        # 5x4 inches, 100 dots-per-inch
        #
        self.dpi = 100
        self.fig = Figure((3.0, 3.0), dpi=self.dpi)
        self.canvas = FigCanvas(self.panel, -1, self.fig)
        self.canvas2= FigCanvas(self.panel, -1, self.fig)
        
        # Since we have only one plot, we can use add_axes 
        # instead of add_subplot, but then the subplot
        # configuration tool in the navigation toolbar wouldn't
        # work.
        #
        self.axes = self.fig.add_subplot(111)
        
        # Bind the 'pick' event for clicking on one of the bars
        #
        self.canvas.mpl_connect('pick_event', self.on_pick)
        
        self.drawbutton = wx.Button(self.panel, -1, "Plot Gram")
        self.Bind(wx.EVT_BUTTON, self.on_draw_button, self.drawbutton)

        self.plot_select = ['Time Domain Signal', 'Spectrogram','Constant Q Spectrogram', 'Chromagram']
        self.combo = wx.ComboBox(self.panel, -1, pos = (0,400), choices = self.plot_select, style=wx.ALIGN_LEFT | wx.CB_READONLY)
        self.combo.SetSelection(2)        

        self.setbutton = wx.Button(self.panel, -1, "Set Parameters")
        self.Bind(wx.EVT_BUTTON, self.on_set_button, self.setbutton)

        self.record = wx.BitmapButton(self.panel, -1, wx.Bitmap('record.png'))
        self.Bind(wx.EVT_BUTTON, self.on_rec, self.record)
        
        self.play = wx.BitmapButton(self.panel, -1, wx.Bitmap('play.png'))
        self.Bind(wx.EVT_BUTTON, self.on_play, self.play)
        self.stop = wx.BitmapButton(self.panel, -1, wx.Bitmap('stop.png'))

        self.searchbutton = wx.Button(self.panel, -1, "Search Database")
        self.Bind(wx.EVT_BUTTON, self.search, self.searchbutton)

        
        self.searchbutton1 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name="1) Sonata in A Maj., Beethoven")
        self.searchbutton2 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "2) Polonaise in G Min., Chopin")
        self.searchbutton3 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "3) Rondo No. 5 in C# Min., Bartok")
        self.searchbutton4 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "1) Sonata in A Maj., Beethoven")
        self.searchbutton5 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "2) Polonaise in G Min., Chopin")
        self.searchbutton6 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "3) Rondo No. 5 in C# Min., Bartok")
        self.searchbutton7 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "1) Sonata in A Maj., Beethoven")
        self.searchbutton8 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "2) Polonaise in G Min., Chopin")
        self.searchbutton9 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "3) Rondo No. 5 in C# Min., Bartok")
        self.searchbutton10 = wx.Button(self.panel, -1, style=wx.BU_LEFT, name= "1) Sonata in A Maj., Beethoven")
        self.Sbuttonlist = [self.searchbutton1,self.searchbutton2,
                            self.searchbutton3,self.searchbutton4,
                            self.searchbutton5,self.searchbutton6,
                            self.searchbutton7,self.searchbutton8,
                            self.searchbutton9,self.searchbutton10]

        self.Bind(wx.EVT_BUTTON, self.getmeta1, self.searchbutton1)
        self.Bind(wx.EVT_BUTTON, self.getmeta2, self.searchbutton2)
        self.Bind(wx.EVT_BUTTON, self.getmeta3, self.searchbutton3)
        self.Bind(wx.EVT_BUTTON, self.getmeta4, self.searchbutton4)
        self.Bind(wx.EVT_BUTTON, self.getmeta5, self.searchbutton5)
        self.Bind(wx.EVT_BUTTON, self.getmeta6, self.searchbutton6)
        self.Bind(wx.EVT_BUTTON, self.getmeta7, self.searchbutton7)
        self.Bind(wx.EVT_BUTTON, self.getmeta8, self.searchbutton8)
        self.Bind(wx.EVT_BUTTON, self.getmeta9, self.searchbutton9)
        self.Bind(wx.EVT_BUTTON, self.getmeta10, self.searchbutton10)

        #self.plt_titlestr = ''
        #self.plot_title = wx.StaticText(self.panel, -1, 'text1',(30,15), style=wx.ALIGN_CENTRE)

        # Create the navigation toolbar, tied to the canvas
        #
        self.toolbar = NavigationToolbar(self.canvas)
        
        #
        # Layout with box sizers
        #

        flags = wx.ALIGN_LEFT | wx.ALL | wx.GROW
        
        self.vbox = wx.BoxSizer(wx.VERTICAL)

        self.hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        self.vbox2 = wx.BoxSizer(wx.VERTICAL)
        self.vbox3 = wx.BoxSizer(wx.VERTICAL)
        
        self.vbox2.AddStretchSpacer(1)
        self.vbox2.Add(self.searchbutton1, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton2, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton3, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton4, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton5, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton6, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton7, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton8, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton9, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton10, 0, border=3, flag=flags)
        self.vbox2.AddStretchSpacer(1)

        self.vbox3.Add(self.canvas, 10, wx.RIGHT | wx.TOP | wx.ALIGN_RIGHT | wx.GROW)
        self.vbox3.Add(self.canvas2, 10, wx.RIGHT | wx.TOP | wx.ALIGN_RIGHT | wx.GROW)



        self.hbox2.Add(self.vbox2, 0, wx.LEFT | wx.TOP | wx.ALIGN_LEFT| wx.GROW)
        
        #self.panel.SetSizer(self.vbox)
        #self.vbox.Fit(self)
        self.hbox2.Add(self.vbox3, 10, wx.RIGHT | wx.TOP | wx.ALIGN_RIGHT | wx.GROW)

        self.vbox.Add(self.hbox2, 0, wx.LEFT | wx.TOP | wx.GROW)
        
        self.vbox.Add(self.toolbar, 0, wx.EXPAND)
        self.vbox.AddSpacer(7)
        
        self.hbox = wx.BoxSizer(wx.HORIZONTAL)

        self.hbox.AddSpacer(15)
        self.hbox.Add(self.combo, 0, border=3, flag=flags)
        self.hbox.AddSpacer(30)
        self.hbox.Add(self.setbutton, 0, border = 3, flag=flags)
        self.hbox.AddSpacer(30)
        self.hbox.Add(self.drawbutton, 0, border=3, flag=flags)
        self.hbox.AddSpacer(30)
        self.hbox.Add(self.play, 0, flag = flags)
        self.hbox.Add(self.stop, 0, flag = flags)
        self.hbox.Add(self.record, 0, flag = flags)
        self.hbox.AddSpacer(30)
        self.hbox.Add(self.searchbutton, 0, border=3, flag=flags)
        self.hbox.AddSpacer(30)

        self.vbox.Add(self.hbox, 0, flag = wx.ALIGN_LEFT | wx.BOTTOM | wx.EXPAND |wx.GROW)

        self.panel.SetSizer(self.vbox)
        self.vbox.Fit(self)

        self.mypath = None
        self.fsz = 0.040
        self.hop = 0.020
        self.fmax = 44100
        self.x, self.fs, self.nbits = mir2.wavread('default.wav')
        #self.tmax = round(float(len(self.x))/self.fs,2)
        self.rectime = 20
        self.tmax = self.rectime
        
        self.tmin = 0
        self.LG_flag = 0
        self.LG_str = None
        self.LG_vmin = 25
        self.LG_vmax = 50
        self.tmin_samp = None
        self.tmax_samp = None
        self.WC = 1
        #self.rec_input = mir2.wavread('default.wav')#None
        self.rec_input = None
        self.rankresults = [('Beethoven_vln_sonata5_Francescatti_01.wav',1),('adksfjghl',3)]

        self.dict = {'Beethoven_vln_sonata5_Zukerman_01.wav':
                     ('Sonata No. 5, Mvt. 1', 'L. V. Beethoven','F Major','Violin and Piano', 'Pinchas Zukerman'),
                     'Beethoven_vln_sonata5_Zukerman_02.wav':
                     ('Sonata No. 5, Mvt. 2', 'L. V. Beethoven','F Major','Violin and Piano', 'Pinchas Zukerman'),
                     'Beethoven_vln_sonata5_Zukerman_03.wav':
                     ('Sonata No. 5, Mvt. 3', 'L. V. Beethoven','F Major','Violin and Piano', 'Pinchas Zukerman'),
                     'Beethoven_vln_sonata5_Zukerman_04.wav':
                     ('Sonata No. 5, Mvt. 4', 'L. V. Beethoven','F Major','Violin and Piano', 'Pinchas Zukerman'),
                     'Beethoven_vln_sonata5_Zukerman_05.wav':
                     ('Sonata No. 5, Mvt. 5', 'L. V. Beethoven','F Major','Violin and Piano', 'Pinchas Zukerman'),
                     'Beethoven_vln_sonata5_Oistrakh_01.wav':
                     ('Sonata No. 5, Mvt. 1', 'L. V. Beethoven','F Major','Violin and Piano', 'David Oistrakh'),
                     'Beethoven_vln_sonata5_Oistrakh_02.wav':
                     ('Sonata No. 5, Mvt. 2', 'L. V. Beethoven','F Major','Violin and Piano', 'David Oistrakh'),
                     'Beethoven_vln_sonata5_Oistrakh_03.wav':
                     ('Sonata No. 5, Mvt. 3', 'L. V. Beethoven','F Major','Violin and Piano', 'David Oistrakh'),
                     'Beethoven_vln_sonata5_Oistrakh_04.wav':
                     ('Sonata No. 5, Mvt. 4', 'L. V. Beethoven','F Major','Violin and Piano', 'David Oistrakh'),
                     'Beethoven_vln_sonata5_Oistrakh_05.wav':
                     ('Sonata No. 5, Mvt. 5', 'L. V. Beethoven','F Major','Violin and Piano', 'David Oistrakh'),
                     'Beethoven_vln_sonata5_Francescatti_01.wav':
                     ('Sonata No. 5, Mvt. 1', 'L. V. Beethoven','F Major','Violin and Piano', 'Zino Francescatti'),
                     'Beethoven_vln_sonata5_Francescatti_02.wav':
                     ('Sonata No. 5, Mvt. 2', 'L. V. Beethoven','F Major','Violin and Piano', 'Zino Francescatti'),
                     'Beethoven_vln_sonata5_Francescatti_03.wav':
                     ('Sonata No. 5, Mvt. 3', 'L. V. Beethoven','F Major','Violin and Piano', 'Zino Francescatti'),
                     'Beethoven_vln_sonata5_Francescatti_04.wav':
                     ('Sonata No. 5, Mvt. 4', 'L. V. Beethoven','F Major','Violin and Piano', 'Zino Francescatti'),
                     'Beethoven_vln_sonata5_Francescatti_05.wav':
                     ('Sonata No. 5, Mvt. 5', 'L. V. Beethoven','F Major','Violin and Piano', 'Zino Francescatti'),
                     'Bach Vln Partita3 - Fischbach 2004 - 01.wav':
                     ('Partita No. 3 - Preludio', 'J. S. Bach', 'E Major', 'Violin', 'Garrett Fischbach'),
                     'Bach Vln Partita3 - Fischbach 2004 - 03.wav':
                     ('Partita No. 3 - Gavotte en Rondeau', 'J. S. Bach', 'E Major', 'Violin', 'Garrett Fischbach'),
                     'Bach Vln Sonata1 - Fischbach 2004 - 02.wav':
                     ('Sonata No. 1 - Fuga', 'J. S. Bach', 'G minor', 'Violin', 'Garrett Fischbach'),
                     'Bach Vln Partita3 - Milstein 1955 - 01.wav':
                     ('Partita No. 3 - Preludio', 'J. S. Bach', 'E Major', 'Violin', 'Nathan Milstein'),
                     'Bach Vln Partita3 - Milstein 1955 - 03.wav':
                     ('Partita No. 3 - Gavotte en Rondeau', 'J. S. Bach', 'E Major', 'Violin', 'Nathan Milstein'),
                     'Bach Vln Sonata1 - Milstein 1954 - 02.wav':
                     ('Sonata No. 1 - Fuga', 'J. S. Bach', 'G minor', 'Violin', 'Nathan Milstein'),
                     
                     'brahms_rhapsody_01.wav':
                     ('Brahms Rhapsody Op.79, No.2', 'J. Brahms','G minor','Piano','Lili Kraus'),

                     'brahms_rhapsody_02.wav':
                     ('Brahms Rhapsody Op.79, No.2', 'J. Brahms','G minor','Piano','Martha Argerich'),

                     'debussy_toccata.wav':
                     ('Debussy Toccata from Pour le Piano', 'C. Debussy','N/A','Piano','Boris Feiner'),

                     'dont_stop_believin.wav':
                     ('Don\'t Stop Believin\'', 'Journey','E major','Vocal, Guitar, Bass, Piano, Drums','Journey'),

                     'lady_madonna.wav':
                     ('Lady Madonna', 'The Beatles','E major','Vocal, Guitar, Bass, Piano, Saxophone, Drums','The Beatles'),

                     'let_it_be.wav':
                     ('Let it Be', 'The Beatles','C major','Vocal, Guitar, Bass, Piano, Drums','The Beatles'),

                     'moonlight.wav':
                     ('Beethoven Piano Sonata No.14', 'L. Beethoven','C# minor','Piano','Unknown'),

                     'office_theme.wav':
                     ('Theme from \'The Office\'', 'Unknown','G Major','Piano','Unknown'),

                     'konstantine.wav':
                     ('Konstantine', 'Andrew McMahon','D minor','Vocal, Piano','Something Corporate'),

                     }
Пример #4
0
    def draw_figure(self, i=0):
        """ Redraws the figure
        """
        if self.rec_input is None:
            return
        
        if self.mypath is None:
            self.mypath = 'default.wav'
        
        
        #self.x, self.fs, self.nbits = mir2.wavread(self.mypath)

        if self.WC == 2:
            path = 'train/'
            filename = self.rankresults[i][0]
            fullpath = path + filename
            self.x, self.fs, self.nbits = mir2.wavread(fullpath)

        if self.WC == 1:
            self.x = self.rec_input
            #self.x, self.fs, self.nbits = mir2.wavread(self.mypath)
            print 'storing rec_input'
        
        self.get_plot_type()

        G = 0

        self.tmax = float(len(self.x))/self.fs
        self.tmin_samp = int(self.tmin*self.fs)
        self.tmax_samp = int(self.tmax*self.fs)

        if self.tmax_samp > len(self.x):
            self.tmax_samp = len(self.x) - 1

        print self.x.shape, self.fs, self.fsz, self.hop
        if self.plot_type == 0:
            P = self.x[self.tmin_samp:self.tmax_samp]
        elif self.plot_type == 1:
            G = mir2.spectrogram(self.x,self.fs, framesz = self.fsz, hop=self.hop, tmin=self.tmin, tmax=self.tmax)
        elif self.plot_type == 2:
            G = mir2.qspectrogram(self.x,self.fs, framesz = self.fsz, hop=self.hop, tmin=self.tmin, tmax=self.tmax)
        elif self.plot_type == 3:
            G = mir2.chromagram(self.x,self.fs, framesz = self.fsz, hop=self.hop, tmin=self.tmin, tmax=self.tmax)

        #self.plot_titlestr = self.mypath + gramtype

        self.axes.clear()
        
        if self.plot_type == 0:
            self.axes.plot(P)
        elif self.plot_type == 1 or 2 or 3:
            
            if self.LG_flag == 0:
                self.LG_str = None
                self.axes.imshow(G.X, aspect='auto', interpolation ='nearest',origin='lower')
            elif self.LG_flag == 1:
                self.LG_str = 'LogNorm(vmin = 25, vmax = 50)'
                self.axes.imshow(G.X, aspect='auto', interpolation ='nearest',origin='lower', norm = LogNorm())  #vmin = self.LG_vmin, vmax = self.LG_vmax))
        #self.WC = 1

        if self.WC == 1:
            self.canvas.draw()
        if self.WC == 2:
            self.canvas2.draw()
Пример #5
0
    def create_main_panel(self):
        """ Creates the main panel with all the controls on it:
             * mpl canvas 
             * mpl navigation toolbar
             * Control panel for interaction
        """
        self.panel = wx.Panel(self)

        # Create the mpl Figure and FigCanvas objects.
        # 5x4 inches, 100 dots-per-inch
        #
        self.dpi = 100
        self.fig = Figure((3.0, 3.0), dpi=self.dpi)
        self.canvas = FigCanvas(self.panel, -1, self.fig)
        self.canvas2 = FigCanvas(self.panel, -1, self.fig)

        # Since we have only one plot, we can use add_axes
        # instead of add_subplot, but then the subplot
        # configuration tool in the navigation toolbar wouldn't
        # work.
        #
        self.axes = self.fig.add_subplot(111)

        # Bind the 'pick' event for clicking on one of the bars
        #
        self.canvas.mpl_connect('pick_event', self.on_pick)

        self.drawbutton = wx.Button(self.panel, -1, "Plot Gram")
        self.Bind(wx.EVT_BUTTON, self.on_draw_button, self.drawbutton)

        self.plot_select = [
            'Time Domain Signal', 'Spectrogram', 'Constant Q Spectrogram',
            'Chromagram'
        ]
        self.combo = wx.ComboBox(self.panel,
                                 -1,
                                 pos=(0, 400),
                                 choices=self.plot_select,
                                 style=wx.ALIGN_LEFT | wx.CB_READONLY)
        self.combo.SetSelection(2)

        self.setbutton = wx.Button(self.panel, -1, "Set Parameters")
        self.Bind(wx.EVT_BUTTON, self.on_set_button, self.setbutton)

        self.record = wx.BitmapButton(self.panel, -1, wx.Bitmap('record.png'))
        self.Bind(wx.EVT_BUTTON, self.on_rec, self.record)

        self.play = wx.BitmapButton(self.panel, -1, wx.Bitmap('play.png'))
        self.Bind(wx.EVT_BUTTON, self.on_play, self.play)
        self.stop = wx.BitmapButton(self.panel, -1, wx.Bitmap('stop.png'))

        self.searchbutton = wx.Button(self.panel, -1, "Search Database")
        self.Bind(wx.EVT_BUTTON, self.search, self.searchbutton)

        self.searchbutton1 = wx.Button(self.panel,
                                       -1,
                                       style=wx.BU_LEFT,
                                       name="1) Sonata in A Maj., Beethoven")
        self.searchbutton2 = wx.Button(self.panel,
                                       -1,
                                       style=wx.BU_LEFT,
                                       name="2) Polonaise in G Min., Chopin")
        self.searchbutton3 = wx.Button(
            self.panel,
            -1,
            style=wx.BU_LEFT,
            name="3) Rondo No. 5 in C# Min., Bartok")
        self.searchbutton4 = wx.Button(self.panel,
                                       -1,
                                       style=wx.BU_LEFT,
                                       name="1) Sonata in A Maj., Beethoven")
        self.searchbutton5 = wx.Button(self.panel,
                                       -1,
                                       style=wx.BU_LEFT,
                                       name="2) Polonaise in G Min., Chopin")
        self.searchbutton6 = wx.Button(
            self.panel,
            -1,
            style=wx.BU_LEFT,
            name="3) Rondo No. 5 in C# Min., Bartok")
        self.searchbutton7 = wx.Button(self.panel,
                                       -1,
                                       style=wx.BU_LEFT,
                                       name="1) Sonata in A Maj., Beethoven")
        self.searchbutton8 = wx.Button(self.panel,
                                       -1,
                                       style=wx.BU_LEFT,
                                       name="2) Polonaise in G Min., Chopin")
        self.searchbutton9 = wx.Button(
            self.panel,
            -1,
            style=wx.BU_LEFT,
            name="3) Rondo No. 5 in C# Min., Bartok")
        self.searchbutton10 = wx.Button(self.panel,
                                        -1,
                                        style=wx.BU_LEFT,
                                        name="1) Sonata in A Maj., Beethoven")
        self.Sbuttonlist = [
            self.searchbutton1, self.searchbutton2, self.searchbutton3,
            self.searchbutton4, self.searchbutton5, self.searchbutton6,
            self.searchbutton7, self.searchbutton8, self.searchbutton9,
            self.searchbutton10
        ]

        self.Bind(wx.EVT_BUTTON, self.getmeta1, self.searchbutton1)
        self.Bind(wx.EVT_BUTTON, self.getmeta2, self.searchbutton2)
        self.Bind(wx.EVT_BUTTON, self.getmeta3, self.searchbutton3)
        self.Bind(wx.EVT_BUTTON, self.getmeta4, self.searchbutton4)
        self.Bind(wx.EVT_BUTTON, self.getmeta5, self.searchbutton5)
        self.Bind(wx.EVT_BUTTON, self.getmeta6, self.searchbutton6)
        self.Bind(wx.EVT_BUTTON, self.getmeta7, self.searchbutton7)
        self.Bind(wx.EVT_BUTTON, self.getmeta8, self.searchbutton8)
        self.Bind(wx.EVT_BUTTON, self.getmeta9, self.searchbutton9)
        self.Bind(wx.EVT_BUTTON, self.getmeta10, self.searchbutton10)

        #self.plt_titlestr = ''
        #self.plot_title = wx.StaticText(self.panel, -1, 'text1',(30,15), style=wx.ALIGN_CENTRE)

        # Create the navigation toolbar, tied to the canvas
        #
        self.toolbar = NavigationToolbar(self.canvas)

        #
        # Layout with box sizers
        #

        flags = wx.ALIGN_LEFT | wx.ALL | wx.GROW

        self.vbox = wx.BoxSizer(wx.VERTICAL)

        self.hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        self.vbox2 = wx.BoxSizer(wx.VERTICAL)
        self.vbox3 = wx.BoxSizer(wx.VERTICAL)

        self.vbox2.AddStretchSpacer(1)
        self.vbox2.Add(self.searchbutton1, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton2, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton3, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton4, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton5, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton6, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton7, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton8, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton9, 0, border=3, flag=flags)
        self.vbox2.Add(self.searchbutton10, 0, border=3, flag=flags)
        self.vbox2.AddStretchSpacer(1)

        self.vbox3.Add(self.canvas, 10,
                       wx.RIGHT | wx.TOP | wx.ALIGN_RIGHT | wx.GROW)
        self.vbox3.Add(self.canvas2, 10,
                       wx.RIGHT | wx.TOP | wx.ALIGN_RIGHT | wx.GROW)

        self.hbox2.Add(self.vbox2, 0,
                       wx.LEFT | wx.TOP | wx.ALIGN_LEFT | wx.GROW)

        #self.panel.SetSizer(self.vbox)
        #self.vbox.Fit(self)
        self.hbox2.Add(self.vbox3, 10,
                       wx.RIGHT | wx.TOP | wx.ALIGN_RIGHT | wx.GROW)

        self.vbox.Add(self.hbox2, 0, wx.LEFT | wx.TOP | wx.GROW)

        self.vbox.Add(self.toolbar, 0, wx.EXPAND)
        self.vbox.AddSpacer(7)

        self.hbox = wx.BoxSizer(wx.HORIZONTAL)

        self.hbox.AddSpacer(15)
        self.hbox.Add(self.combo, 0, border=3, flag=flags)
        self.hbox.AddSpacer(30)
        self.hbox.Add(self.setbutton, 0, border=3, flag=flags)
        self.hbox.AddSpacer(30)
        self.hbox.Add(self.drawbutton, 0, border=3, flag=flags)
        self.hbox.AddSpacer(30)
        self.hbox.Add(self.play, 0, flag=flags)
        self.hbox.Add(self.stop, 0, flag=flags)
        self.hbox.Add(self.record, 0, flag=flags)
        self.hbox.AddSpacer(30)
        self.hbox.Add(self.searchbutton, 0, border=3, flag=flags)
        self.hbox.AddSpacer(30)

        self.vbox.Add(self.hbox,
                      0,
                      flag=wx.ALIGN_LEFT | wx.BOTTOM | wx.EXPAND | wx.GROW)

        self.panel.SetSizer(self.vbox)
        self.vbox.Fit(self)

        self.mypath = None
        self.fsz = 0.040
        self.hop = 0.020
        self.fmax = 44100
        self.x, self.fs, self.nbits = mir2.wavread('default.wav')
        #self.tmax = round(float(len(self.x))/self.fs,2)
        self.rectime = 20
        self.tmax = self.rectime

        self.tmin = 0
        self.LG_flag = 0
        self.LG_str = None
        self.LG_vmin = 25
        self.LG_vmax = 50
        self.tmin_samp = None
        self.tmax_samp = None
        self.WC = 1
        #self.rec_input = mir2.wavread('default.wav')#None
        self.rec_input = None
        self.rankresults = [('Beethoven_vln_sonata5_Francescatti_01.wav', 1),
                            ('adksfjghl', 3)]

        self.dict = {
            'Beethoven_vln_sonata5_Zukerman_01.wav':
            ('Sonata No. 5, Mvt. 1', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Pinchas Zukerman'),
            'Beethoven_vln_sonata5_Zukerman_02.wav':
            ('Sonata No. 5, Mvt. 2', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Pinchas Zukerman'),
            'Beethoven_vln_sonata5_Zukerman_03.wav':
            ('Sonata No. 5, Mvt. 3', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Pinchas Zukerman'),
            'Beethoven_vln_sonata5_Zukerman_04.wav':
            ('Sonata No. 5, Mvt. 4', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Pinchas Zukerman'),
            'Beethoven_vln_sonata5_Zukerman_05.wav':
            ('Sonata No. 5, Mvt. 5', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Pinchas Zukerman'),
            'Beethoven_vln_sonata5_Oistrakh_01.wav':
            ('Sonata No. 5, Mvt. 1', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'David Oistrakh'),
            'Beethoven_vln_sonata5_Oistrakh_02.wav':
            ('Sonata No. 5, Mvt. 2', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'David Oistrakh'),
            'Beethoven_vln_sonata5_Oistrakh_03.wav':
            ('Sonata No. 5, Mvt. 3', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'David Oistrakh'),
            'Beethoven_vln_sonata5_Oistrakh_04.wav':
            ('Sonata No. 5, Mvt. 4', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'David Oistrakh'),
            'Beethoven_vln_sonata5_Oistrakh_05.wav':
            ('Sonata No. 5, Mvt. 5', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'David Oistrakh'),
            'Beethoven_vln_sonata5_Francescatti_01.wav':
            ('Sonata No. 5, Mvt. 1', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Zino Francescatti'),
            'Beethoven_vln_sonata5_Francescatti_02.wav':
            ('Sonata No. 5, Mvt. 2', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Zino Francescatti'),
            'Beethoven_vln_sonata5_Francescatti_03.wav':
            ('Sonata No. 5, Mvt. 3', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Zino Francescatti'),
            'Beethoven_vln_sonata5_Francescatti_04.wav':
            ('Sonata No. 5, Mvt. 4', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Zino Francescatti'),
            'Beethoven_vln_sonata5_Francescatti_05.wav':
            ('Sonata No. 5, Mvt. 5', 'L. V. Beethoven', 'F Major',
             'Violin and Piano', 'Zino Francescatti'),
            'Bach Vln Partita3 - Fischbach 2004 - 01.wav':
            ('Partita No. 3 - Preludio', 'J. S. Bach', 'E Major', 'Violin',
             'Garrett Fischbach'),
            'Bach Vln Partita3 - Fischbach 2004 - 03.wav':
            ('Partita No. 3 - Gavotte en Rondeau', 'J. S. Bach', 'E Major',
             'Violin', 'Garrett Fischbach'),
            'Bach Vln Sonata1 - Fischbach 2004 - 02.wav':
            ('Sonata No. 1 - Fuga', 'J. S. Bach', 'G minor', 'Violin',
             'Garrett Fischbach'),
            'Bach Vln Partita3 - Milstein 1955 - 01.wav':
            ('Partita No. 3 - Preludio', 'J. S. Bach', 'E Major', 'Violin',
             'Nathan Milstein'),
            'Bach Vln Partita3 - Milstein 1955 - 03.wav':
            ('Partita No. 3 - Gavotte en Rondeau', 'J. S. Bach', 'E Major',
             'Violin', 'Nathan Milstein'),
            'Bach Vln Sonata1 - Milstein 1954 - 02.wav':
            ('Sonata No. 1 - Fuga', 'J. S. Bach', 'G minor', 'Violin',
             'Nathan Milstein'),
            'brahms_rhapsody_01.wav': ('Brahms Rhapsody Op.79, No.2',
                                       'J. Brahms', 'G minor', 'Piano',
                                       'Lili Kraus'),
            'brahms_rhapsody_02.wav': ('Brahms Rhapsody Op.79, No.2',
                                       'J. Brahms', 'G minor', 'Piano',
                                       'Martha Argerich'),
            'debussy_toccata.wav': ('Debussy Toccata from Pour le Piano',
                                    'C. Debussy', 'N/A', 'Piano',
                                    'Boris Feiner'),
            'dont_stop_believin.wav': ('Don\'t Stop Believin\'', 'Journey',
                                       'E major',
                                       'Vocal, Guitar, Bass, Piano, Drums',
                                       'Journey'),
            'lady_madonna.wav':
            ('Lady Madonna', 'The Beatles', 'E major',
             'Vocal, Guitar, Bass, Piano, Saxophone, Drums', 'The Beatles'),
            'let_it_be.wav': ('Let it Be', 'The Beatles', 'C major',
                              'Vocal, Guitar, Bass, Piano, Drums',
                              'The Beatles'),
            'moonlight.wav': ('Beethoven Piano Sonata No.14', 'L. Beethoven',
                              'C# minor', 'Piano', 'Unknown'),
            'office_theme.wav': ('Theme from \'The Office\'', 'Unknown',
                                 'G Major', 'Piano', 'Unknown'),
            'konstantine.wav': ('Konstantine', 'Andrew McMahon', 'D minor',
                                'Vocal, Piano', 'Something Corporate'),
        }
Пример #6
0
    def draw_figure(self, i=0):
        """ Redraws the figure
        """
        if self.rec_input is None:
            return

        if self.mypath is None:
            self.mypath = 'default.wav'

        #self.x, self.fs, self.nbits = mir2.wavread(self.mypath)

        if self.WC == 2:
            path = 'train/'
            filename = self.rankresults[i][0]
            fullpath = path + filename
            self.x, self.fs, self.nbits = mir2.wavread(fullpath)

        if self.WC == 1:
            self.x = self.rec_input
            #self.x, self.fs, self.nbits = mir2.wavread(self.mypath)
            print 'storing rec_input'

        self.get_plot_type()

        G = 0

        self.tmax = float(len(self.x)) / self.fs
        self.tmin_samp = int(self.tmin * self.fs)
        self.tmax_samp = int(self.tmax * self.fs)

        if self.tmax_samp > len(self.x):
            self.tmax_samp = len(self.x) - 1

        print self.x.shape, self.fs, self.fsz, self.hop
        if self.plot_type == 0:
            P = self.x[self.tmin_samp:self.tmax_samp]
        elif self.plot_type == 1:
            G = mir2.spectrogram(self.x,
                                 self.fs,
                                 framesz=self.fsz,
                                 hop=self.hop,
                                 tmin=self.tmin,
                                 tmax=self.tmax)
        elif self.plot_type == 2:
            G = mir2.qspectrogram(self.x,
                                  self.fs,
                                  framesz=self.fsz,
                                  hop=self.hop,
                                  tmin=self.tmin,
                                  tmax=self.tmax)
        elif self.plot_type == 3:
            G = mir2.chromagram(self.x,
                                self.fs,
                                framesz=self.fsz,
                                hop=self.hop,
                                tmin=self.tmin,
                                tmax=self.tmax)

        #self.plot_titlestr = self.mypath + gramtype

        self.axes.clear()

        if self.plot_type == 0:
            self.axes.plot(P)
        elif self.plot_type == 1 or 2 or 3:

            if self.LG_flag == 0:
                self.LG_str = None
                self.axes.imshow(G.X,
                                 aspect='auto',
                                 interpolation='nearest',
                                 origin='lower')
            elif self.LG_flag == 1:
                self.LG_str = 'LogNorm(vmin = 25, vmax = 50)'
                self.axes.imshow(G.X,
                                 aspect='auto',
                                 interpolation='nearest',
                                 origin='lower',
                                 norm=LogNorm()
                                 )  #vmin = self.LG_vmin, vmax = self.LG_vmax))
        #self.WC = 1

        if self.WC == 1:
            self.canvas.draw()
        if self.WC == 2:
            self.canvas2.draw()