File indexing completed on 2024-06-16 07:42:27

0001 /*
0002     SPDX-FileCopyrightText: 1998-2007 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 
0007 #ifndef K3BWAVEFILEWRITER_H
0008 #define K3BWAVEFILEWRITER_H
0009 
0010 #include "k3b_export.h"
0011 
0012 #include <QDataStream>
0013 #include <QFile>
0014 #include <QString>
0015 
0016 namespace K3b {
0017     /**
0018      * @author Sebastian Trueg
0019      * Creates wave files from 16bit stereo little or big endian
0020      * sound samples
0021      */
0022     class LIBK3B_EXPORT WaveFileWriter
0023     {
0024     public:
0025 
0026         enum Endianess { BigEndian, LittleEndian };
0027 
0028         WaveFileWriter();
0029         ~WaveFileWriter();
0030 
0031         /**
0032          * open a new wave file.
0033          * closes any opened file.
0034          */
0035         bool open( const QString& filename );
0036 
0037         bool isOpen();
0038         const QString& filename() const;
0039 
0040         /**
0041          * closes the file.
0042          * Length of the wave file will be written into the header.
0043          * If no data has been written to the file except the header
0044          * it will be removed.
0045          */
0046         void close();
0047 
0048         /**
0049          * write 16bit samples to the file.
0050          * @param e the endianess of the data
0051          *          (it will be swapped to little endian byte order if necessary)
0052          */
0053         void write( const char* data, int len, Endianess e = BigEndian );
0054 
0055         /**
0056          * returns a filedescriptor with the already opened file
0057          * or -1 if isOpen() is false
0058          */
0059         int fd() const;
0060 
0061     private:
0062         void writeEmptyHeader();
0063         void updateHeader();
0064         void padTo2352();
0065 
0066         QFile m_outputFile;
0067         QDataStream m_outputStream;
0068         QString m_filename;
0069     };
0070 }
0071 
0072 #endif