• Main Page
  • Classes
  • Files
  • File List
  • File Members

soundfile.hpp

Go to the documentation of this file.
00001 #ifndef SOUNDFILE_HPP
00002 #define SOUNDFILE_HPP
00003 
00007 #include <QString>
00008 #include <QFile>
00009 #include <vector>
00010 #include <sndfile.hh>
00011 #include "types.hpp"
00012 #include "mad.h"
00013 
00015 
00016 class SoundfileData
00017 {
00018     public:
00019         virtual ~SoundfileData() {};
00021         virtual QString error() const = 0;
00023         virtual real_vec read_channel(int channel) = 0;
00025         virtual size_t frames() const = 0;
00027         virtual double length() const = 0;
00029         virtual int samplerate() const = 0;
00031         virtual int channels() const = 0;
00033         virtual bool valid() const = 0;
00034 };
00035 
00037 
00038 class SndfileData : public SoundfileData
00039 {
00040     public:
00041         SndfileData(const QString& fname);
00042         ~SndfileData();
00043         QString error() const;
00044         real_vec read_channel(int channel);
00045         size_t frames() const;
00046         double length() const; //in seconds
00047         int samplerate() const;
00048         int channels() const;
00049         bool valid() const;
00050     private:
00051         SndfileHandle file_;
00052 };
00053 
00055 
00056 class MP3Data : public SoundfileData
00057 {
00058     public:
00059         MP3Data(const QString& fname);
00060         QString error() const;
00061         real_vec read_channel(int channel);
00062         size_t frames() const;
00063         double length() const;//in seconds
00064         int samplerate() const;
00065         int channels() const;
00066         bool valid() const;
00067     private:
00068         void get_mp3_stats();
00069         size_t frames_;
00070         size_t length_;
00071         int samplerate_;
00072         int channels_;
00073         QString filename_;
00074         QString error_;
00075 };
00076 
00078 
00079 class Soundfile
00080 {
00081     public:
00083 
00085         static QString writeSound(const QString& fname, const real_vec& data,
00086                 int samplerate, int format=-1);
00087         static int guessFormat(const QString& filename);
00088 
00089         Soundfile();
00090         Soundfile(const QString& fname);
00092         void reset();
00094         void load(const QString& fname);
00096         const QString& error() const;
00098         bool valid() const;
00100 
00101         real_vec read_channel(int channel);
00103         const SoundfileData& data() const;
00104     private:
00105         SoundfileData* data_;
00106         QString error_;
00107 };
00108 
00109 #endif

Generated by  doxygen 1.7.1