/* * VsqEvent.cs * Copyright (c) 2008-2009 kbinani * * This file is part of Boare.Lib.Vsq. * * Boare.Lib.Vsq is free software; you can redistribute it and/or * modify it under the terms of the BSD License. * * Boare.Lib.Vsq 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. */ #if JAVA package org.kbinani.vsq; import java.io.*; import java.util.*; import org.kbinani.*; #else using System; using bocoree; using bocoree.java.util; using bocoree.java.io; namespace Boare.Lib.Vsq { #endif /// /// vsqファイルのメタテキスト内に記述されるイベント。 /// #if JAVA public class VsqEvent implements Comparable, Cloneable, Serializable { #else [Serializable] public class VsqEvent : IComparable, ICloneable { #endif public String Tag; /// /// 内部で使用するインスタンス固有のID /// public int InternalID; public int Clock; public VsqID ID; public UstEvent UstEvent = new UstEvent(); /// /// インスタンスをテキストファイルに出力します /// /// 出力先 public void write( TextMemoryStream sw ) #if JAVA throws IOException #endif { Vector def = new Vector( Arrays.asList( new String[]{ "Length", "Note#", "Dynamics", "PMBendDepth", "PMBendLength", "PMbPortamentoUse", "DEMdecGainRate", "DEMaccent" } ) ); write( sw, def ); } public void write( TextMemoryStream writer, Vector print_targets ) #if JAVA throws IOException #endif { writeCor( writer, print_targets ); } public void write( BufferedWriter writer, Vector print_targets ) #if JAVA throws IOException #endif { writeCor( new WrappedStreamWriter( writer ), print_targets ); } private void writeCor( ITextWriter writer, Vector print_targets ) #if JAVA throws IOException #endif { writer.writeLine( "[ID#" + PortUtil.formatDecimal( "0000", ID.value ) + "]" ); writer.writeLine( "Type=" + ID.type ); if ( ID.type == VsqIDType.Anote ) { if ( print_targets.contains( "Length" ) ) writer.writeLine( "Length=" + ID.getLength() ); if ( print_targets.contains( "Note#" ) ) writer.writeLine( "Note#=" + ID.Note ); if ( print_targets.contains( "Dynamics" ) ) writer.writeLine( "Dynamics=" + ID.Dynamics ); if ( print_targets.contains( "PMBendDepth" ) ) writer.writeLine( "PMBendDepth=" + ID.PMBendDepth ); if ( print_targets.contains( "PMBendLength" ) ) writer.writeLine( "PMBendLength=" + ID.PMBendLength ); if ( print_targets.contains( "PMbPortamentoUse" ) ) writer.writeLine( "PMbPortamentoUse=" + ID.PMbPortamentoUse ); if ( print_targets.contains( "DEMdecGainRate" ) ) writer.writeLine( "DEMdecGainRate=" + ID.DEMdecGainRate ); if ( print_targets.contains( "DEMaccent" ) ) writer.writeLine( "DEMaccent=" + ID.DEMaccent ); if ( print_targets.contains( "PreUtterance" ) ) writer.writeLine( "PreUtterance=" + UstEvent.PreUtterance ); if ( print_targets.contains( "VoiceOverlap" ) ) writer.writeLine( "VoiceOverlap=" + UstEvent.VoiceOverlap ); if ( ID.LyricHandle != null ) { writer.writeLine( "LyricHandle=h#" + PortUtil.formatDecimal( "0000", ID.LyricHandle_index ) ); } if ( ID.VibratoHandle != null ) { writer.writeLine( "VibratoHandle=h#" + PortUtil.formatDecimal( "0000", ID.VibratoHandle_index ) ); writer.writeLine( "VibratoDelay=" + ID.VibratoDelay ); } if ( ID.NoteHeadHandle != null ) { writer.writeLine( "NoteHeadHandle=h#" + PortUtil.formatDecimal( "0000", ID.NoteHeadHandle_index ) ); } } else if ( ID.type == VsqIDType.Singer ) { writer.writeLine( "IconHandle=h#" + PortUtil.formatDecimal( "0000", ID.IconHandle_index ) ); } } /// /// このオブジェクトのコピーを作成します /// /// public Object clone() { VsqEvent ret = new VsqEvent( Clock, (VsqID)ID.clone() ); ret.InternalID = InternalID; if ( UstEvent != null ) { ret.UstEvent = (UstEvent)UstEvent.clone(); } ret.Tag = Tag; return ret; } #if !JAVA public object Clone() { return clone(); } #endif #if !JAVA public int CompareTo( VsqEvent item ) { return compareTo( item ); } #endif public int compareTo( VsqEvent item ) { int ret = this.Clock - item.Clock; if ( ret == 0 ) { if ( this.ID != null && item.ID != null ) { #if JAVA return this.ID.type.ordinal() - item.ID.type.ordinal(); #else return (int)this.ID.type - (int)item.ID.type; #endif } else { return ret; } } else { return ret; } } public VsqEvent( String line ) { String[] spl = PortUtil.splitString( line, new char[] { '=' } ); Clock = PortUtil.parseInt( spl[0] ); if ( spl[1].Equals( "EOS" ) ) { ID = VsqID.EOS; } } #if JAVA public VsqEvent(){ this( 0, new VsqID() ); #else public VsqEvent() : this( 0, new VsqID() ) { #endif } public VsqEvent( int clock, VsqID id /*, int internal_id*/ ) { Clock = clock; ID = id; //InternalID = internal_id; InternalID = 0; } } #if !JAVA } #endif