xiRetimer

fit recorded audio to a tempo
git clone https://git.ce9e.org/xiRetimer.git

commit
f9ab71f8dc36001230f34637edf52316fd2c2b36
parent
f0b36abc7cce2855447198fe7e88e4b9e76a11f1
Author
Tobias Bengfort <tobias.bengfort@gmx.net>
Date
2010-11-19 20:26
added binaries

Diffstat

A makefile 19 +++++++++++++++++++
A src/gui/retimer_wx.cpp 281 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A xiRetimer 0

3 files changed, 300 insertions, 0 deletions


diff --git a/makefile b/makefile

@@ -0,0 +1,19 @@
   -1     1 CC      = /usr/bin/g++
   -1     2 CFLAGS  =  -DICONS_GNOME -DMODE_RUBBERBAND -UENABLE_MP3 -DVERSION=\"0.2\" `sdl-config --cflags` `pkg-config --cflags sndfile  rubberband` `wx-config --cppflags`
   -1     3 LDFLAGS = `sdl-config --libs` `pkg-config --libs sndfile  rubberband` `wx-config --libs`
   -1     4 
   -1     5 xiRetimer: .gui .back
   -1     6 	$(CC) -o xiRetimer *.o $(LDFLAGS)
   -1     7 
   -1     8 .gui: .back src/gui/*.cpp src/gui/*.h
   -1     9 	$(CC) $(CFLAGS) -c src/gui/*.cpp src/gui/*.h
   -1    10 	touch .gui
   -1    11 
   -1    12 .back: src/*.cpp src/*.h
   -1    13 	$(CC) $(CFLAGS) -c src/*.cpp src/*.h
   -1    14 	touch .back
   -1    15 
   -1    16 .PHONY: clean
   -1    17 clean:
   -1    18 	rm -f *.o src/*.gch src/gui/*.gch .gui .back
   -1    19 

diff --git a/src/gui/retimer_wx.cpp b/src/gui/retimer_wx.cpp

@@ -0,0 +1,281 @@
   -1     1 ///////////////////////////////////////////////////////////////////////////
   -1     2 // C++ code generated with wxFormBuilder (version Dec 21 2009)
   -1     3 // http://www.wxformbuilder.org/
   -1     4 //
   -1     5 // PLEASE DO "NOT" EDIT THIS FILE!
   -1     6 ///////////////////////////////////////////////////////////////////////////
   -1     7 // sorry guys, I edited it
   -1     8 
   -1     9 #include "retimer_wx.h"
   -1    10 
   -1    11 ///////////////////////////////////////////////////////////////////////////
   -1    12 
   -1    13 MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
   -1    14 {
   -1    15 wxInitAllImageHandlers();
   -1    16 	this->SetSizeHints( wxDefaultSize, wxDefaultSize );
   -1    17 	
   -1    18 	wxBoxSizer* bSizer3;
   -1    19 	bSizer3 = new wxBoxSizer( wxVERTICAL );
   -1    20 	
   -1    21 	this->SetSizer( bSizer3 );
   -1    22 	this->Layout();
   -1    23 	m_statusBar1 = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );
   -1    24 	m_menubar3 = new wxMenuBar( 0 );
   -1    25 	m_file = new wxMenu();
   -1    26 	wxMenuItem* m_open;
   -1    27 	m_open = new wxMenuItem( m_file, wxID_ANY, wxString( wxT("open") ) + wxT('\t') + wxT("CTRL+f"), wxEmptyString, wxITEM_NORMAL );
   -1    28 	#ifdef ICONS_GNOME
   -1    29 	m_open->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/fileopen.png"), wxBITMAP_TYPE_ANY ) );
   -1    30 	#endif
   -1    31 	m_file->Append( m_open );
   -1    32 	
   -1    33 	wxMenuItem* m_export;
   -1    34 	m_export = new wxMenuItem( m_file, wxID_ANY, wxString( wxT("export") ) + wxT('\t') + wxT("CTRL+s"), wxEmptyString, wxITEM_NORMAL );
   -1    35 	#ifdef ICONS_GNOME
   -1    36 	m_export->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/document-save.png"), wxBITMAP_TYPE_ANY ) );
   -1    37 	#endif
   -1    38 	m_file->Append( m_export );
   -1    39 	
   -1    40 	wxMenuItem* m_separator6;
   -1    41 	m_separator6 = m_file->AppendSeparator();
   -1    42 	
   -1    43 	wxMenuItem* m_prefs;
   -1    44 	m_prefs = new wxMenuItem( m_file, wxID_ANY, wxString( wxT("preferences") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL );
   -1    45 	#ifdef ICONS_GNOME
   -1    46 	m_prefs->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/document-properties.png"), wxBITMAP_TYPE_ANY ) );
   -1    47 	#endif
   -1    48 	m_file->Append( m_prefs );
   -1    49 	
   -1    50 	wxMenuItem* m_separator7;
   -1    51 	m_separator7 = m_file->AppendSeparator();
   -1    52 	
   -1    53 	wxMenuItem* b_exit;
   -1    54 	b_exit = new wxMenuItem( m_file, wxID_ANY, wxString( wxT("Exit") ) , wxEmptyString, wxITEM_NORMAL );
   -1    55 	#ifdef ICONS_GNOME
   -1    56 	b_exit->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/window-close.png"), wxBITMAP_TYPE_ANY ) );
   -1    57 	#endif
   -1    58 	m_file->Append( b_exit );
   -1    59 	
   -1    60 	m_menubar3->Append( m_file, wxT("File") );
   -1    61 	
   -1    62 	m_edit = new wxMenu();
   -1    63 	wxMenuItem* m_play;
   -1    64 	m_play = new wxMenuItem( m_edit, wxID_ANY, wxString( wxT("play/pause") ) + wxT('\t') + wxT("SPACE"), wxEmptyString, wxITEM_NORMAL );
   -1    65 	#ifdef ICONS_GNOME
   -1    66 	m_play->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/media-playback-start.png"), wxBITMAP_TYPE_ANY ) );
   -1    67 	#endif
   -1    68 	m_edit->Append( m_play );
   -1    69 	
   -1    70 	wxMenuItem* m_start;
   -1    71 	m_start = new wxMenuItem( m_edit, wxID_ANY, wxString( wxT("start") ) + wxT('\t') + wxT("CTRL+LEFT"), wxEmptyString, wxITEM_NORMAL );
   -1    72 	#ifdef ICONS_GNOME
   -1    73 	m_start->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/media-skip-backward.png"), wxBITMAP_TYPE_ANY ) );
   -1    74 	#endif
   -1    75 	m_edit->Append( m_start );
   -1    76 	
   -1    77 	wxMenuItem* m_separator8;
   -1    78 	m_separator8 = m_edit->AppendSeparator();
   -1    79 	
   -1    80 	wxMenuItem* m_clear;
   -1    81 	m_clear = new wxMenuItem( m_edit, wxID_ANY, wxString( wxT("clear markers") ) + wxT('\t') + wxT("CTRL+c"), wxEmptyString, wxITEM_NORMAL );
   -1    82 	#ifdef ICONS_GNOME
   -1    83 	m_clear->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/edit-clear.png"), wxBITMAP_TYPE_ANY ) );
   -1    84 	#endif
   -1    85 	m_edit->Append( m_clear );
   -1    86 	
   -1    87 	wxMenuItem* m_process;
   -1    88 	m_process = new wxMenuItem( m_edit, wxID_ANY, wxString( wxT("update audio data") ) + wxT('\t') + wxT("CTRL+u"), wxEmptyString, wxITEM_NORMAL );
   -1    89 	#ifdef ICONS_GNOME
   -1    90 	m_process->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/stock_refresh.png"), wxBITMAP_TYPE_ANY ) );
   -1    91 	#endif
   -1    92 	m_edit->Append( m_process );
   -1    93 	
   -1    94 	m_menubar3->Append( m_edit, wxT("Edit") );
   -1    95 	
   -1    96 	m_help = new wxMenu();
   -1    97 	wxMenuItem* m_about;
   -1    98 	m_about = new wxMenuItem( m_help, wxID_ANY, wxString( wxT("about") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL );
   -1    99 	#ifdef ICONS_GNOME
   -1   100 	m_about->SetBitmap( wxBitmap( wxT("/usr/share/icons/gnome/16x16/actions/help-about.png"), wxBITMAP_TYPE_ANY ) );
   -1   101 	#endif
   -1   102 	m_help->Append( m_about );
   -1   103 	
   -1   104 	m_menubar3->Append( m_help, wxT("Help") );
   -1   105 	
   -1   106 	this->SetMenuBar( m_menubar3 );
   -1   107 	
   -1   108 	
   -1   109 	// Connect Events
   -1   110 	this->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( MainFrame::OnLeftDClick ) );
   -1   111 	this->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( MainFrame::OnLeftDown ) );
   -1   112 	this->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( MainFrame::OnLeftUp ) );
   -1   113 	this->Connect( wxEVT_MOTION, wxMouseEventHandler( MainFrame::OnMotion ) );
   -1   114 	this->Connect( wxEVT_PAINT, wxPaintEventHandler( MainFrame::OnPaint ) );
   -1   115 	this->Connect( wxEVT_SIZE, wxSizeEventHandler( MainFrame::OnSize ) );
   -1   116 	this->Connect( m_open->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnOpenClick ) );
   -1   117 	this->Connect( m_export->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnExportClick ) );
   -1   118 	this->Connect( m_prefs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnPrefsClick ) );
   -1   119 	this->Connect( b_exit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnExitClick ) );
   -1   120 	this->Connect( m_play->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnPlayClick ) );
   -1   121 	this->Connect( m_start->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnStartClick ) );
   -1   122 	this->Connect( m_clear->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnClearClick ) );
   -1   123 	this->Connect( m_process->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnProcessClick ) );
   -1   124 	this->Connect( m_about->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnHelpClick ) );
   -1   125 }
   -1   126 
   -1   127 MainFrame::~MainFrame()
   -1   128 {
   -1   129 	// Disconnect Events
   -1   130 	this->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( MainFrame::OnLeftDClick ) );
   -1   131 	this->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( MainFrame::OnLeftDown ) );
   -1   132 	this->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( MainFrame::OnLeftUp ) );
   -1   133 	this->Disconnect( wxEVT_MOTION, wxMouseEventHandler( MainFrame::OnMotion ) );
   -1   134 	this->Disconnect( wxEVT_PAINT, wxPaintEventHandler( MainFrame::OnPaint ) );
   -1   135 	this->Disconnect( wxEVT_SIZE, wxSizeEventHandler( MainFrame::OnSize ) );
   -1   136 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnOpenClick ) );
   -1   137 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnExportClick ) );
   -1   138 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnPrefsClick ) );
   -1   139 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnExitClick ) );
   -1   140 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnPlayClick ) );
   -1   141 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnStartClick ) );
   -1   142 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnClearClick ) );
   -1   143 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnProcessClick ) );
   -1   144 	this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrame::OnHelpClick ) );
   -1   145 }
   -1   146 
   -1   147 AboutDialog::AboutDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
   -1   148 {
   -1   149 	this->SetSizeHints( wxDefaultSize, wxDefaultSize );
   -1   150 	
   -1   151 	wxBoxSizer* bSizer4;
   -1   152 	bSizer4 = new wxBoxSizer( wxVERTICAL );
   -1   153 	
   -1   154 	wxBoxSizer* bSizer14;
   -1   155 	bSizer14 = new wxBoxSizer( wxVERTICAL );
   -1   156 	
   -1   157 	m_staticText7 = new wxStaticText( this, wxID_ANY, wxT("xiRetimer v0.2"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   158 	m_staticText7->Wrap( -1 );
   -1   159 	bSizer14->Add( m_staticText7, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
   -1   160 	
   -1   161 	m_staticText1 = new wxStaticText( this, wxID_ANY, wxT("Created by xi."), wxDefaultPosition, wxDefaultSize, 0 );
   -1   162 	m_staticText1->Wrap( -1 );
   -1   163 	bSizer14->Add( m_staticText1, 0, wxALIGN_CENTER|wxALL, 5 );
   -1   164 	
   -1   165 	m_staticText2 = new wxStaticText( this, wxID_ANY, wxT("www.github.com/xi"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   166 	m_staticText2->Wrap( -1 );
   -1   167 	bSizer14->Add( m_staticText2, 0, wxALIGN_CENTER|wxALL, 5 );
   -1   168 	
   -1   169 	bSizer4->Add( bSizer14, 1, wxEXPAND, 5 );
   -1   170 	
   -1   171 	wxBoxSizer* bSizer7;
   -1   172 	bSizer7 = new wxBoxSizer( wxVERTICAL );
   -1   173 	
   -1   174 	m_button1 = new wxButton( this, wxID_ANY, wxT("OK"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   175 	bSizer7->Add( m_button1, 0, wxALIGN_CENTER|wxALL, 5 );
   -1   176 	
   -1   177 	bSizer4->Add( bSizer7, 0, wxEXPAND, 5 );
   -1   178 	
   -1   179 	this->SetSizer( bSizer4 );
   -1   180 	this->Layout();
   -1   181 	
   -1   182 	// Connect Events
   -1   183 	m_button1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDialog::OnOKClick ), NULL, this );
   -1   184 }
   -1   185 
   -1   186 AboutDialog::~AboutDialog()
   -1   187 {
   -1   188 	// Disconnect Events
   -1   189 	m_button1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDialog::OnOKClick ), NULL, this );
   -1   190 }
   -1   191 
   -1   192 PrefsDialog::PrefsDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
   -1   193 {
   -1   194 	this->SetSizeHints( wxDefaultSize, wxDefaultSize );
   -1   195 	
   -1   196 	wxBoxSizer* bSizer5;
   -1   197 	bSizer5 = new wxBoxSizer( wxVERTICAL );
   -1   198 	
   -1   199 	wxFlexGridSizer* fgSizer4;
   -1   200 	fgSizer4 = new wxFlexGridSizer( 2, 2, 0, 0 );
   -1   201 	fgSizer4->AddGrowableCol( 1 );
   -1   202 	fgSizer4->SetFlexibleDirection( wxBOTH );
   -1   203 	fgSizer4->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
   -1   204 	
   -1   205 	l_intmode = new wxStaticText( this, wxID_ANY, wxT("Interpolation Mode"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   206 	l_intmode->Wrap( -1 );
   -1   207 	fgSizer4->Add( l_intmode, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
   -1   208 	
   -1   209 	wxString c_intmodeChoices[] = { wxT("Linear") };
   -1   210 	int c_intmodeNChoices = sizeof( c_intmodeChoices ) / sizeof( wxString );
   -1   211 	c_intmode = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, c_intmodeNChoices, c_intmodeChoices, 0 );
   -1   212 	c_intmode->SetSelection( 0 );
   -1   213 	fgSizer4->Add( c_intmode, 1, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
   -1   214 	
   -1   215 	l_stretchmode = new wxStaticText( this, wxID_ANY, wxT("Stretch Mode"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   216 	l_stretchmode->Wrap( -1 );
   -1   217 	fgSizer4->Add( l_stretchmode, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
   -1   218 	
   -1   219 	// TODO
   -1   220 #ifdef MODE_RUBBERBAND
   -1   221 	wxString c_stretchmodeChoices[] = { wxT("none"), wxT("RubberBand")};
   -1   222 #else
   -1   223 	wxString c_stretchmodeChoices[] = { wxT("none"), wxT("RubberBand (diabled)")};
   -1   224 #endif
   -1   225 	
   -1   226 	int c_stretchmodeNChoices = sizeof( c_stretchmodeChoices ) / sizeof( wxString );
   -1   227 	c_stretchmode = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, c_stretchmodeNChoices, c_stretchmodeChoices, 0 );
   -1   228 	c_stretchmode->SetSelection( 0 );
   -1   229 	fgSizer4->Add( c_stretchmode, 1, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
   -1   230 	
   -1   231 	l_tempo = new wxStaticText( this, wxID_ANY, wxT("Tempo"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   232 	l_tempo->Wrap( -1 );
   -1   233 	fgSizer4->Add( l_tempo, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
   -1   234 	
   -1   235 	t_tempo = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER|wxTE_RIGHT );
   -1   236 	fgSizer4->Add( t_tempo, 1, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
   -1   237 	
   -1   238 	l_beatres = new wxStaticText( this, wxID_ANY, wxT("Beat Resolution"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   239 	l_beatres->Wrap( -1 );
   -1   240 	fgSizer4->Add( l_beatres, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
   -1   241 	
   -1   242 	t_beatres = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER|wxTE_RIGHT );
   -1   243 	fgSizer4->Add( t_beatres, 1, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
   -1   244 	
   -1   245 	bSizer5->Add( fgSizer4, 1, wxEXPAND, 5 );
   -1   246 	
   -1   247 	wxBoxSizer* bSizer15;
   -1   248 	bSizer15 = new wxBoxSizer( wxHORIZONTAL );
   -1   249 	
   -1   250 	b_OK = new wxButton( this, wxID_ANY, wxT("OK"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   251 	bSizer15->Add( b_OK, 0, wxALL|wxALIGN_BOTTOM|wxALIGN_RIGHT, 5 );
   -1   252 	
   -1   253 	b_Cancel = new wxButton( this, wxID_ANY, wxT("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
   -1   254 	b_Cancel->SetToolTip( wxT("Escape") );
   -1   255 	
   -1   256 	bSizer15->Add( b_Cancel, 0, wxALIGN_BOTTOM|wxALIGN_RIGHT|wxALL, 5 );
   -1   257 	
   -1   258 	bSizer5->Add( bSizer15, 0, wxALIGN_RIGHT, 5 );
   -1   259 	
   -1   260 	this->SetSizer( bSizer5 );
   -1   261 	this->Layout();
   -1   262 	
   -1   263 	// Connect Events
   -1   264 	c_intmode->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PrefsDialog::OnIntModeChange ), NULL, this );
   -1   265 	c_stretchmode->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PrefsDialog::OnStretchModeChange ), NULL, this );
   -1   266 	t_tempo->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( PrefsDialog::OnTempoEnter ), NULL, this );
   -1   267 	t_beatres->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( PrefsDialog::OnBeatResEnter ), NULL, this );
   -1   268 	b_OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PrefsDialog::OnOKClick ), NULL, this );
   -1   269 	b_Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PrefsDialog::OnCancelClick ), NULL, this );
   -1   270 }
   -1   271 
   -1   272 PrefsDialog::~PrefsDialog()
   -1   273 {
   -1   274 	// Disconnect Events
   -1   275 	c_intmode->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PrefsDialog::OnIntModeChange ), NULL, this );
   -1   276 	c_stretchmode->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PrefsDialog::OnStretchModeChange ), NULL, this );
   -1   277 	t_tempo->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( PrefsDialog::OnTempoEnter ), NULL, this );
   -1   278 	t_beatres->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( PrefsDialog::OnBeatResEnter ), NULL, this );
   -1   279 	b_OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PrefsDialog::OnOKClick ), NULL, this );
   -1   280 	b_Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PrefsDialog::OnCancelClick ), NULL, this );
   -1   281 }

diff --git a/xiRetimer b/xiRetimer

Binary files differ.