/*
* Cdparanoia.java
*
* This file is part of Tritonus: http://www.tritonus.org/
*/
/*
* Copyright (c) 2001 by Matthias Pfisterer
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as published
* by the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
/*
|<--- this code is formatted to fit into 80 columns --->|
*/
package org.tritonus.lowlevel.cdda.cdparanoia;
import org.tritonus.share.TDebug;
/** Reading audio CDs using libcdparanoia.
*/
public class Cdparanoia
{
static
{
if (TDebug.TraceCdda) { TDebug.out("Cdparanoia.<clinit>(): loading native library tritonuscdparanoia"); }
System.loadLibrary("tritonuscdparanoia");
if (TDebug.TraceCdda) { TDebug.out("Cdparanoia.<clinit>(): loaded"); }
setTrace(TDebug.TraceCddaNative);
if (Boolean.getBoolean("tritonus.DisableParanoia"))
{
setParanoiaMode(false);
}
}
/*
* This holds a pointer for the native code -
* do not touch!
*/
@SuppressWarnings("unused")
private long m_lNativeHandle;
public Cdparanoia(String strDevice)
{
if (TDebug.TraceCdda) { TDebug.out("Cdparanoia.<init>: begin"); }
int nResult = open(strDevice);
if (nResult < 0)
{
throw new RuntimeException("cannot open device '" + strDevice + "'");
}
if (TDebug.TraceCdda) { TDebug.out("Cdparanoia.<init>: end"); }
}
/** Searches the device.
Calls cdda_identify().
@return 0 on success, negative values on error.
*/
private native int find(String strDevice);
/** Opens and initializes the device.
Calls cdda_open(), paranoia_init()
and paranoia_modeset().
@return 0 on success, negative values on error.
*/
private native int open(String strDevice);
/** Closes the device.
* Calls cdda_close().
*/
public native void close();
/* Read the table of contents.
anValues[0] first track
anValues[1] last track
anStartTrack[x] start sector of the track x.
anType[x] type of track x.
*/
public native int readTOC(int[] anValues,
int[] anStartFrame,
int[] anLength,
int[] anType,
boolean[] abAudio,
boolean[] abCopy,
boolean[] abPre,
int[] anChannels);
public native int prepareTrack(int nTrack);
/** Reads one or more raw frames from the CD.
This call reads <CODE>nCount</CODE> frames from
the track that has been set by
<CODE>prepareTrack()</CODE>.
<CODE>abData</CODE> has to be big enough to hold the
amount of data requested (<CODE>2352 * nCount</CODE> bytes).
*/
public native int readNextFrame(int nCount, byte[] abData);
private static native void setTrace(boolean bTrace);
/** Set the paranoia level.
This setting influences the value that is used in the call
'paranoia_modeset(cdrom_paranoia*, int [mode])'.
If set to true a hard-coded default value will be used.
(Currently 'PARANOIA_MODE_FULL ^ PARANOIA_MODE_NEVERSKIP', but
for definitive answers, look it up in src/lib/cdparanoia/org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia.c).
If set to false, 'PARANOIA_MODE_DISABLE' will be used.
Note that currently, changing this value only has an effect prior
to opening the device.
*/
private static native void setParanoiaMode(boolean bPoranoiaMode);
}
/*** Cdparanoia.java ***/