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

📄 confrecorder.cpp

📁 改写的qtopia录音放音程序
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "confrecorder.h"#include "mediarecorder.h"#include "pluginlist.h"#include <qcombobox.h>#include <qradiobutton.h>#include <qbuttongroup.h>#include <qtopia/config.h>#include <qtopia/qpeapplication.h>// Default quality settings, if not yet set in the configuration.static QualitySetting DefaultQualities[] = {    {11025, 1, "audio/x-wav", "pcm"},    {22050, 2, "audio/x-wav", "pcm"},    {44100, 2, "audio/x-wav", "pcm"},    {11025, 1, "audio/x-wav", "gsm"},};// Section names within the configuration file.static const char * const ConfigSections[MaxQualities] = {    "VoiceQuality", "MusicQuality", "CDQuality", "CustomQuality"};ConfigureRecorder::ConfigureRecorder( QualitySetting *_qualities, MediaRecorderPluginList *_plugins, QWidget *parent, const char *name, WFlags f )    : ConfigureRecorderBase( parent, name, TRUE, f ){    qualities = _qualities;    plugins = _plugins;    // Load the default quality settings.    int qual;    for ( qual = 0; qual < MaxQualities; ++qual ) {	qualities[qual].frequency = DefaultQualities[qual].frequency;	qualities[qual].channels = DefaultQualities[qual].channels;	qualities[qual].mimeType = DefaultQualities[qual].mimeType;	qualities[qual].formatTag = DefaultQualities[qual].formatTag;    }    quality = VoiceQuality;    // Load configuration overrides.    loadConfig();    // Populate the list of sample rates.    sampleRate->insertItem( tr("8 kHz") );    sampleRate->insertItem( tr("11 kHz") );    sampleRate->insertItem( tr("22 kHz") );    sampleRate->insertItem( tr("44 kHz") );    // Populate the list of formats.    uint numPlugins;    uint plugin;    MediaRecorderEncoder *encoder;    QString formatName;    numPlugins = plugins->count();    for ( plugin = 0; plugin < numPlugins; ++plugin ) {	encoder = plugins->at( plugin );	formatName = plugins->formatNameAt( plugin );	format->insertItem( formatName );    }    // Hook up interesting signals.    connect( qualityGroup, SIGNAL( clicked(int) ),	     this, SLOT( setQuality(int) ) );    connect( channelsGroup, SIGNAL( clicked(int) ),	     this, SLOT( setChannels(int) ) );    connect( sampleRate, SIGNAL( activated(int) ),	     this, SLOT( setSampleRate(int) ) );    connect( format, SIGNAL( activated(int) ),	     this, SLOT( setFormat(int) ) );}ConfigureRecorder::~ConfigureRecorder(){}static void copyQualities( QualitySetting *dest, QualitySetting *src, int num ){    while ( num > 0 ) {	dest->frequency = src->frequency;	dest->channels = src->channels;	dest->mimeType = src->mimeType;	dest->formatTag = src->formatTag;	++dest;	++src;	--num;    }}void ConfigureRecorder::processPopup(){    QualitySetting savedQualities[MaxQualities];    int savedQuality;    // Save the current quality settings, in case we have to cancel.    copyQualities( savedQualities, qualities, MaxQualities );    savedQuality = quality;    // Update the configuration dialog's display with the current state.    setQuality( quality );    // Process the dialog.    if ( QPEApplication::execDialog( this ) != QDialog::Accepted) {	// Copy the saved configuration back.	copyQualities( qualities, savedQualities, MaxQualities );	quality = savedQuality;    }}void ConfigureRecorder::setQuality( int index ){    // Set the quality value.    quality = index;    switch ( quality ) {	case VoiceQuality:	    voiceQuality->setChecked( TRUE );	    break;	case MusicQuality:	    musicQuality->setChecked( TRUE );	    break;	case CDQuality:	    cdQuality->setChecked( TRUE );	    break;	case CustomQuality:	    customQuality->setChecked( TRUE );	    break;    }    // Set the number of channels.    if ( qualities[quality].channels == 1) {	monoChannels->setChecked( TRUE );    } else {	stereoChannels->setChecked( TRUE );    }    // Set the sample rate frequency.    switch ( qualities[quality].frequency ) {	case 8000:	    sampleRate->setCurrentItem( 0 );	    break;	case 11025:	    sampleRate->setCurrentItem( 1 );	    break;	case 22050:	    sampleRate->setCurrentItem( 2 );	    break;	case 44100:	    sampleRate->setCurrentItem( 3 );	    break;    }    // Set the format.    int formatIndex = plugins->indexFromType	    ( qualities[quality].mimeType, qualities[quality].formatTag );    if( formatIndex >= 0 ) {	format->setCurrentItem( formatIndex );    }}void ConfigureRecorder::setChannels( int index ){    updateConfig( index + 1, qualities[quality].frequency,		  qualities[quality].mimeType, qualities[quality].formatTag );}void ConfigureRecorder::setSampleRate( int index ){    int frequency;    switch ( index ) {	case 0:	    frequency = 8000; break;	case 1:	    frequency = 11025; break;	case 2:	    frequency = 22050; break;	default:    frequency = 44100; break;    }    updateConfig( qualities[quality].channels, frequency,		  qualities[quality].mimeType, qualities[quality].formatTag );}void ConfigureRecorder::setFormat( int index ){    updateConfig( qualities[quality].channels,		  qualities[quality].frequency,		  plugins->at( (uint)index )->pluginMimeType(),		  plugins->formatAt( (uint)index ) );}void ConfigureRecorder::resetQuality(){    updateConfig( DefaultQualities[quality].channels,		  DefaultQualities[quality].frequency,		  DefaultQualities[quality].mimeType,		  DefaultQualities[quality].formatTag );    setQuality( quality );}void ConfigureRecorder::updateConfig( int channels, int frequency, const QString& mimeType, const QString& formatTag ){    if ( channels != qualities[quality].channels ) {	qualities[quality].channels = channels;    }    if ( frequency != qualities[quality].frequency ) {	qualities[quality].frequency = frequency;    }    if ( mimeType != qualities[quality].mimeType ) {	qualities[quality].mimeType = mimeType;    }    if ( formatTag != qualities[quality].formatTag ) {	qualities[quality].formatTag = formatTag;    }}void ConfigureRecorder::loadConfig(){    int qual, value;    QString qvalue;    QString svalue;    QString fvalue;    int index;    Config cfg( "MediaRecorder" );    cfg.setGroup( "Options" );    qvalue = cfg.readEntry( "Quality" );    for ( qual = 0; qual < MaxQualities; ++qual ) {	if ( qvalue == ConfigSections[qual] ) {	    quality = qual;	}	cfg.setGroup( ConfigSections[qual] );	value = cfg.readNumEntry( "Channels" );	if ( value == 1 || value == 2 ) {	    qualities[qual].channels = value;	}	value = cfg.readNumEntry( "Frequency" );	if ( value == 8000 || value == 11025 ||	     value == 22050 || value == 44100 ) {	    qualities[qual].frequency = value;	}	svalue = cfg.readEntry( "Type" );	fvalue = cfg.readEntry( "Format" );	if ( svalue == QString::null ) {	    svalue = qualities[qual].mimeType;	}	if ( fvalue == QString::null ) {	    fvalue = qualities[qual].formatTag;	}	index = plugins->indexFromType( svalue, fvalue );	if( index >= 0 ) {	    qualities[qual].mimeType = plugins->at( index )->pluginMimeType();	    qualities[qual].formatTag = plugins->formatAt( index );	} else {	    qualities[qual].mimeType = svalue;	    qualities[qual].formatTag = fvalue;	}    }}void ConfigureRecorder::saveConfig(){    int qual;    // Write out only what is different from the defaults, which    // makes it easier to migrate to new versions of the app    // that change the defaults to something better.    Config cfg( "MediaRecorder" );    cfg.setGroup( "Options" );    if ( quality != VoiceQuality ) {	cfg.writeEntry( "Quality", ConfigSections[quality] );    } else {	cfg.removeEntry( "Quality" );    }    for ( qual = 0; qual < MaxQualities; ++qual ) {	cfg.setGroup( ConfigSections[qual] );	cfg.clearGroup();	if ( qualities[qual].channels != DefaultQualities[qual].channels ) {	    cfg.writeEntry( "Channels", qualities[qual].channels );	}	if ( qualities[qual].frequency != DefaultQualities[qual].frequency ) {	    cfg.writeEntry( "Frequency", qualities[qual].frequency );	}	if ( qualities[qual].mimeType != DefaultQualities[qual].mimeType ) {	    cfg.writeEntry( "Type", qualities[qual].mimeType );	}	if ( qualities[qual].formatTag != DefaultQualities[qual].formatTag ) {	    cfg.writeEntry( "Format", qualities[qual].formatTag );	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -