/** * Copyright 2007 DFKI GmbH. * All Rights Reserved. Use is subject to license terms. * * This file is part of MARY TTS. * * MARY TTS is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, version 3 of the License. * * 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package marytts.signalproc.adaptation; import java.io.FileNotFoundException; import java.io.IOException; import marytts.util.io.LEDataInputStream; import marytts.util.io.LEDataOutputStream; /** * A class for handling source-target frame indices mapping It can be used in various ways: * * @author Oytun Türk */ public class IndexMap { public FileMap[] files; // A frame map for individual file pairs public IndexMap() { files = null; } public IndexMap(int numItems) { allocate(numItems); } public IndexMap(IndexMap im) { copyFrom(im); } public void allocate(int numItems) { if (numItems > 0) files = new FileMap[numItems]; else files = null; } public void copyFrom(IndexMap im) { if (im.files.length > 0) { files = new FileMap[im.files.length]; for (int i = 0; i < im.files.length; i++) files[i] = new FileMap(im.files[i]); } else files = null; } // Write the object into a binary file public void writeToFile(String binaryFileName) throws IOException { LEDataOutputStream out = null; try { out = new LEDataOutputStream(binaryFileName); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (out != null) { int i, j; out.writeInt(files.length); for (i = 0; i < files.length; i++) { out.writeInt(files[i].indicesMap.length); for (j = 0; j < files[i].indicesMap.length; j++) { out.writeInt(files[i].indicesMap[j].length); out.writeInt(files[i].indicesMap[j]); } } out.close(); } } // Read the object from a binary file public void readFromFile(String binaryFileName) throws IOException { LEDataInputStream in = null; try { in = new LEDataInputStream(binaryFileName); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (in != null) { int i, j; int numItems = in.readInt(); allocate(numItems); int tmpNumGroups; int tmpNumItems; int[] tmpInts; for (i = 0; i < numItems; i++) { tmpNumGroups = in.readInt(); files[i] = new FileMap(tmpNumGroups, 0); for (j = 0; j < tmpNumGroups; j++) { tmpNumItems = in.readInt(); if (tmpNumItems > 0) { files[i].indicesMap[j] = new int[tmpNumItems]; tmpInts = in.readInt(tmpNumItems); System.arraycopy(tmpInts, 0, files[i].indicesMap[j], 0, files[i].indicesMap[j].length); } } } in.close(); } } }