diff -Nru konvertible-0.1.3~karmic~ppa1/ChangeLog konvertible-0.1.4~karmic~ppa1/ChangeLog --- konvertible-0.1.3~karmic~ppa1/ChangeLog 2009-12-22 14:16:57.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/ChangeLog 2010-01-06 09:22:21.000000000 +0000 @@ -1,3 +1,10 @@ +v 0.1.4 -- 6 Jan 2010 +-------------------------- +*Now has a nice progress dialog +*AMR codec double point bitrates can be entered +*User interface enhanced +*Bugfixes + v 0.1.3 -- 22 Dec 2009 -------------------------- *Can determine audio encoders for newer ffmpeg versions which use -codecs switch diff -Nru konvertible-0.1.3~karmic~ppa1/CMakeLists.txt konvertible-0.1.4~karmic~ppa1/CMakeLists.txt --- konvertible-0.1.3~karmic~ppa1/CMakeLists.txt 2009-12-23 15:08:52.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/CMakeLists.txt 2010-01-06 09:22:21.000000000 +0000 @@ -1,6 +1,5 @@ project(konvertible) find_package(KDE4 REQUIRED) -#include (KDE4Defaults) include_directories( ${KDE4_INCLUDES} ${QT_INCLUDES} ) macro_optional_add_subdirectory(doc) @@ -15,14 +14,12 @@ target_link_libraries(konvertible ${KDE4_KDEUI_LIBS} ${KDE4_KFILE_LIBS} ${KDE4_KIO_LIBS}) -install(TARGETS konvertible DESTINATION ${BIN_INSTALL_DIR} ) - ########### install files ############### +install(TARGETS konvertible DESTINATION ${BIN_INSTALL_DIR} ) install( FILES konvertible.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) kde4_install_icons(${ICON_INSTALL_DIR} ) -#install( FILES konvertible.kcfg DESTINATION ${KCFG_INSTALL_DIR} ) -#install( FILES konvertibleui.rc DESTINATION ${DATA_INSTALL_DIR}/konvertible ) + diff -Nru konvertible-0.1.3~karmic~ppa1/debian/changelog konvertible-0.1.4~karmic~ppa1/debian/changelog --- konvertible-0.1.3~karmic~ppa1/debian/changelog 2009-12-24 08:09:20.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/debian/changelog 2010-01-06 12:14:29.000000000 +0000 @@ -1,3 +1,9 @@ +konvertible (0.1.4~karmic~ppa1) karmic; urgency=low + + * Release of the 0.1.4 + + -- Rog131 Wed, 06 Jan 2010 14:14:05 +0200 + konvertible (0.1.3~karmic~ppa1) karmic; urgency=low * Release of the 0.1.3 diff -Nru konvertible-0.1.3~karmic~ppa1/debian/rules konvertible-0.1.4~karmic~ppa1/debian/rules --- konvertible-0.1.3~karmic~ppa1/debian/rules 2009-12-24 08:07:56.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/debian/rules 2010-01-06 12:28:15.000000000 +0000 @@ -51,15 +51,6 @@ # Add here commands to install the package into debian/konvertible. $(MAKE) -C builddir DESTDIR=$(CURDIR)/debian/konvertible install - mkdir -p $(CURDIR)/debian/konvertible/usr/share/icons/hicolor/32x32/apps/ - install hi32-app-konvertible.png $(CURDIR)/debian/konvertible/usr/share/icons/hicolor/32x32/apps/konvertible.png - mkdir -p $(CURDIR)/debian/konvertible/usr/share/icons/hicolor/48x48/apps/ - install hi48-app-konvertible.png $(CURDIR)/debian/konvertible/usr/share/icons/hicolor/48x48/apps/konvertible.png - mkdir -p $(CURDIR)/debian/konvertible/usr/share/icons/hicolor/64x64/apps/ - install hi64-app-konvertible.png $(CURDIR)/debian/konvertible/usr/share/icons/hicolor/64x64/apps/konvertible.png - mkdir -p $(CURDIR)/debian/konvertible/usr/share/icons/hicolor/128x128/apps/ - install hi128-app-konvertible.png $(CURDIR)/debian/konvertible/usr/share/icons/hicolor/128x128/apps/konvertible.png - # Build architecture-independent files here. diff -Nru konvertible-0.1.3~karmic~ppa1/doc/index.docbook konvertible-0.1.4~karmic~ppa1/doc/index.docbook --- konvertible-0.1.3~karmic~ppa1/doc/index.docbook 2009-12-14 11:46:03.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/doc/index.docbook 2010-01-06 09:22:21.000000000 +0000 @@ -1,24 +1,23 @@ Konvertible"> - - - + + + ]> -The Konvertible Handbook +The &konvertible; Handbook Mayibongwe S. Nkambule - -
msnkambule@gmail.com
-
+msnkambule@gmail.com
@@ -29,11 +28,11 @@ &FDLNotice; -2009-12-13 -0.1.2 +2010-01-06 +0.1.4 Konvertible is an application to convert audio files into -a different audio format. It only works if you have got ffmpeg installed. +a different audio format. It only works if you have installed ffmpeg. KDE @@ -48,11 +47,11 @@ Introduction Konvertible allows you to easily convert audio files into other -formats using ffmpeg. You are able to set the codec, bit rate and frequency. +formats via ffmpeg. You are able to set the codec, bit rate and frequency. You can stick with the defaults if you are not familiar with these. The author personally uses Konvertible to convert FLAC files and podcasts into MP3s -so that he can listen to them using his mobile phone. +so that he can listen to them on his mobile phone. @@ -66,6 +65,7 @@ konvertible +This is what will be displayed: @@ -80,7 +80,7 @@ Usage -Konvertible usage is straightforward. The most important things to do are +Konvertible usage is straightforward. The most important things to do are: add files, choose output folder and the codec of the output files. @@ -99,16 +99,25 @@ Add Files: Click this button to add files you want to convert. Destination: Holds the name of the folder where output - files are to be stored. Use the ... button to select the folder, + files are to be stored. Use the button on the right to select the folder, or just type its name. It should be existing. Codec: The codec determines the format of the output files. Please note that the codecs are those those that can be encoded by your installed ffmpeg. For example, to get MP3s, select the MP3 codec (libmp3lame). -Extension: Most of the time you will not need to - type in the extension as it may be determined from the selected codec. +Extension: File extension of output files. Most + of the time you will not need to type in the extension as it may be determined + from the selected codec. If not add it. Channels: Mono is 1 and the default is Stereo(2). -Frequency: -Bitrate: +Frequency: Select the frequency you want your files + to have. If a frequency you want to use is not listed, select Other from the + drop down list and then type the frequency in the dialog that will be displayed. Low frequencies + produce small size files of low quality and higher frequencies produce larger size files of a higher + quality. You can stick with 44100 Hz as audio CDs also use it. +Bitrate: Select the bitrate you want your files + to have. If a bitrate you want to use is not listed, select Other from the + drop down list and then type the bitrate in the dialog that will be displayed. Low bitrates + produce small size files of low quality and higher bitrates produce larger size files of a higher + quality. So choose a high bitrate to get quality sound in lossy codecs. @@ -138,7 +147,12 @@ FAT safe filenames -Right click on top of the name you want to make FAT safe then select +This option removes some characters in the output filename that are not + allowed in FAT filesystems. Such filesystems are found in memory cards, memory + sticks and other devices. Copying a file to FAT devices fails if disallowed + characters have not been removed. +To remove the characters: Right click on + top of the name you want to make FAT safe then select Conform Name to FAT from the menu. @@ -157,16 +171,10 @@ Credits and License -Main developer +Developer -Copyright 2009 Mayibongwe S. Nkambule - - -Contributors: - - -You can have your name here. +Copyright 2009 Mayibongwe S. Nkambule msnkambule@gmail.com @@ -174,40 +182,8 @@ &underGPL; -
- + Binary files /tmp/cb03K8rbUu/konvertible-0.1.3~karmic~ppa1/doc/launch.png and /tmp/vmLnNNs4Vv/konvertible-0.1.4~karmic~ppa1/doc/launch.png differ Binary files /tmp/cb03K8rbUu/konvertible-0.1.3~karmic~ppa1/doc/mainwindow.png and /tmp/vmLnNNs4Vv/konvertible-0.1.4~karmic~ppa1/doc/mainwindow.png differ Binary files /tmp/cb03K8rbUu/konvertible-0.1.3~karmic~ppa1/doc/menu.png and /tmp/vmLnNNs4Vv/konvertible-0.1.4~karmic~ppa1/doc/menu.png differ diff -Nru konvertible-0.1.3~karmic~ppa1/Doxyfile konvertible-0.1.4~karmic~ppa1/Doxyfile --- konvertible-0.1.3~karmic~ppa1/Doxyfile 2009-12-01 17:20:46.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/Doxyfile 1970-01-01 01:00:00.000000000 +0100 @@ -1,323 +0,0 @@ -# Doxyfile 1.5.7.1-KDevelop - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- -DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = konvertible -PROJECT_NUMBER = 1 -OUTPUT_DIRECTORY = -CREATE_SUBDIRS = NO -OUTPUT_LANGUAGE = English -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = YES -STRIP_FROM_PATH = /home/mayibongwe/Documents/ -STRIP_FROM_INC_PATH = -SHORT_NAMES = NO -JAVADOC_AUTOBRIEF = NO -QT_AUTOBRIEF = NO -MULTILINE_CPP_IS_BRIEF = NO -INHERIT_DOCS = YES -SEPARATE_MEMBER_PAGES = NO -TAB_SIZE = 8 -ALIASES = -OPTIMIZE_OUTPUT_FOR_C = NO -OPTIMIZE_OUTPUT_JAVA = NO -OPTIMIZE_FOR_FORTRAN = NO -OPTIMIZE_OUTPUT_VHDL = NO -EXTENSION_MAPPING = -BUILTIN_STL_SUPPORT = NO -CPP_CLI_SUPPORT = NO -SIP_SUPPORT = NO -IDL_PROPERTY_SUPPORT = YES -DISTRIBUTE_GROUP_DOC = NO -SUBGROUPING = YES -TYPEDEF_HIDES_STRUCT = NO -SYMBOL_CACHE_SIZE = 0 -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- -EXTRACT_ALL = NO -EXTRACT_PRIVATE = NO -EXTRACT_STATIC = NO -EXTRACT_LOCAL_CLASSES = YES -EXTRACT_LOCAL_METHODS = NO -EXTRACT_ANON_NSPACES = NO -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = NO -CASE_SENSE_NAMES = YES -HIDE_SCOPE_NAMES = NO -SHOW_INCLUDE_FILES = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = YES -SORT_BRIEF_DOCS = NO -SORT_GROUP_NAMES = NO -SORT_BY_SCOPE_NAME = NO -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 30 -SHOW_USED_FILES = YES -SHOW_DIRECTORIES = NO -SHOW_FILES = YES -SHOW_NAMESPACES = YES -FILE_VERSION_FILTER = -LAYOUT_FILE = -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_IF_DOC_ERROR = YES -WARN_NO_PARAMDOC = NO -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = /home/mayibongwe/GUI_PRO/konvertible -INPUT_ENCODING = UTF-8 -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.d \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.idl \ - *.odl \ - *.cs \ - *.php \ - *.php3 \ - *.inc \ - *.m \ - *.mm \ - *.dox \ - *.py \ - *.f90 \ - *.f \ - *.vhd \ - *.vhdl \ - *.C \ - *.CC \ - *.C++ \ - *.II \ - *.I++ \ - *.H \ - *.HH \ - *.H++ \ - *.CS \ - *.PHP \ - *.PHP3 \ - *.M \ - *.MM \ - *.PY \ - *.F90 \ - *.F \ - *.VHD \ - *.VHDL \ - *.C \ - *.H \ - *.tlh \ - *.diff \ - *.patch \ - *.moc \ - *.xpm \ - *.dox -RECURSIVE = yes -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXCLUDE_SYMBOLS = -EXAMPLE_PATH = -EXAMPLE_PATTERNS = * -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = NO -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = NO -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = NO -REFERENCES_RELATION = NO -REFERENCES_LINK_SOURCE = YES -USE_HTAGS = NO -VERBATIM_HEADERS = YES -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = NO -COLS_IN_ALPHA_INDEX = 5 -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = html -HTML_FILE_EXTENSION = .html -HTML_HEADER = -HTML_FOOTER = -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -HTML_DYNAMIC_SECTIONS = NO -GENERATE_DOCSET = NO -DOCSET_FEEDNAME = "Doxygen generated docs" -DOCSET_BUNDLE_ID = org.doxygen.Project -GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = NO -CHM_INDEX_ENCODING = -BINARY_TOC = NO -TOC_EXPAND = NO -GENERATE_QHP = NO -QCH_FILE = -QHP_NAMESPACE = -QHP_VIRTUAL_FOLDER = doc -QHP_CUSTOM_FILTER_NAME = -QHP_CUST_FILTER_ATTRS = -QHP_SECT_FILTER_ATTRS = -QHG_LOCATION = -DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = NONE -TREEVIEW_WIDTH = 250 -FORMULA_FONTSIZE = 10 -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = YES -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = YES -USE_PDFLATEX = YES -LATEX_BATCHMODE = NO -LATEX_HIDE_INDICES = NO -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = yes -XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = -XML_PROGRAMLISTING = YES -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = konvertible.tag -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES -MSCGEN_PATH = -HIDE_UNDOC_RELATIONS = YES -HAVE_DOT = NO -DOT_FONTNAME = FreeSans -DOT_FONTSIZE = 10 -DOT_FONTPATH = -CLASS_GRAPH = YES -COLLABORATION_GRAPH = YES -GROUP_GRAPHS = YES -UML_LOOK = NO -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = YES -CALL_GRAPH = NO -CALLER_GRAPH = NO -GRAPHICAL_HIERARCHY = YES -DIRECTORY_GRAPH = YES -DOT_IMAGE_FORMAT = png -DOT_PATH = -DOTFILE_DIRS = -DOT_GRAPH_MAX_NODES = 50 -MAX_DOT_GRAPH_DEPTH = 1000 -DOT_TRANSPARENT = NO -DOT_MULTI_TARGETS = NO -GENERATE_LEGEND = YES -DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO Binary files /tmp/cb03K8rbUu/konvertible-0.1.3~karmic~ppa1/hi32-action-konvertible_fail.png and /tmp/vmLnNNs4Vv/konvertible-0.1.4~karmic~ppa1/hi32-action-konvertible_fail.png differ Binary files /tmp/cb03K8rbUu/konvertible-0.1.3~karmic~ppa1/hi32-action-konvertible_success.png and /tmp/vmLnNNs4Vv/konvertible-0.1.4~karmic~ppa1/hi32-action-konvertible_success.png differ Binary files /tmp/cb03K8rbUu/konvertible-0.1.3~karmic~ppa1/hi48-action-konvertible_fail.png and /tmp/vmLnNNs4Vv/konvertible-0.1.4~karmic~ppa1/hi48-action-konvertible_fail.png differ Binary files /tmp/cb03K8rbUu/konvertible-0.1.3~karmic~ppa1/hi48-action-konvertible_success.png and /tmp/vmLnNNs4Vv/konvertible-0.1.4~karmic~ppa1/hi48-action-konvertible_success.png differ diff -Nru konvertible-0.1.3~karmic~ppa1/konvertible.desktop konvertible-0.1.4~karmic~ppa1/konvertible.desktop --- konvertible-0.1.3~karmic~ppa1/konvertible.desktop 2009-12-23 19:25:24.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/konvertible.desktop 2010-01-06 09:22:21.000000000 +0000 @@ -1,10 +1,10 @@ [Desktop Entry] Name=Konvertible -Version=0.1.3 -MimeType=audio/aac;audio/mp4;audio/mpeg;audio/mpegurl;audio/vnd.rn-realaudio;audio/vorbis;audio/x-flac;audio/x-mp3;audio/x-mpegurl;audio/x-ms-wma;audio/x-musepack;audio/x-oggflac;audio/x-pn-realaudio;audio/x-scpls;audio/x-speex;audio/x-vorbis;audio/x-wav;video/x-ms-asf;application/x-ogm-audio;audio/x-vorbis+ogg;application/ogg;audio/ogg; +MimeType=audio/AMR;audio/ac3;audio/x-ape;audio/basic;audio/AMR-WB;audio/aac;audio/x-adpcm;audio/x-aiff;audio/mp2;audio/mp4;audio/mpeg;audio/vnd.rn-realaudio;audio/vorbis;audio/x-flac;audio/x-mp3;audio/x-ms-wma;audio/x-musepack;audio/x-oggflac;audio/x-pn-realaudio;audio/x-speex;audio/x-vorbis;audio/x-wav;video/x-ms-asf;application/x-ogm-audio;audio/x-vorbis+ogg;application/ogg;audio/ogg; Exec=konvertible %U Icon=konvertible Type=Application +X-DocPath=konvertible/index.html GenericName=Audio Files Converter Terminal=false Categories=Qt;KDE;AudioVideo;Audio; Binary files /tmp/cb03K8rbUu/konvertible-0.1.3~karmic~ppa1/konvertible.xcf and /tmp/vmLnNNs4Vv/konvertible-0.1.4~karmic~ppa1/konvertible.xcf differ diff -Nru konvertible-0.1.3~karmic~ppa1/main.cpp konvertible-0.1.4~karmic~ppa1/main.cpp --- konvertible-0.1.3~karmic~ppa1/main.cpp 2009-12-23 20:55:50.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/main.cpp 2010-01-06 09:22:20.000000000 +0000 @@ -31,21 +31,21 @@ "konvertible", 0, ki18n("Konvertible"), - "0.1.3", - ki18n("Converts audio files to many formats using ffmpeg"), + "0.1.4", + ki18n("Converts audio files to many formats via ffmpeg"), KAboutData::License_GPL, - ki18n("(c) 2009, Mayibongwe S. Nkambule"), + ki18n("(c) 2010, Mayibongwe S. Nkambule"), ki18n(""), "http://konvertible.sourceforge.net", "msnkambule@gmail.com"); aboutData.addAuthor( ki18n("Mayibongwe S. Nkambule"), - ki18n("Developer"), + ki18n(""), "msnkambule@gmail.com", ""); - KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::init( argc, argv, &aboutData ); KCmdLineOptions options; options.add("+[URL(s)]", ki18n("Files/URLs to convert")); @@ -65,6 +65,6 @@ } konvertible->show(); - return app.exec(); + return app.exec(); } diff -Nru konvertible-0.1.3~karmic~ppa1/TODO konvertible-0.1.4~karmic~ppa1/TODO --- konvertible-0.1.3~karmic~ppa1/TODO 2009-12-23 19:21:34.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/TODO 2010-01-06 09:22:21.000000000 +0000 @@ -1,8 +1,6 @@ -*Currently we use ffmpeg to convert files, try to incorporate other - conversion programs like mencoder - -*Create a nice progress dialog - *Add option to add/edit metadata +*Currently we use ffmpeg to convert files, try to incorporate other + conversion programs like flac, oggenc, mencoder + ***** Maybe add video conversion \ No newline at end of file diff -Nru konvertible-0.1.3~karmic~ppa1/window.cpp konvertible-0.1.4~karmic~ppa1/window.cpp --- konvertible-0.1.3~karmic~ppa1/window.cpp 2009-12-23 20:06:19.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/window.cpp 2010-01-06 09:22:20.000000000 +0000 @@ -22,34 +22,88 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +// special strings sorter. For strings containing integers with a suffix +// eg. ["120 Hz", "890 Hz", "89 Hz" ] where Hz is suffix +QStringList mysort(QStringList &list, QString suffix) +{ + QList nums; + for(int i=0; i nums; + for(int i=0; isetHeaderData(0, Qt::Horizontal, QObject::tr("Source")); + m_model->setHeaderData(1, Qt::Horizontal, QObject::tr("Output Name")); + m_model->setHeaderData(2, Qt::Horizontal, QObject::tr("")); + // + m_filelistview = new QTreeView; + m_filelistview->setWhatsThis("List of files to convert.\nRight click to" + " show delete, rename, make FAT safe names options"); + m_filelistview->setAlternatingRowColors(true); + m_filelistview->setRootIsDecorated(false); + m_filelistview->setModel(m_model); + m_filelistview->setSelectionMode(QAbstractItemView::ExtendedSelection); + //m_filelistview->setColumnWidth(2, 64); + connect( m_filelistview, SIGNAL(pressed(QModelIndex)), this, SLOT(showMenu(QModelIndex)) ); addFileBtn = new QPushButton; - addFileBtn->setText("Add Files"); + addFileBtn->setText("&Add Files"); addFileBtn->setWhatsThis("Select files you want to convert."); connect(addFileBtn, SIGNAL(clicked()), this, SLOT(addFiles())); QLabel *alabel = new QLabel("Destination:"); outfolderEdit = new QLineEdit; outfolderEdit->setWhatsThis("The folder where output files will be saved in."); - openfolderBtn = new QPushButton; + openfolderBtn = new KPushButton( KIcon("folder"), ""); openfolderBtn->setWhatsThis("Click to choose destination folder."); - openfolderBtn->setText("..."); connect(openfolderBtn, SIGNAL(clicked()), this, SLOT(setOutFolder())); QHBoxLayout * outLayout = new QHBoxLayout; outLayout->addWidget(alabel); @@ -67,10 +121,12 @@ m_codecBox->setWhatsThis("Audio codec determines type of new files."); findCodecs(); connect(m_codecBox, SIGNAL(currentIndexChanged(int)), SLOT(changeExtension())); + //connect(m_codecBox, SIGNAL(currentIndexChanged(int)), SLOT(clearStatusIcons())); QHBoxLayout * cLayout = new QHBoxLayout; cLayout->addWidget(clabel); cLayout->addWidget(m_codecBox); + //extension m_extension = new QLineEdit; m_extension->setWhatsThis("Extension of output files.\nType it if its blank."); @@ -85,6 +141,7 @@ m_channelsBox->setWhatsThis("Audio channels.\n1 - Mono\n2 - Stereo"); m_channelsBox->setMinimum(1); m_channelsBox->setValue(2); + connect(m_channelsBox, SIGNAL(valueChanged(int)), SLOT(clearStatusIcons())); QLabel *chlabel = new QLabel("Channels:"); chlabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); QHBoxLayout * chLayout = new QHBoxLayout; @@ -94,8 +151,11 @@ //frequency m_freqBox = new QComboBox; m_freqBox->setWhatsThis("Low Frequency means low quality and small file size."); + m_freqBox->addItems( QStringList() << frequencies << "Other" ); + m_curFreq = "44100 Hz"; + m_freqBox->setCurrentIndex( frequencies.indexOf(m_curFreq) ); connect(m_freqBox, SIGNAL(activated(QString)), this, SLOT(freqChanged(QString))); - setFreqData(); + connect(m_freqBox, SIGNAL(activated(int)), SLOT(clearStatusIcons())); QLabel *freqlabel = new QLabel("Frequency:"); freqlabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); QHBoxLayout * freqLayout = new QHBoxLayout; @@ -105,8 +165,11 @@ //bitrate m_bitrBox = new QComboBox; m_bitrBox->setWhatsThis("Low bitrate means low quality and small file size."); + m_bitrBox->addItems( QStringList() << bitrates << "Other" ); + m_curBitRate = "96.00 kbits/s"; + m_bitrBox->setCurrentIndex( bitrates.indexOf(m_curBitRate) ); connect(m_bitrBox, SIGNAL(activated(QString)), this, SLOT(bitRChanged(QString))); - setBitRateData(); + connect(m_bitrBox, SIGNAL(activated(int)), SLOT(clearStatusIcons())); QLabel *bitlabel = new QLabel("Bitrate:"); bitlabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); QHBoxLayout * bitLayout = new QHBoxLayout; @@ -125,20 +188,6 @@ m_convertButton->setText("&Convert"); connect(m_convertButton, SIGNAL(clicked()), this, SLOT(convert())); - m_model = new QStandardItemModel(0,2); - m_model->setHeaderData(0, Qt::Horizontal, QObject::tr("Source")); - m_model->setHeaderData(1, Qt::Horizontal, QObject::tr("Output Name")); - - // - - m_filelistview = new QTreeView; - m_filelistview->setWhatsThis("List of files to convert.\nRight click to" - " show delete, rename, make FAT safe names options"); - m_filelistview->setAlternatingRowColors(true); - m_filelistview->setRootIsDecorated(false); - m_filelistview->setModel(m_model); - m_filelistview->setSelectionMode(QAbstractItemView::ExtendedSelection); - connect( m_filelistview, SIGNAL(pressed(QModelIndex)), this, SLOT(showMenu(QModelIndex)) ); QWidget *holder = new QWidget;; setMainWidget(holder); @@ -153,36 +202,16 @@ setButtonGuiItem( User1, KStandardGuiItem::quit() ); KHelpMenu *helpMenu = new KHelpMenu(this, KGlobal::mainComponent().aboutData(), true); setButtonMenu( Help, helpMenu->menu() ); - connect( this, SIGNAL( user1Clicked() ), SLOT( reject() ) ); + connect( this, SIGNAL( user1Clicked() ), SLOT( close() ) ); - lastDestDir = getenv("HOME"); + lastDestDir = QDir::currentPath(); lastSourceDir = lastDestDir; - changeExtension(); - - m_cancelButton = new QPushButton; - m_cancelButton->setText("&Cancel"); - + changeExtension(); createActions(); holder ->setFocus(); } -void CWindow::setFreqData() -{ - frequencies << "8000 Hz"<< "16000 Hz" << "22050 Hz" << "44100 Hz" - << "48000 Hz" << "96000 Hz" << "Other"; - - m_freqBox->addItems( frequencies ); - m_freqBox->setCurrentIndex(3); -} - -void CWindow::setBitRateData() -{ - bitrates << "64 kbits/s"<< "80 kbits/s" << "96 kbits/s" << "128 kbits/s" - << "160 kbits/s" << "192 kbits/s" << "224 kbits/s" << "Other"; - m_bitrBox->addItems( bitrates ); - m_bitrBox->setCurrentIndex(0); -} // runs ffmpeg to get list of audio encoders. We can't continue if // we can't find it. @@ -264,7 +293,7 @@ QString codec = m_codecList[codecIndex]; QString ext; - if(codec == "aac") + if(codec == "aac" || codec =="libfaac") ext="aac"; else if(codec == "ac3") ext="ac3"; @@ -278,47 +307,63 @@ ext="flac"; else if(codec == "wmav1" || codec == "wmav2") ext="wma"; - else if(codec.startsWith("pcm")) + else if (codec == "adpcm_ima_qt") + ext="mov"; + else if ( codec.startsWith("pcm") || codec.startsWith("adpcm_") ) ext="wav"; - else if(codec == "libfaac") - ext="aac"; else if(codec == "libopencore_amrnb") ext="amr"; - + else if(codec == "roq_dpcm") + ext="roq"; + + m_extension->setText(ext); fixOutputFiles(); } void CWindow::fixOutputFiles() { - QString newExt = m_extension->text(); - - for (int i=0; irowCount(); i++) - { - //QStandardItem *item = m_model->item(i, 1); - //item->setData(newExt); - QString oldName = m_model->item(i,1)->text(); - QString outf = QFileInfo(oldName).completeBaseName() + "." + newExt; - m_model->setData(m_model->index(i, 1), outf); - } + clearStatusIcons(); + + QString newExt = m_extension->text(); + + for (int i=0; irowCount(); i++) + { + QString oldName = m_model->item(i,1)->text(); + QString outf = QFileInfo(oldName).completeBaseName() + "." + newExt; + m_model->setData(m_model->index(i, 1), outf); + } + + m_filelistview->resizeColumnToContents(1); } void CWindow::setFiles(QStringList files) { + //get list of already added files + QStringList addedFiles; + for (int i=0; i < m_model->rowCount(); i++) + addedFiles << m_model->item(i,0)->text(); + QString ext = m_extension->text(); - - for (int i=0; i < files.size(); i++) - { - int r = m_model->rowCount(); - m_model->insertRow(r); - m_model->setData(m_model->index(r, 0), files[i]); - m_model->item(r, 0)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - //output name - QString outf = QFileInfo(files[i]).completeBaseName() + "." + ext; - - m_model->setData(m_model->index(r, 1), outf); - } - m_filelistview->resizeColumnToContents(0); + + for (int i=0; i < files.size(); i++) + { + //don't add if already added + if ( addedFiles.contains( files[i] ) ) + continue; + else + addedFiles << files[i]; + + int r = m_model->rowCount(); + m_model->insertRow(r); + m_model->setData(m_model->index(r, 0), files[i]); + m_model->item(r, 0)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + //output name + QString outf = QFileInfo(files[i]).completeBaseName() + "." + ext; + m_model->setData(m_model->index(r, 1), outf); + } + m_filelistview->resizeColumnToContents(0); + m_filelistview->resizeColumnToContents(1); } void CWindow::addFiles() @@ -326,15 +371,16 @@ QStringList files = KFileDialog::getOpenFileNames ( KUrl(lastSourceDir), - "*|All Files\n*.flac|FLAC\n*.ogg|OGG\n*.mp3|MP3", + "*|All Files\n*.flac|FLAC\n*.ogg|OGG\n*.mp3|MP3\n*.wav|Wave", this, "Add files to convert" ); - - if (files.size() > 0) - { - lastSourceDir = QFileInfo(files[0]).absoluteDir().absolutePath() ; - setFiles(files); + + if (files.size() > 0) + { + lastSourceDir = QFileInfo(files[0]).absoluteDir().absolutePath() ; + setFiles(files); + clearStatusIcons(); } } @@ -345,35 +391,33 @@ lastDestDir, this, "Choose destination folder" - ); + ); - if (folder.length() > 0) - lastDestDir = QFileInfo(folder).absoluteDir().absolutePath() ; - - outfolderEdit->setText(folder); + if (folder.length() > 0) + { + lastDestDir = QFileInfo(folder).absoluteDir().absolutePath() ; + outfolderEdit->setText(folder); + clearStatusIcons(); + } } void CWindow::createActions() { - removeAct = new QAction(this); - removeAct->setText("Remove"); - //removeAct->setIcon( ); + removeAct = new QAction( KIcon("list-remove"), "Remove", this ); connect(removeAct, SIGNAL(triggered()), this, SLOT(remove())); - renameAct = new QAction(this); - renameAct->setText("Rename"); - //removeAct->setIcon( ); + renameAct = new QAction( KIcon("edit-rename"), "Rename", this ); connect(renameAct, SIGNAL(triggered()), this, SLOT(rename())); toFATAct = new QAction(this); toFATAct->setText("Conform Name to FAT"); - //removeAct->setIcon( ); connect(toFATAct, SIGNAL(triggered()), this, SLOT(makeFATName())); - metaDataAct = new QAction(this); + /*metaDataAct = new QAction(this); metaDataAct->setText(""); //removeAct->setIcon( ); connect(metaDataAct, SIGNAL(triggered()), this, SLOT(editMetadata())); + */ } @@ -408,6 +452,8 @@ void CWindow::rename() { m_filelistview->edit( m_filelistview->currentIndex() ); + clearStatusIcons(); + m_filelistview->resizeColumnToContents(1); } @@ -426,6 +472,8 @@ for(int i=0; iremoveRow( indexLs[i].row() ); + + clearStatusIcons(); } // remove |\?*<":>+[]/ in filenames @@ -455,6 +503,7 @@ } m_model->setData(m_model->index(indexLs[i].row(), 1), oldName); } + clearStatusIcons(); } void CWindow::editMetadata() @@ -463,68 +512,89 @@ } -void CWindow::setMessageBox() +void CWindow::setProgressDialog() { - m_msgBox->setWindowTitle("Converting..."); - m_msgBox->addButton(m_cancelButton, QMessageBox::RejectRole); - connect( m_cancelButton, SIGNAL(clicked()), this, SLOT(cancel()) ); + m_progressDlg = new KProgressDialog; + m_progressDlg->setCaption("Converting"); + QProgressBar *progress = m_progressDlg->progressBar(); + progress->setMaximum(0); + connect( m_progressDlg, SIGNAL(cancelClicked()), this, SLOT(cancel()) ); } void CWindow::updateMessage() { if ( m_ffmpegProc->state() == QProcess::Running ) { - m_msgBox->setText("Converting " + m_model->item(m_converted,0)->text() +""); - int left = m_model->rowCount() - (m_converted+1); - m_msgBox->setInformativeText(QString::number(left) +" " + (left==1?" file":"files") +" left."); + QString curFile = QFileInfo( m_model->item(m_converted,0)->text() ).fileName(); + int left = m_model->rowCount() - (m_converted+1); + m_progressDlg->setLabelText("Converting " + curFile +"" + "
" + QString::number(left) +" " + (left==1?" file":"files") +" left."); } } + void CWindow::ffmpegDone(int exitCode, QProcess::ExitStatus exitStatus) -{ - m_converted++; - - if (exitCode != 0) +{ + if (exitCode != 0) + { + //remove 0 byte file ffmpeg may have created + QFile::remove( outfolderEdit->text()+"/"+ m_model->item(m_converted,1)->text() ); + + //show fail icon + KIcon icon("konvertible_fail"); + QStandardItem *iconItem = new QStandardItem(icon, ""); + iconItem->setFlags( Qt::ItemIsEnabled ); + m_model->setItem(m_converted, 2, iconItem); + + m_errors++; + m_errMsg += "

***" + m_model->item(m_converted,0)->text() + + "***
" + m_ffmpegProc->readAll(); + } + else + { + //show success icon + KIcon icon("konvertible_success"); + QStandardItem *iconItem = new QStandardItem(icon, ""); + iconItem->setFlags( Qt::ItemIsEnabled ); + m_model->setItem(m_converted, 2, iconItem); + } + + m_converted++; + + + //convert next file, otherwise show message to user + if ( m_converted < m_model->rowCount() ) + { + m_ffmpegProc->close(); + //delete m_ffmpegProc; + runffmpeg(); //next file + } + else //we are done + { + m_progressDlg->close(); //close it and use KDE's message boxes now + if (m_errors > 0) { - m_errors++; - m_errMsg += "\n" +m_ffmpegProc->readAll(); - } - - if ( m_converted < m_model->rowCount() ) - { - //m_ffmpegProc->close(); - //delete m_ffmpegProc; - //updateMessage(); - runffmpeg(); - } - else - { - m_msgBox->close(); //close it and use KDE's message boxes now + QString msg; + if (m_errors < m_model->rowCount()) + msg = QString::number(m_errors)+ (m_errors ==1?" file":" files") + " could not be converted."; + else + msg = "Sorry. Could not convert.\nSee details."; - if (m_errors > 0) - { - QString msg; - if (m_errors < m_model->rowCount()) - msg = QString::number(m_errors)+ (m_errors ==1?" file":"files") - +" could not be converted."; - else - msg = "Sorry. Could not convert. See details."; - - KMessageBox::detailedSorry(this, msg, m_errMsg, ""); - } - else - KMessageBox::information(this, "Converted.", "Done"); - - } + KMessageBox::detailedSorry(this, msg, m_errMsg, ""); + } + else + KMessageBox::information(this, "Converted", "Done"); + } } void CWindow::cancel() { m_ffmpegProc->disconnect(); m_ffmpegProc->kill(); - m_msgBox->hide(); + m_progressDlg->hide(); } + void CWindow::runffmpeg() { QString outfile = outfolderEdit->text()+"/"+ m_model->item(m_converted,1)->text(); @@ -542,7 +612,7 @@ << outfile; //<< "-map_meta_data" //<< outf +":"+inf; - + m_ffmpegProc = new QProcess(this); m_ffmpegProc->setProcessChannelMode(QProcess::MergedChannels); connect( m_ffmpegProc, SIGNAL(started()), this, SLOT(updateMessage()) ); @@ -578,24 +648,30 @@ return; } - m_msgBox = new QMessageBox; - setMessageBox(); + clearStatusIcons(); + setProgressDialog(); m_converted = 0; m_errors = 0; m_errMsg.clear(); runffmpeg(); - m_msgBox->show(); + m_progressDlg->show(); } +// A slot called when user makes a selection in the frequency combo box. +// It traps selection of Other so that we show an input dialog for user to +// own frequency. void CWindow::freqChanged(QString freq) { - if( freq != "Other" ) + if ( freq != "Other" ) + { + m_curFreq = freq; return; - + } + //ask user to enter own choice QSpinBox *freqEdit = new QSpinBox; freqEdit->setRange(0, 9999999); - freqEdit->setValue(44100); + freqEdit->setValue( m_curFreq.split(" ")[0].toInt() ); freqEdit->setSuffix(" Hz"); KDialog dialog; @@ -604,20 +680,34 @@ if (dialog.exec() == QDialog::Accepted) { - m_freqBox->insertItem( 0, freqEdit->text() ); - m_freqBox->setCurrentIndex( 0 ); - } + m_curFreq = freqEdit->text(); + frequencies << m_curFreq; + frequencies.removeDuplicates(); + mysort( frequencies, "Hz" ); + m_freqBox->clear(); + m_freqBox->addItems( QStringList() << frequencies << "Other" ); + m_freqBox->setCurrentIndex( frequencies.indexOf(m_curFreq) ); + } + else //do this to prevent showing of Other if user cancelled + m_freqBox->setCurrentIndex( frequencies.indexOf(m_curFreq) ); } + +// A slot called when user makes a selection in the bitrate combo box. +// It traps selection of Other so that we show an input dialog for user to +// own bitrate. void CWindow::bitRChanged(QString bitR) { if( bitR != "Other" ) + { + m_curBitRate = bitR; return; + } //ask user to enter own choice - QSpinBox *bitEdit = new QSpinBox; + QDoubleSpinBox *bitEdit = new QDoubleSpinBox; bitEdit->setRange(0, 9999999); - bitEdit->setValue(64); + bitEdit->setValue( m_curBitRate.split(" ")[0].toDouble() ); bitEdit->setSuffix(" kbits/s"); KDialog dialog; @@ -626,8 +716,62 @@ if (dialog.exec() == QDialog::Accepted) { - m_bitrBox->insertItem( 0, bitEdit->text() ); - m_bitrBox->setCurrentIndex( 0 ); + m_curBitRate = QString::number( bitEdit->value(), 'f', 2 ) + " kbits/s"; + bitrates << m_curBitRate; + bitrates.removeDuplicates(); + mydoublesort( bitrates, "kbits/s" ); + m_bitrBox->clear(); + m_bitrBox->addItems( QStringList() << bitrates << "Other" ); + m_bitrBox->setCurrentIndex( bitrates.indexOf(m_curBitRate) ); + } + else //do this to prevent showing of Other if user cancelled + m_bitrBox->setCurrentIndex( bitrates.indexOf(m_curBitRate) ); + + clearStatusIcons(); +} + +// remove fail/success icons when user changes something +void CWindow::clearStatusIcons() +{ + for (int i=0; i rowCount(); i++) + { + QStandardItem *iconItem = new QStandardItem( QIcon(), "" ); + iconItem->setFlags( Qt::ItemIsEnabled ); + m_model->setItem( i, 2, iconItem ); } } +void CWindow::closeEvent( QCloseEvent * event ) +{ + writeSettings(); + event->accept(); +} + +void CWindow::readSettings() +{ + frequencies << "8000 Hz"<< "16000 Hz" << "22050 Hz" << "44100 Hz" + << "48000 Hz" << "96000 Hz"; + + bitrates << "12.20 kbits/s"<<"64.00 kbits/s"<< "80.00 kbits/s" << "96.00 kbits/s" << "128.00 kbits/s" + << "160.00 kbits/s" << "192.00 kbits/s" << "224.00 kbits/s"; + + KSharedConfigPtr config = KSharedConfig::openConfig(); + KConfigGroup generalGroup(config, "General" ); + + frequencies = generalGroup.readEntry( "Frequencies", frequencies); + bitrates = generalGroup.readEntry( "Bitrates", bitrates); + + resize( generalGroup.readEntry( "Size", QSize(780,377) ) ); +} + +void CWindow::writeSettings() +{ + KSharedConfigPtr config = KSharedConfig::openConfig(); + KConfigGroup generalGroup(config, "General" ); + + generalGroup.writeEntry( "Frequencies", frequencies); + generalGroup.writeEntry( "Bitrates", bitrates); + generalGroup.writeEntry( "Size", size() ); + + generalGroup.config()->sync(); +} diff -Nru konvertible-0.1.3~karmic~ppa1/window.h konvertible-0.1.4~karmic~ppa1/window.h --- konvertible-0.1.3~karmic~ppa1/window.h 2009-12-23 19:58:39.000000000 +0000 +++ konvertible-0.1.4~karmic~ppa1/window.h 2010-01-06 09:22:20.000000000 +0000 @@ -21,15 +21,13 @@ #ifndef WINDOW_H #define WINDOW_H -#include +#include #include #include #include class QPushButton; -class QListView; class QStandardItemModel; -class QSortFilterProxyModel; class QTreeView; class QLineEdit; class QToolButton; @@ -37,6 +35,7 @@ class QSpinBox; class QMessageBox; class KPushButton; +class KProgressDialog; class CWindow : public KDialog { @@ -62,29 +61,25 @@ void editMetadata(); void freqChanged(QString); void bitRChanged(QString); + void clearStatusIcons(); // remove fail/success icons private: + void closeEvent( QCloseEvent * event ); + void readSettings(); + void writeSettings(); void findCodecs(); - void setFreqData(); - void setBitRateData(); void createActions(); - void setMessageBox(); + void setProgressDialog(); void runffmpeg(); QPushButton *m_convertButton; - QPushButton *m_closeButton; - QPushButton *m_cancelButton; + QPushButton *addFileBtn; QTreeView *m_filelistview; QStandardItemModel *m_model; - QSortFilterProxyModel *m_proxymodel; - - QPushButton *addFileBtn; - //KPushButton *helpBtn; - KPushButton *quitBtn; QLineEdit *outfolderEdit; - QPushButton *openfolderBtn; + KPushButton *openfolderBtn; QComboBox *m_codecBox; QLineEdit *m_extension; @@ -95,7 +90,7 @@ QString lastDestDir, lastSourceDir; QProcess *m_ffmpegProc; - QMessageBox *m_msgBox; + KProgressDialog *m_progressDlg; int m_converted; int m_errors; QString m_errMsg; @@ -109,8 +104,9 @@ QStringList frequencies; QStringList bitrates; + QString m_curBitRate; + QString m_curFreq; }; - #endif