You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/krec/krecfile.h

204 lines
5.3 KiB

/***************************************************************************
copyright : (C) 2003 by Arnold Krille
email : arnold@arnoldarts.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; version 2 of the License. *
* *
***************************************************************************/
#ifndef KRECFILE_H
#define KRECFILE_H
#include <tqobject.h>
#include <tqstring.h>
#include <tqvaluelist.h>
#include <arts/common.h>
class KRecBuffer;
class KTempDir;
class KSimpleConfig;
class TQFile;
class KRecFileViewWidget;
class KRecFile : virtual public TQObject {
Q_OBJECT
friend class KRecFileWidget;
public:
KRecFile( TQObject*, const char* =0 );
KRecFile( const TQString &, TQObject*, const char* =0 );
~KRecFile();
TQString filename();
void filename( const TQString &);
bool saved() const { return _saved; }
int samplerate() const { return _samplerate; }
int channels() const { return _channels; }
int bits() const { return _bits; }
TQIODevice::Offset offsetSize() const { return samplesToOffset( _size ); }
TQIODevice::Offset offsetPosition() const { return samplesToOffset( _pos ); }
int size() const { return _size; }
int position() const { return _pos; }
/// Calculates an offset into a frames-value depending on the files settings (channels and bits)
int offsetToSamples( TQIODevice::Offset ) const;
TQIODevice::Offset samplesToOffset( int ) const;
public slots:
/// Creates a new empty buffer and marks it for recording.
void newBuffer();
/// Deletes the buffer from the file.
void deleteBuffer( KRecBuffer* =0 );
void writeData( Arts::mcopbyte* data, uint length );
void writeData( TQByteArray* );
void writeData( TQByteArray& );
void save( const TQString & );
void exportwave( const TQString & );
/// Fills a TQByteArray with values from the specified Offset.
TQByteArray* getData( int );
void getData( TQByteArray& );
void newPos( int );
private slots:
void newPos( KRecBuffer*, TQIODevice::Offset );
void newSize( KRecBuffer*, TQIODevice::Offset );
signals:
/// Position signals
void posChanged( int );
void sizeChanged( int );
/// The end of the file is reached, you should stop reading.
void endReached();
/// GUI-Signals
void sNewBuffer( KRecBuffer* );
void sDeleteBuffer( KRecBuffer* );
void filenameChanged( const TQString & );
private:
void saveProps();
void loadProps();
/**
Creates a new buffer for a given file
@param filename Name of the file
*/
void newBuffer( const TQString &filename );
/**
Adds buffer to the buffers.
@param buffer The to be added buffer
*/
void newBuffer( KRecBuffer* buffer );
/// Get the top-most-buffer at the specified position.
int getTopBuffer_int( int );
KRecBuffer* getTopBuffer_buffer( int );
bool _saved;
TQString _filename;
int _samplerate, _channels, _bits;
int _currentBuffer;
TQValueList<KRecBuffer*> _buffers;
KTempDir *_dir;
KSimpleConfig *_config;
int _pos, _size;
void init();
};
class TQFile;
class TQDir;
class TQFileInfo;
class KConfig;
class TQDataStream;
class KRecBuffer : virtual public TQObject {
Q_OBJECT
public:
KRecBuffer( const TQString &, int, bool, KRecFile*, const char* =0 );
~KRecBuffer();
// After how many samples in the File this Buffer starts...
int startpos() const;
TQIODevice::Offset size() const;
int sizeInSamples() const { return _krecfile->offsetToSamples( size() ); }
/**
Writes out its Config
It doesn't set the group.
@param config the KConfig where the data gets written
*/
void writeConfig( KConfig* config );
/**
restores a KRecBuffer from Config
The group has to be set the right way.
@param config The configuration thats read
@param dir The directory where the file is saved
*/
static KRecBuffer* fromConfig( KConfig* config, TQDir* dir, KRecFile* p, const char* n=0 );
TQString filename() const;
bool active() const;
TQString title() const;
TQString comment() const;
public slots:
/// writes the data into the buffer
void writeData( Arts::mcopbyte* data, uint length );
void writeData( TQByteArray* );
void writeData( TQByteArray& );
/// gets the data from the stream
void getData( TQByteArray& );
void setPos( TQIODevice::Offset );
void setActive( bool );
void deleteBuffer();
void setTitle( const TQString & );
void setComment( const TQString & );
/// Returns the sample at the specified position and channel.
float getSample( int pos, int channel );
float* getsamples( int start, int end, int channel );
signals:
void posChanged( KRecBuffer*, TQIODevice::Offset );
void sizeChanged( KRecBuffer*, TQIODevice::Offset );
void activeChanged( bool );
/// Is emitted when something has changed.
void somethingChanged();
void deleteSelf( KRecBuffer* );
private:
KRecFile* _krecfile;
TQFile* _file;
TQDataStream* _stream;
TQFileInfo* _fileinfo;
bool _open, _active;
TQIODevice::Offset _pos;
int _start;
TQString _title, _comment;
};
#endif
// vim:sw=4:ts=4