// Path: op1/src/main/java/com/op1/aiff/FormatVersionChunk.java
// public class FormatVersionChunk implements Chunk {
// 
//     private final ID chunkId = ChunkType.FORMAT_VERSION.getChunkId();  // 4 bytes
//     private SignedLong chunkSize;                                      // 4 bytes
//     private UnsignedLong timestamp;                                    // 4 bytes
// 
//     private FormatVersionChunk() {
//     }
// 
//     private FormatVersionChunk(FormatVersionChunk chunk) {
//         this.chunkSize = chunk.getChunkSize();
//         this.timestamp = chunk.getTimestamp();
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         final FormatVersionChunk that = (FormatVersionChunk) o;
// 
//         if (chunkId != null ? !chunkId.equals(that.chunkId) : that.chunkId != null) return false;
//         if (chunkSize != null ? !chunkSize.equals(that.chunkSize) : that.chunkSize != null) return false;
//         return !(timestamp != null ? !timestamp.equals(that.timestamp) : that.timestamp != null);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = chunkId != null ? chunkId.hashCode() : 0;
//         result = 31 * result + (chunkSize != null ? chunkSize.hashCode() : 0);
//         result = 31 * result + (timestamp != null ? timestamp.hashCode() : 0);
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "FormatVersionChunk{" +
//                 "chunkId=" + chunkId +
//                 ", chunkSize=" + chunkSize +
//                 ", timestamp=" + timestamp +
//                 '}';
//     }
// 
//     @Override
//     public int getPhysicalSize() {
//         return chunkId.getSize()
//                 + chunkSize.getSize()
//                 + timestamp.getSize();
//     }
// 
//     @Override
//     public ID getChunkID() {
//         return chunkId;
//     }
// 
//     @Override
//     public SignedLong getChunkSize() {
//         return chunkSize;
//     }
// 
//     public UnsignedLong getTimestamp() {
//         return timestamp;
//     }
// 
//     public static class Builder {
// 
//         private final FormatVersionChunk instance;
// 
//         public Builder() {
//             instance = new FormatVersionChunk();
//         }
// 
//         public FormatVersionChunk build() {
//             Check.notNull(instance.chunkSize, "Missing chunkSize");
//             Check.notNull(instance.timestamp, "Missing timestamp");
//             return new FormatVersionChunk(instance);
//         }
// 
//         public Builder withChunkSize(SignedLong chunkSize) {
//             instance.chunkSize = chunkSize;
//             return this;
//         }
// 
//         public Builder withTimestamp(UnsignedLong timestamp) {
//             instance.timestamp = timestamp;
//             return this;
//         }
//     }
// 
//     public static FormatVersionChunk readFormatVersionChunk(IffReader reader) throws IOException {
//         return new FormatVersionChunk.Builder()
//                 .withChunkSize(reader.readSignedLong())
//                 .withTimestamp(reader.readUnsignedLong())
//                 .build();
//     }
// 
//     public static class FormatVersionChunkReader implements ChunkReader {
//         public Chunk readChunk(IffReader reader) throws IOException {
//             return readFormatVersionChunk(reader);
//         }
//     }
// }


import com.op1.aiff.FormatVersionChunk;
import com.op1.iff.types.*;
package com.op1.util;


public class Op1Constants {

    public static final Extended SAMPLE_RATE_44100 = new Extended(new byte[]{
            64, 14, -84, 68, 0, 0, 0, 0, 0, 0
    });

    public static final byte[] COMMON_CHUNK_DESCRIPTION = ")Signed integer (little-endian) linear PCM".getBytes();
    public static final OSType APPLICATION_CHUNK_SIGNATURE = OSType.fromString("op-1");

    public static final SignedShort NUM_CHANNELS_MONO = SignedShort.fromShort((short) 1);
    public static final SignedShort SAMPLE_SIZE_16_BIT = SignedShort.fromShort((short) 16);
    public static final ID ID_SOWT = ID.valueOf("sowt");

// Path: op1/src/main/java/com/op1/aiff/FormatVersionChunk.java
// public class FormatVersionChunk implements Chunk {
// 
//     private final ID chunkId = ChunkType.FORMAT_VERSION.getChunkId();  // 4 bytes
//     private SignedLong chunkSize;                                      // 4 bytes
//     private UnsignedLong timestamp;                                    // 4 bytes
// 
//     private FormatVersionChunk() {
//     }
// 
//     private FormatVersionChunk(FormatVersionChunk chunk) {
//         this.chunkSize = chunk.getChunkSize();
//         this.timestamp = chunk.getTimestamp();
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         final FormatVersionChunk that = (FormatVersionChunk) o;
// 
//         if (chunkId != null ? !chunkId.equals(that.chunkId) : that.chunkId != null) return false;
//         if (chunkSize != null ? !chunkSize.equals(that.chunkSize) : that.chunkSize != null) return false;
//         return !(timestamp != null ? !timestamp.equals(that.timestamp) : that.timestamp != null);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = chunkId != null ? chunkId.hashCode() : 0;
//         result = 31 * result + (chunkSize != null ? chunkSize.hashCode() : 0);
//         result = 31 * result + (timestamp != null ? timestamp.hashCode() : 0);
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "FormatVersionChunk{" +
//                 "chunkId=" + chunkId +
//                 ", chunkSize=" + chunkSize +
//                 ", timestamp=" + timestamp +
//                 '}';
//     }
// 
//     @Override
//     public int getPhysicalSize() {
//         return chunkId.getSize()
//                 + chunkSize.getSize()
//                 + timestamp.getSize();
//     }
// 
//     @Override
//     public ID getChunkID() {
//         return chunkId;
//     }
// 
//     @Override
//     public SignedLong getChunkSize() {
//         return chunkSize;
//     }
// 
//     public UnsignedLong getTimestamp() {
//         return timestamp;
//     }
// 
//     public static class Builder {
// 
//         private final FormatVersionChunk instance;
// 
//         public Builder() {
//             instance = new FormatVersionChunk();
//         }
// 
//         public FormatVersionChunk build() {
//             Check.notNull(instance.chunkSize, "Missing chunkSize");
//             Check.notNull(instance.timestamp, "Missing timestamp");
//             return new FormatVersionChunk(instance);
//         }
// 
//         public Builder withChunkSize(SignedLong chunkSize) {
//             instance.chunkSize = chunkSize;
//             return this;
//         }
// 
//         public Builder withTimestamp(UnsignedLong timestamp) {
//             instance.timestamp = timestamp;
//             return this;
//         }
//     }
// 
//     public static FormatVersionChunk readFormatVersionChunk(IffReader reader) throws IOException {
//         return new FormatVersionChunk.Builder()
//                 .withChunkSize(reader.readSignedLong())
//                 .withTimestamp(reader.readUnsignedLong())
//                 .build();
//     }
// 
//     public static class FormatVersionChunkReader implements ChunkReader {
//         public Chunk readChunk(IffReader reader) throws IOException {
//             return readFormatVersionChunk(reader);
//         }
//     }
// }


// Path: op1/src/main/java/com/op1/util/Op1Constants.java
import com.op1.aiff.FormatVersionChunk;
import com.op1.iff.types.*;

package com.op1.util;


public class Op1Constants {

    public static final Extended SAMPLE_RATE_44100 = new Extended(new byte[]{
            64, 14, -84, 68, 0, 0, 0, 0, 0, 0
    });

    public static final byte[] COMMON_CHUNK_DESCRIPTION = ")Signed integer (little-endian) linear PCM".getBytes();
    public static final OSType APPLICATION_CHUNK_SIGNATURE = OSType.fromString("op-1");

    public static final SignedShort NUM_CHANNELS_MONO = SignedShort.fromShort((short) 1);
    public static final SignedShort SAMPLE_SIZE_16_BIT = SignedShort.fromShort((short) 16);
    public static final ID ID_SOWT = ID.valueOf("sowt");

    public static final FormatVersionChunk FORMAT_VERSION_CHUNK = new FormatVersionChunk.Builder()