FlacStreamMetadata


@UnstableApi
public final class FlacStreamMetadata


Holder for FLAC metadata.

See the following spec references:

Summary

Nested types

A FLAC seek table.

Constants

static final int

Indicates that a value is not in the corresponding lookup table.

Public fields

final int

Number of bits per sample.

final int

Lookup key corresponding to the number of bits per sample of the stream, or NOT_IN_LOOKUP_TABLE if it is not in the lookup table.

final int

Number of audio channels.

final int

Maximum number of samples per block.

final int

Maximum frame size in bytes, or 0 if the value is unknown.

final int

Minimum number of samples per block.

final int

Minimum frame size in bytes, or 0 if the value is unknown.

final int

Sample rate in Hertz.

final int

Lookup key corresponding to the stream sample rate, or NOT_IN_LOOKUP_TABLE if it is not in the lookup table.

final @Nullable FlacStreamMetadata.SeekTable

Seek table, or null if it is not provided.

final long

Total number of samples, or 0 if the value is unknown.

Public constructors

FlacStreamMetadata(byte[] data, int offset)

Parses binary FLAC stream info metadata.

FlacStreamMetadata(
    int minBlockSizeSamples,
    int maxBlockSizeSamples,
    int minFrameSize,
    int maxFrameSize,
    int sampleRate,
    int channels,
    int bitsPerSample,
    long totalSamples,
    ArrayList<String> vorbisComments,
    ArrayList<PictureFrame> pictureFrames
)

Public methods

FlacStreamMetadata

Returns a copy of this with the given picture frames added to the metadata.

FlacStreamMetadata

Returns a copy of this with the seek table replaced by the one given.

FlacStreamMetadata

Returns a copy of this with the given Vorbis comments added to the metadata.

long

Returns the approximate number of bytes per frame for the current FLAC stream.

int

Returns the bitrate of the stream after it's decoded into PCM.

long

Returns the duration of the FLAC stream in microseconds, or TIME_UNSET if the total number of samples if unknown.

Format
getFormat(
    byte[] streamMarkerAndInfoBlock,
    @Nullable Metadata id3Metadata
)

Returns a Format extracted from the FLAC stream metadata.

int

Returns the maximum size for a decoded frame from the FLAC stream.

@Nullable Metadata

Returns a copy of the content metadata with entries from other appended.

long
getSampleNumber(long timeUs)

Returns the sample number of the sample at a given time.

Constants

NOT_IN_LOOKUP_TABLE

public static final int NOT_IN_LOOKUP_TABLE = -1

Indicates that a value is not in the corresponding lookup table.

Public fields

bitsPerSample

public final int bitsPerSample

Number of bits per sample.

bitsPerSampleLookupKey

public final int bitsPerSampleLookupKey

Lookup key corresponding to the number of bits per sample of the stream, or NOT_IN_LOOKUP_TABLE if it is not in the lookup table.

This key is used to indicate the number of bits per sample in the frame header for the most common values.

The sample size lookup table is described in https://xiph.org/flac/format.html#frame_header.

channels

public final int channels

Number of audio channels.

maxBlockSizeSamples

public final int maxBlockSizeSamples

Maximum number of samples per block.

maxFrameSize

public final int maxFrameSize

Maximum frame size in bytes, or 0 if the value is unknown.

minBlockSizeSamples

public final int minBlockSizeSamples

Minimum number of samples per block.

minFrameSize

public final int minFrameSize

Minimum frame size in bytes, or 0 if the value is unknown.

sampleRate

public final int sampleRate

Sample rate in Hertz.

sampleRateLookupKey

public final int sampleRateLookupKey

Lookup key corresponding to the stream sample rate, or NOT_IN_LOOKUP_TABLE if it is not in the lookup table.

This key is used to indicate the sample rate in the frame header for the most common values.

The sample rate lookup table is described in https://xiph.org/flac/format.html#frame_header.

seekTable

public final @Nullable FlacStreamMetadata.SeekTable seekTable

Seek table, or null if it is not provided.

totalSamples

public final long totalSamples

Total number of samples, or 0 if the value is unknown.

Public constructors

FlacStreamMetadata

public FlacStreamMetadata(byte[] data, int offset)

Parses binary FLAC stream info metadata.

Parameters
byte[] data

An array containing binary FLAC stream info block.

int offset

The offset of the stream info block in data, excluding the header (i.e. the offset points to the first byte of the minimum block size).

FlacStreamMetadata

public FlacStreamMetadata(
    int minBlockSizeSamples,
    int maxBlockSizeSamples,
    int minFrameSize,
    int maxFrameSize,
    int sampleRate,
    int channels,
    int bitsPerSample,
    long totalSamples,
    ArrayList<String> vorbisComments,
    ArrayList<PictureFrame> pictureFrames
)

Public methods

copyWithPictureFrames

public FlacStreamMetadata copyWithPictureFrames(List<PictureFrame> pictureFrames)

Returns a copy of this with the given picture frames added to the metadata.

copyWithSeekTable

public FlacStreamMetadata copyWithSeekTable(@Nullable FlacStreamMetadata.SeekTable seekTable)

Returns a copy of this with the seek table replaced by the one given.

copyWithVorbisComments

public FlacStreamMetadata copyWithVorbisComments(List<String> vorbisComments)

Returns a copy of this with the given Vorbis comments added to the metadata.

getApproxBytesPerFrame

public long getApproxBytesPerFrame()

Returns the approximate number of bytes per frame for the current FLAC stream.

getDecodedBitrate

public int getDecodedBitrate()

Returns the bitrate of the stream after it's decoded into PCM.

getDurationUs

public long getDurationUs()

Returns the duration of the FLAC stream in microseconds, or TIME_UNSET if the total number of samples if unknown.

getFormat

public Format getFormat(
    byte[] streamMarkerAndInfoBlock,
    @Nullable Metadata id3Metadata
)

Returns a Format extracted from the FLAC stream metadata.

streamMarkerAndInfoBlock is updated to set the bit corresponding to the stream info last metadata block flag to true.

Parameters
byte[] streamMarkerAndInfoBlock

An array containing the FLAC stream marker followed by the stream info block.

@Nullable Metadata id3Metadata

The ID3 metadata of the stream, or null if there is no such data.

Returns
Format

The extracted Format.

getMaxDecodedFrameSize

public int getMaxDecodedFrameSize()

Returns the maximum size for a decoded frame from the FLAC stream.

getMetadataCopyWithAppendedEntriesFrom

public @Nullable Metadata getMetadataCopyWithAppendedEntriesFrom(@Nullable Metadata other)

Returns a copy of the content metadata with entries from other appended.

getSampleNumber

public long getSampleNumber(long timeUs)

Returns the sample number of the sample at a given time.

Parameters
long timeUs

Time position in microseconds in the FLAC stream.

Returns
long

The sample number corresponding to the time position.