Audacity  3.0.3
ODDecodeFlacTask.h
Go to the documentation of this file.
1 /**********************************************************************
2 
3  Audacity: A Digital Audio Editor
4 
5  ODDecodeFlacTask.h
6 
7  Created by Michael Chinen (mchinen) on 8/11/08.
8  Audacity(R) is copyright (c) 1999-2008 Audacity Team.
9  License: GPL v2. See License.txt.
10 
11 ******************************************************************//*******************************************************************/
24 
25 
26 
27 
28 #ifndef __AUDACITY_ODDecodeFLACTask__
29 #define __AUDACITY_ODDecodeFLACTask__
30 
31 #include <vector>
32 #include <wx/ffile.h> // data member
33 #include "ODDecodeTask.h"
34 
35 #include "FLAC++/decoder.h"
36 
37 class wxArrayString;
38 class ODDecodeBlockFile;
39 class WaveTrack;
40 class ODFileDecoder;
41 
42 class ODFlacDecoder;
43 class ODFLACFile;
44 
46 class ODDecodeFlacTask final : public ODDecodeTask
47 {
48  public:
49 
52  virtual ~ODDecodeFlacTask();
53 
54 
55  std::unique_ptr<ODTask> Clone() const override;
57  ODFileDecoder* CreateFileDecoder(const wxString & fileName) override;
58 
61  unsigned int GetODType() override { return eODFLAC; }
62 };
63 
64 
65 class ODFLACFile final : public FLAC::Decoder::File
66 {
67  public:
68  ODFLACFile(ODFlacDecoder *decoder) : mDecoder(decoder)
69  {
70  mWasError = false;
71  set_metadata_ignore_all();
72  set_metadata_respond(FLAC__METADATA_TYPE_VORBIS_COMMENT);
73  set_metadata_respond(FLAC__METADATA_TYPE_STREAMINFO);
74  }
75 
76  bool get_was_error() const
77  {
78  return mWasError;
79  }
80  private:
81  friend class ODFlacDecoder;
83  bool mWasError;
84  wxArrayString mComments;
85 
86  protected:
87  FLAC__StreamDecoderWriteStatus write_callback(const FLAC__Frame *frame,
88  const FLAC__int32 * const buffer[]) override;
89  void metadata_callback(const FLAC__StreamMetadata *metadata) override;
90  void error_callback(FLAC__StreamDecoderErrorStatus status) override;
91 };
92 
93 #include "../blockfile/ODDecodeBlockFile.h" // to inherit
94 
96 class ODFlacDecoder final : public ODFileDecoder
97 {
98  friend class ODFLACFile;
99 public:
101  ODFlacDecoder(const wxString & fileName):ODFileDecoder(fileName),mSamplesDone(0){mFile=NULL;}
102  virtual ~ODFlacDecoder();
103 
111  int Decode(SampleBuffer & data, sampleFormat & format, sampleCount start, size_t len, unsigned int channel) override;
112 
113 
116  bool ReadHeader() override;
117 
120 
121 private:
122  friend class FLACImportFileHandle;
124  std::unique_ptr<ODFLACFile> mFile;
125  ODLock mFlacFileLock;//for mFile;
126  wxFFile mHandle;
127  unsigned long mSampleRate;
128  unsigned long mNumChannels;
129  unsigned long mBitsPerSample;
130  FLAC__uint64 mNumSamples;
131  FLAC__uint64 mSamplesDone;
136  unsigned int mTargetChannel;
138  unsigned int mDecodeBufferLen;
140 };
141 
142 #endif
143 
144 
145 
WaveTrack
A Track that contains audio waveform data.
Definition: WaveTrack.h:69
ODDecodeFlacTask::ODDecodeFlacTask
ODDecodeFlacTask()
Constructs an ODTask.
Definition: ODDecodeFlacTask.h:51
ODFlacDecoder::mDecodeBufferWritePosition
unsigned int mDecodeBufferWritePosition
Definition: ODDecodeFlacTask.h:137
ODFlacDecoder::GetFlacFile
ODFLACFile * GetFlacFile()
FLAC specific file (inherited from FLAC::Decoder::File)
Definition: ODDecodeFlacTask.cpp:265
FLACImportFileHandle
An ImportFileHandle for FLAC data.
Definition: ImportFLAC.cpp:138
ODFLACFile::ODFLACFile
ODFLACFile(ODFlacDecoder *decoder)
Definition: ODDecodeFlacTask.h:68
ODFLACFile::write_callback
FLAC__StreamDecoderWriteStatus write_callback(const FLAC__Frame *frame, const FLAC__int32 *const buffer[]) override
Definition: ODDecodeFlacTask.cpp:114
ODFlacDecoder::mFlacFileLock
ODLock mFlacFileLock
Definition: ODDecodeFlacTask.h:125
ODDecodeBlockFile
An AliasBlockFile that references uncompressed data in an existing file.
Definition: ODDecodeBlockFile.h:37
ODDecodeFlacTask
A class representing a modular task to be used with the On-Demand structures.
Definition: ODDecodeFlacTask.h:47
ODFLACFile::mWasError
bool mWasError
Definition: ODDecodeFlacTask.h:83
ODDecodeFlacTask::~ODDecodeFlacTask
virtual ~ODDecodeFlacTask()
Definition: ODDecodeFlacTask.cpp:30
ODFlacDecoder::mFormat
sampleFormat mFormat
Definition: ODDecodeFlacTask.h:123
ODFLACFile
Definition: ODDecodeFlacTask.h:66
ODFlacDecoder::mNumChannels
unsigned long mNumChannels
Definition: ODDecodeFlacTask.h:128
ODFlacDecoder::mSampleRate
unsigned long mSampleRate
Definition: ODDecodeFlacTask.h:127
ODFlacDecoder::mTargetChannel
unsigned int mTargetChannel
Definition: ODDecodeFlacTask.h:136
ODFLACFile::get_was_error
bool get_was_error() const
Definition: ODDecodeFlacTask.h:76
ODDecodeFlacTask::Clone
std::unique_ptr< ODTask > Clone() const override
Definition: ODDecodeFlacTask.cpp:35
ODDecodeTask
A class representing a modular task to be used with the On-Demand structures.
Definition: ODDecodeTask.h:41
ODFlacDecoder::ReadHeader
bool ReadHeader() override
Definition: ODDecodeFlacTask.cpp:223
ODFlacDecoder
class to decode a particular file (one per file). Saves info such as filename and length (after the h...
Definition: ODDecodeFlacTask.h:97
format
int format
Definition: ExportPCM.cpp:56
ODFlacDecoder::mStreamInfoDone
bool mStreamInfoDone
Definition: ODDecodeFlacTask.h:133
ODFLACFile::error_callback
void error_callback(FLAC__StreamDecoderErrorStatus status) override
Definition: ODDecodeFlacTask.cpp:90
ODFLACFile::metadata_callback
void metadata_callback(const FLAC__StreamMetadata *metadata) override
Definition: ODDecodeFlacTask.cpp:46
ODFlacDecoder::mBitsPerSample
unsigned long mBitsPerSample
Definition: ODDecodeFlacTask.h:129
ODFlacDecoder::mFile
std::unique_ptr< ODFLACFile > mFile
Definition: ODDecodeFlacTask.h:124
SampleBuffer
Definition: SampleFormat.h:69
sampleFormat
sampleFormat
Definition: SampleFormat.h:29
samplePtr
char * samplePtr
Definition: SampleFormat.h:49
ODFlacDecoder::mUpdateResult
int mUpdateResult
Definition: ODDecodeFlacTask.h:134
ODFlacDecoder::mHandle
wxFFile mHandle
Definition: ODDecodeFlacTask.h:126
ODLock
Definition: ODTaskThread.h:89
ODFileDecoder
class to decode a particular file (one per file). Saves info such as filename and length (after the h...
Definition: ODDecodeBlockFile.h:194
ODFlacDecoder::mDecodeBufferLen
unsigned int mDecodeBufferLen
Definition: ODDecodeFlacTask.h:138
ODFlacDecoder::Decode
int Decode(SampleBuffer &data, sampleFormat &format, sampleCount start, size_t len, unsigned int channel) override
Definition: ODDecodeFlacTask.cpp:172
sampleCount
Positions or offsets within audio files need a wide type.
Definition: SampleCount.h:18
ODFlacDecoder::mChannels
WaveTrack ** mChannels
Definition: ODDecodeFlacTask.h:135
ODDecodeTask.h
ODFlacDecoder::mSamplesDone
FLAC__uint64 mSamplesDone
Definition: ODDecodeFlacTask.h:131
ODFlacDecoder::mDecodeBuffer
samplePtr mDecodeBuffer
Definition: ODDecodeFlacTask.h:139
ODFLACFile::mComments
wxArrayString mComments
Definition: ODDecodeFlacTask.h:84
ODTask::eODFLAC
@ eODFLAC
Definition: ODTask.h:44
ODFlacDecoder::mNumSamples
FLAC__uint64 mNumSamples
Definition: ODDecodeFlacTask.h:130
ODDecodeFlacTask::GetODType
unsigned int GetODType() override
Definition: ODDecodeFlacTask.h:61
ODFlacDecoder::~ODFlacDecoder
virtual ~ODFlacDecoder()
Definition: ODDecodeFlacTask.cpp:270
ODFlacDecoder::mLastDecodeStartSample
sampleCount mLastDecodeStartSample
Definition: ODDecodeFlacTask.h:132
ODFLACFile::mDecoder
ODFlacDecoder * mDecoder
Definition: ODDecodeFlacTask.h:82
ODFlacDecoder::ODFlacDecoder
ODFlacDecoder(const wxString &fileName)
This should handle unicode converted to UTF-8 on mac/linux, but OD TODO:check on windows.
Definition: ODDecodeFlacTask.h:101
ODDecodeFlacTask::CreateFileDecoder
ODFileDecoder * CreateFileDecoder(const wxString &fileName) override
Creates an ODFileDecoder that decodes a file of filetype the subclass handles.
Definition: ODDecodeFlacTask.cpp:278