Hi list

First of all, thank you for the amazing framework. We are using it in
our lab at UNICAMP/Brasil and we are impressed with it.

I have two newby questions:
1) I can read mono audio files with MultiChannelAudioFileReader but I
can't write them with MultiChannelAudioFileWriter. When I've tried to
do this I've got a segfault. The code is attached. Is it correct? I'm
using the deb package for (k)ubuntu feisty.
2) What is the standard interface to read and write files:
MultiChannel/MonoAudioFileReader/Writer or AudioFileIn/Out? Why are
there two different interfaces?

Thanks in advance,
Fabio
#include <iostream>
#include <vector>
#include <CLAM/Audio.hxx>
#include <CLAM/AudioFile.hxx>
#include <CLAM/MultiChannelAudioFileReader.hxx>
#include <CLAM/MultiChannelAudioFileWriter.hxx>

using namespace std;
using namespace CLAM;

int
main(int argc, char** argv)
{
    if (argc != 3) {
        cerr << "Usage: clam_test <in file name> <out file name>" << endl;
        exit(-1);
    }

    try {
        AudioFileSource infile;
        infile.OpenExisting(argv[1]);
        if (!infile.IsReadable()) {
            cerr << "Error: file " << infile.GetLocation()
                << " cannot be opened or its format is not supported" << endl;
            exit(-1);
        }
        MultiChannelAudioFileReaderConfig incfg;
        incfg.SetSourceFile(infile);
        MultiChannelAudioFileReader reader(incfg);

        AudioFileHeader outheader = infile.GetHeader();
        outheader.SetFormat(EAudioFileFormat::FormatFromFilename(argv[2]));
        AudioFileTarget outfile;
        outfile.CreateNew(argv[2], outheader);
        if (!outfile.IsWritable()) {
            cerr << "The desired format " << outheader.GetFormat()
                << "does not support current header parameters" << endl;
            exit(-1);
        }
        MultiChannelAudioFileWriterConfig outcfg;
        outcfg.AddTargetFile();
        outcfg.UpdateData();
        outcfg.SetTargetFile(outfile);
        MultiChannelAudioFileWriter writer(outcfg);

        vector<Audio> channels(outheader.GetChannels());
        for (size_t i = 0; i < channels.size(); ++i) channels[i].SetSize(2048);

        writer.Start();
        reader.Start();
        while (reader.Do(channels)) writer.Do(channels);
        reader.Stop();
        writer.Stop();
    } catch (const Err& e) {
        e.Print();
        exit(-1);
    } catch (const exception& e) {
        cerr << e.what() << endl;
        exit(-1);
    }

    return 0;
}
_______________________________________________
CLAM mailing list
[email protected]
http://www.iua.upf.es/mtg/clam

Reply via email to