⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 krecord.cpp

📁 一个KDE下的录音程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -