blob: f3112c7fa2aa289293ac158d1a6db5c7bf8f58de [file] [log] [blame]
/*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.media.sound;
import java.io.InputStream;
import javax.sound.midi.Soundbank;
import javax.sound.midi.SoundbankResource;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
/**
* Soundfont sample storage.
*
* @author Karl Helgason
*/
public class SF2Sample extends SoundbankResource {
protected String name = "";
protected long startLoop = 0;
protected long endLoop = 0;
protected long sampleRate = 44100;
protected int originalPitch = 60;
protected byte pitchCorrection = 0;
protected int sampleLink = 0;
protected int sampleType = 0;
protected ModelByteBuffer data;
protected ModelByteBuffer data24;
public SF2Sample(Soundbank soundBank) {
super(soundBank, null, AudioInputStream.class);
}
public SF2Sample() {
super(null, null, AudioInputStream.class);
}
public Object getData() {
AudioFormat format = getFormat();
/*
if (sampleFile != null) {
FileInputStream fis;
try {
fis = new FileInputStream(sampleFile);
RIFFReader riff = new RIFFReader(fis);
if (!riff.getFormat().equals("RIFF")) {
throw new RIFFInvalidDataException(
"Input stream is not a valid RIFF stream!");
}
if (!riff.getType().equals("sfbk")) {
throw new RIFFInvalidDataException(
"Input stream is not a valid SoundFont!");
}
while (riff.hasNextChunk()) {
RIFFReader chunk = riff.nextChunk();
if (chunk.getFormat().equals("LIST")) {
if (chunk.getType().equals("sdta")) {
while(chunk.hasNextChunk()) {
RIFFReader chunkchunk = chunk.nextChunk();
if(chunkchunk.getFormat().equals("smpl")) {
chunkchunk.skip(sampleOffset);
return new AudioInputStream(chunkchunk,
format, sampleLen);
}
}
}
}
}
return null;
} catch (Exception e) {
return new Throwable(e.toString());
}
}
*/
InputStream is = data.getInputStream();
if (is == null)
return null;
return new AudioInputStream(is, format, data.capacity());
}
public ModelByteBuffer getDataBuffer() {
return data;
}
public ModelByteBuffer getData24Buffer() {
return data24;
}
public AudioFormat getFormat() {
return new AudioFormat(sampleRate, 16, 1, true, false);
}
public void setData(ModelByteBuffer data) {
this.data = data;
}
public void setData(byte[] data) {
this.data = new ModelByteBuffer(data);
}
public void setData(byte[] data, int offset, int length) {
this.data = new ModelByteBuffer(data, offset, length);
}
public void setData24(ModelByteBuffer data24) {
this.data24 = data24;
}
public void setData24(byte[] data24) {
this.data24 = new ModelByteBuffer(data24);
}
public void setData24(byte[] data24, int offset, int length) {
this.data24 = new ModelByteBuffer(data24, offset, length);
}
/*
public void setData(File file, int offset, int length) {
this.data = null;
this.sampleFile = file;
this.sampleOffset = offset;
this.sampleLen = length;
}
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getEndLoop() {
return endLoop;
}
public void setEndLoop(long endLoop) {
this.endLoop = endLoop;
}
public int getOriginalPitch() {
return originalPitch;
}
public void setOriginalPitch(int originalPitch) {
this.originalPitch = originalPitch;
}
public byte getPitchCorrection() {
return pitchCorrection;
}
public void setPitchCorrection(byte pitchCorrection) {
this.pitchCorrection = pitchCorrection;
}
public int getSampleLink() {
return sampleLink;
}
public void setSampleLink(int sampleLink) {
this.sampleLink = sampleLink;
}
public long getSampleRate() {
return sampleRate;
}
public void setSampleRate(long sampleRate) {
this.sampleRate = sampleRate;
}
public int getSampleType() {
return sampleType;
}
public void setSampleType(int sampleType) {
this.sampleType = sampleType;
}
public long getStartLoop() {
return startLoop;
}
public void setStartLoop(long startLoop) {
this.startLoop = startLoop;
}
public String toString() {
return "Sample: " + name;
}
}