10 #include "../Audacity.h"
14 #include <wx/string.h>
28 #define FLAC_HEADER "fLaC"
37 auto clone = std::make_unique<ODDecodeFlacTask>();
42 return std::move(clone);
48 switch (metadata->type)
50 case FLAC__METADATA_TYPE_VORBIS_COMMENT:
51 for (FLAC__uint32 i = 0; i < metadata->data.vorbis_comment.num_comments; i++) {
52 mComments.push_back(
UTF8CTOWX((
char *)metadata->data.vorbis_comment.comments[i].entry));
56 case FLAC__METADATA_TYPE_STREAMINFO:
76 case FLAC__METADATA_TYPE_PADDING:
77 case FLAC__METADATA_TYPE_APPLICATION:
78 case FLAC__METADATA_TYPE_SEEKTABLE:
79 case FLAC__METADATA_TYPE_CUESHEET:
80 case FLAC__METADATA_TYPE_PICTURE:
81 case FLAC__METADATA_TYPE_UNDEFINED:
97 case FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC:
98 wxPrintf(
"Flac Error: Lost sync\n");
100 case FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH:
101 wxPrintf(
"Flac Error: Crc mismatch\n");
103 case FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER:
104 wxPrintf(
"Flac Error: Bad Header\n");
107 wxPrintf(
"Flac Error: Unknown error code\n");
115 const FLAC__int32 *
const buffer[])
118 unsigned int bytesToCopy = frame->header.blocksize;
149 return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
197 "Type FLAC__int64 is too narrow to hold a sampleCount");
205 mFile->process_single();
228 mFile = std::make_unique<ODFLACFile>(
this);
244 if (result != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
249 mFile->process_until_end_of_metadata();
251 if (
mFile->get_state() > FLAC__STREAM_DECODER_READ_FRAME) {
255 if (!
mFile->is_valid() ||
mFile->get_was_error()) {
315 auto decoder = std::make_unique<ODFlacDecoder>(fileName);