Skip to content

File main.cpp

File List > examples > WavParser > main.cpp

Go to the documentation of this file

Source Code

#include "daisy_seed.h"

using namespace daisy;

static constexpr const size_t kMaxFiles = 4;

static DaisySeed            hw;
static SdmmcHandler         sdmmc;
static FatFSInterface       fsi;
static FileTable<kMaxFiles> file_table;
static FIL                  file;

int main(void)
{
    hw.Init(true);
    hw.StartLog(true);

    SdmmcHandler::Config sdcfg;
    sdcfg.Defaults();
    sdcfg.speed = SdmmcHandler::Speed::STANDARD;
    sdcfg.width = SdmmcHandler::BusWidth::BITS_1;
    sdmmc.Init(sdcfg);
    fsi.Init(FatFSInterface::Config::Media::MEDIA_SD);
    f_mount(&fsi.GetSDFileSystem(), "/", 1);

    file_table.Fill("/", ".wav");


    if(file_table.GetNumFiles() > 0)
    {
        for(size_t i = 0; i < file_table.GetNumFiles(); i++)
        {
            auto sta = f_open(
                &file, file_table.GetFileName(i), (FA_OPEN_EXISTING | FA_READ));
            if(sta != FR_OK)
            {
                hw.PrintLine("Could not open: %s", file_table.GetFileName(i));
                continue;
            }
            FileReader reader(&file);
            WavParser  parser;
            if(!parser.parse(reader))
            {
                hw.PrintLine("Error parsing file: %s",
                             file_table.GetFileName(i));
                continue;
            }

            const auto& info = parser.info();
            hw.PrintLine("File Information: %s", file_table.GetFileName(i));
            hw.PrintLine("\tSample Rate:\t%d", info.sampleRate);
            hw.PrintLine("\tChannels:\t%d", info.numChannels);
            hw.PrintLine("\tBit Depth:\t%d", info.bitsPerSample);

            size_t dur_samples
                = parser.dataSize()
                  / ((info.bitsPerSample / 8) * info.numChannels);
            float dur_seconds = static_cast<float>(dur_samples)
                                / static_cast<float>(info.sampleRate);
            float frac = dur_seconds - static_cast<int>(dur_seconds);
            hw.PrintLine("\tDuration (seconds):\t%d.%02d",
                         static_cast<size_t>(dur_seconds),
                         static_cast<size_t>(frac * 100.f));

            hw.PrintLine("\tMetaData Chunks:\t%d", parser.metadataCount());
        }
    }


    while(1) {}
}