?? krecord.cpp
字號:
#include <stdio.h>#include <stdlib.h> #include <unistd.h> #include <fcntl.h>#include <sys/ioctl.h>#include <iostream>#include <qlabel.h>#include <qfiledialog.h>#include <qdragobject.h>#include <qtooltip.h>#include <qlayout.h>#include <qbuttongroup.h>#include <qhbuttongroup.h>#include <qradiobutton.h>#include <qaccel.h>#include <qmenubar.h>#include <qpopupmenu.h>#include <kapp.h>#include <kuniqueapp.h>#include <kmessagebox.h>#include <kmenubar.h>#include <kstatusbar.h>#include <kmainwindow.h>#include <kiconloader.h>#include <klocale.h>#include <kprocess.h>#include <kaboutdata.h>#include <kcmdlineargs.h>#include <khelpmenu.h>#include <kmenubar.h>#include <kpopupmenu.h>#include "sound.h"#include "fft.h"#include "level.h"#include "buffer.h"#include "krecord.moc"#include <X11/Xlib.h>#include <X11/Xatom.h>#include <X11/Xmu/WinUtil.h> /* for XmuClientWindow() */#define STAT_LATENCY 1#define STAT_RATE 2#define STAT_CHANNELS 3#define STAT_FORMAT 4#define STAT_MISC 5KApplication *globalKapp;KIconLoader *globalKIL;KLocale *globalKlocale;const char *device = NULL;/* ------------------------------------------------------------------------ */int main(int argc, char **argv){ static KCmdLineOptions options[] = { { "d", 0, 0 }, { "device <dev>", "dsp sound device", "/dev/dsp" }, { "+[files]", "optional wav files", 0 }, KCmdLineLastOption }; KCmdLineArgs *args; KRecord *krecord; int i; KAboutData aboutData("krecord", "KRecord", KRECORD_VERSION, "KDE sound recorder", KAboutData::License_GPL, "(c) 1997-2003 Gerd Knorr <kraxel@bytesex.org>\n", 0, "http://bytesex.org/krecord.html"); aboutData.addAuthor("Gerd Knorr","Maintainer & Developer", "kraxel@bytesex.org", "http://bytesex.org"); aboutData.addCredit("Thomas Strehl", "KDE2 port", "tstrehl@suse.de"); KCmdLineArgs::init(argc, argv, &aboutData); KCmdLineArgs::addCmdLineOptions(options); globalKapp = new KApplication("krecord"); globalKIL = KGlobal::iconLoader(); globalKlocale = KGlobal::locale(); args = KCmdLineArgs::parsedArgs(); if (args->isSet("device")) device = args->getOption("device"); krecord = new KRecord(); for (i = 0; i < args->count(); i++) { fprintf(stderr,"file: %s\n",args->arg(i)); krecord->blist->add_filebuffer(args->arg(i)); } args->clear(); return globalKapp->exec();}/* ------------------------------------------------------------------------ */KRecord::KRecord() : KMainWindow(0,"main"){ int i = -1; soundcard = new Soundcard(device); soundopts = new SoundOptions(soundcard,"soundopts"); kfft = new KFFT(soundcard); klevel = new KLevel(soundcard); listwidget = new QListBox(this,"bufferlist"); blist = new BufferList(listwidget,soundcard); fdialog = new QFileDialog(NULL,"*.wav",NULL,"fdialog",TRUE); accel = new QAccel(this); globalKapp->setMainWidget(this); setCentralWidget(listwidget); setAcceptDrops(TRUE); create_menu(); create_toolbar(); create_soundbar(); create_statusline(); soundopts->set_soundparam(44100,2,FMT_16BIT,0); accel->connectItem(accel->insertItem(Key_Enter), blist,SLOT(play())); accel->connectItem(accel->insertItem(Key_Return), blist,SLOT(play())); accel->connectItem(accel->insertItem(Key_Escape), blist,SLOT(stop())); accel->connectItem(accel->insertItem(Key_Delete), blist,SLOT(del_buf())); accel->connectItem(accel->insertItem(Key_R), blist,SLOT(record())); accel->connectItem(accel->insertItem(Key_N), blist,SLOT(next_buffer())); accel->connectItem(accel->insertItem(Key_Space), blist,SLOT(next_buffer())); connect(soundcard,SIGNAL(newparams(struct SOUNDPARAMS*)), this, SLOT(update_statusline(struct SOUNDPARAMS*))); connect(blist,SIGNAL(status(const char*)), this, SLOT(update_statusline(const char*))); connect(soundopts,SIGNAL(set_level(int)), blist, SLOT(set_level(int))); /* session management */ if (globalKapp->isRestored()) { for (i = 1; canBeRestored(i); i++) if (0 == strcmp(classNameOfToplevel(i),"KRecord")) break; if (!canBeRestored(i)) i = -1; } if (i > 0) { restore(i); } else { resize(400,250); show(); } blist->monitor();}KRecord::~KRecord(){ delete opt_menu; delete file_menu; delete toolbar; delete soundbar; delete statusline; delete blist; delete listwidget; delete fdialog; delete kfft; delete soundopts; delete soundcard;}voidKRecord::create_menu(){ file_menu = new QPopupMenu; file_menu->insertItem( i18n("&New memory buffer"), blist, SLOT(new_ram())); file_menu->insertItem( i18n("New &file buffer..."), this, SLOT(new_file())); file_menu->insertItem( i18n("&Save buffer as..."), this, SLOT(save_as())); file_menu->insertSeparator(); file_menu->insertItem( i18n("&Delete buffer"), blist, SLOT(del_buf())); file_menu->insertSeparator(); file_menu->insertItem( i18n("&Quit"), this, SLOT(quit_cb()), CTRL+Key_Q); opt_menu = new QPopupMenu; opt_menu->insertItem( i18n("&Sound Options..."), this, SLOT(record_options())); opt_menu->insertItem( i18n("&Freq Spectrum..."), kfft, SLOT(showit())); opt_menu->insertItem( i18n("&Input Level..."), klevel, SLOT(showit())); opt_menu->insertItem( i18n("Run &Mixer"), this, SLOT(exec_mixer())); opt_menu->insertSeparator(); tb_mid = opt_menu->insertItem( i18n("Hide &Toolbar"), this,SLOT(tb_toggle())); sl_mid = opt_menu->insertItem( i18n("Hide Status&line"), this,SLOT(sl_toggle())); KPopupMenu *help = helpMenu(); menuBar()->insertItem( i18n("&File"), file_menu); menuBar()->insertItem( i18n("&Options"), opt_menu); menuBar()->insertItem( i18n("&Help"), help);}voidKRecord::create_toolbar(){ toolbar = new KToolBar(this,"Toolbar"); KIconLoader *loader = KGlobal::iconLoader(); QPixmap pixmap; pixmap = loader->loadIcon("filenew",KIcon::Toolbar); toolbar->insertButton (pixmap, 0, SIGNAL(clicked()), blist, SLOT(new_ram()), TRUE, i18n("New memory buffer")); pixmap = loader->loadIcon("filesave",KIcon::Toolbar); toolbar->insertButton (pixmap, 0, SIGNAL(clicked()), this, SLOT(save_as()), TRUE, i18n("Save buffer")); toolbar->insertSeparator(); pixmap = loader->loadIcon("freq",KIcon::Toolbar); toolbar->insertButton (pixmap, 0, SIGNAL(clicked()), kfft, SLOT(showit()), TRUE, i18n("Freq Spectrum")); pixmap = loader->loadIcon("level",KIcon::Toolbar); toolbar->insertButton (pixmap, 0, SIGNAL(clicked()), klevel, SLOT(showit()), TRUE, i18n("Input Level")); toolbar->insertSeparator();#if 0 pixmap = loader->loadIcon("help",KIcon::Toolbar,10); toolbar->insertButton (pixmap, 0, SIGNAL(clicked()), this, SLOT(help_cb()), TRUE, i18n("Help"));#endif toolbar->insertSeparator(); pixmap = loader->loadIcon("exit",KIcon::Toolbar); toolbar->insertButton (pixmap, 0, SIGNAL(clicked()), this, SLOT(quit_cb()), TRUE, i18n("Quit")); toolbar->setBarPos(KToolBar::Top); addToolBar(toolbar);}voidKRecord::create_soundbar(){ soundbar = new KToolBar(this,"Soundbar"); KIconLoader *loader = KGlobal::iconLoader(); QPixmap pixmap; pixmap = loader->loadIcon("forward",KIcon::Toolbar,10); soundbar->insertButton (pixmap, 0, SIGNAL(clicked()), blist, SLOT(next_buffer()), TRUE, i18n("Switch to new buffer")); pixmap = loader->loadIcon("mrecord",KIcon::Toolbar); soundbar->insertButton (pixmap, 0, SIGNAL(clicked()), blist, SLOT(record()), TRUE, i18n("Start Record")); pixmap = loader->loadIcon("player_stop",KIcon::Toolbar); soundbar->insertButton (pixmap, 0, SIGNAL(clicked()), blist, SLOT(stop()), TRUE, i18n("Stop Record/Playback")); pixmap = loader->loadIcon("1rightarrow",KIcon::Toolbar); soundbar->insertButton (pixmap, 0, SIGNAL(clicked()), blist, SLOT(play()), TRUE, i18n("Start Playback")); pixmap = loader->loadIcon("2leftarrow",KIcon::Toolbar); soundbar->insertButton (pixmap, 0, SIGNAL(clicked()), blist, SLOT(backward()), TRUE, i18n("Back")); pixmap = loader->loadIcon("2rightarrow",KIcon::Toolbar); soundbar->insertButton (pixmap, 0, SIGNAL(clicked()), blist, SLOT(forward()), TRUE, i18n("Forward")); soundbar->insertSeparator(); pixmap = loader->loadIcon("line_monitor",KIcon::Toolbar); soundbar->insertButton (pixmap, 0, SIGNAL(clicked()), blist, SLOT(monitor()), TRUE, i18n("Turn on/off monitor")); soundbar->setBarPos(KToolBar::Top); addToolBar(soundbar);}voidKRecord::create_statusline(){ statusline = new KStatusBar(this); statusline->insertItem("-", STAT_MISC, 1); statusline->setItemAlignment (STAT_MISC, AlignLeft); statusline->insertFixedItem("9999999", STAT_RATE); statusline->insertFixedItem("xxxxxxx", STAT_CHANNELS); statusline->insertFixedItem("xxxxxxxxxx", STAT_FORMAT); statusline->insertFixedItem("999 ms", STAT_LATENCY);}voidKRecord::update_statusline(struct SOUNDPARAMS *p){
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -