Hi,
I have built example cd reader and in debug build I get assertion which I don’t understand:
JUCE Assertion failure in
d:\devel\src\juce\build\git\src\events\juce_messagelistener.cpp, line 37
JUCE Assertion failure in
d:\devel\src\juce\build\git\src\events\juce_messagelistener.cpp, line 37
juce_messagelistener.cpp:37
MessageListener::MessageListener() throw()
{
// are you trying to create a messagelistener before or after juce has been intialised??
jassert (MessageManager::instance != 0);
if (MessageManager::instance != 0)
MessageManager::instance->messageListeners.add (this);
}
cdreader.cpp
/* CDReader.cpp */
#include <juce.h>
int readcd (const char* directory)
{
String outputDirectory (directory);
File output (outputDirectory);
if (output.exists() == false || output.isDirectory() == false)
{
printf ("Not a directory: %s\n", directory);
return 1;
}
if (outputDirectory.endsWithChar (File::separator) == false)
outputDirectory += File::separator;
StringArray cdNames (AudioCDReader::getAvailableCDNames());
if (cdNames.size() == 0)
{
printf ("No CD available\n");
return 1;
}
AudioCDReader* cdReader (AudioCDReader::createReaderForCD(0));
if (cdReader == 0)
{
printf ("Unable to create CD reader\n");
return 1;
}
int numTracks (cdReader->getNumTracks());
int cddbid (cdReader->getCDDBId());
if (cddbid == 0)
{
printf ("Please insert disc\n");
delete cdReader;
return 1;
}
printf ("CD available (%d) with number of tracks and CDDB id:\n", cdNames.size());
for (int n = 0; n < cdNames.size(); ++n)
printf ("%d: \"%s\" %d: %x\n", n, (const char*) cdNames[n], numTracks, cddbid);
for (int n = 0, s = cdReader->getPositionOfTrackStart(n);
cdReader->isCDStillPresent() && n < numTracks;
++n, s = cdReader->getPositionOfTrackStart(n))
{
if (cdReader->isTrackAudio(n) == false)
{
printf ("Not an audio track: %d\n", n);
continue;
}
int trackEnd(0);
if (n + 1 < numTracks)
trackEnd = cdReader->getPositionOfTrackStart(n+1);
else
trackEnd = cdReader->lengthInSamples;
printf ("Track number with start/end position: %d %d %d\n", n, s, trackEnd);
if (n < 10)
output = File (outputDirectory + T("Track0") + String (n+1) + T(".wav"));
else
output = File (outputDirectory + T("Track") + String (n+1) + T(".wav"));
printf ("Output file name: %s\n", (const char*) output.getFullPathName());
OutputStream* outputStream = output.createOutputStream();
int blockSize (2366);
AudioSampleBuffer buffer (2, blockSize);
WavAudioFormat wavFormat;
AudioFormatWriter* wavWriter = wavFormat.createWriterFor (
outputStream, 44100, 2, 16,
StringPairArray(), 0);
if (outputStream == 0 || wavWriter == 0)
{
printf ("Unable to create output\n");
if (outputStream)
delete outputStream;
return 1;
}
while (cdReader->isCDStillPresent())
{
printf ("Sample: %d\r", s);
if (s >= trackEnd)
break;
if (s + blockSize > trackEnd)
blockSize = trackEnd - s;
buffer.readFromAudioReader (cdReader, 0, blockSize, s, true, true);
buffer.writeToAudioWriter (wavWriter, 0, blockSize);
s += blockSize;
}
delete wavWriter;
}
delete cdReader;
return 0;
}
int main (int argc, char* argv[])
{
if (argc != 2)
{
printf ("Usage: cdreader DIRECTORY\n");
return 1;
}
initialiseJuce_NonGUI();
int ret = readcd (argv[1]);
shutdownJuce_NonGUI();
return ret;
}
Thanks, bye