148 lines
4.7 KiB
Factor
148 lines
4.7 KiB
Factor
! Copyright (C) 2020 .
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: system combinators alien alien.libraries alien.syntax alien.c-types classes.struct ;
|
|
IN: flac.ffi
|
|
|
|
<<
|
|
"avcodec" {
|
|
{ [ os unix? ] [ "libFLAC.so" ] }
|
|
} cond cdecl add-library
|
|
>>
|
|
|
|
TYPEDEF: int FLAC__bool
|
|
TYPEDEF: int16_t FLAC__int16
|
|
TYPEDEF: int32_t FLAC__int32
|
|
TYPEDEF: int64_t FLAC__int64
|
|
TYPEDEF: uint FLAC__uint8
|
|
TYPEDEF: uint16_t FLAC__uint16
|
|
TYPEDEF: uint32_t FLAC__uint32
|
|
TYPEDEF: uint64_t FLAC__uint64
|
|
TYPEDEF: uint unsigned
|
|
TYPEDEF: uint8_t FLAC__byte
|
|
|
|
ENUM: FLAC__MetadataType
|
|
FLAC__METADATA_TYPE_STREAMINFO
|
|
FLAC__METADATA_TYPE_PADDING
|
|
FLAC__METADATA_TYPE_APPLICATION
|
|
FLAC__METADATA_TYPE_SEEKTABLE
|
|
FLAC__METADATA_TYPE_VORBIS_COMMENT
|
|
FLAC__METADATA_TYPE_CUESHEET
|
|
FLAC__METADATA_TYPE_PICTURE
|
|
FLAC__METADATA_TYPE_UNDEFINED
|
|
FLAC__METADATA_TYPE_TYPE ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_StreamInfo
|
|
{ min_blocksize unsigned }
|
|
{ max_blocksize unsigned }
|
|
{ min_framesize unsigned }
|
|
{ max_framesize unsigned }
|
|
{ sample_rate unsigned }
|
|
{ channels unsigned }
|
|
{ bits_per_sample unsigned }
|
|
{ total_samples FLAC__uint64 }
|
|
{ md5sum FLAC__byte[16] } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_Padding
|
|
{ dummy int } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_Application
|
|
{ id FLAC__byte[4] }
|
|
{ data FLAC__byte* } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_SeekPoint
|
|
{ sample_number FLAC__uint64 }
|
|
{ stream_offset FLAC__uint64 }
|
|
{ frame_samples unsigned } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_SeekTable
|
|
{ num_points unsigned }
|
|
{ points FLAC__StreamMetadata_SeekPoint* } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_VorbisComment_Entry
|
|
{ length FLAC__uint32 }
|
|
{ entry FLAC__byte* } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_VorbisComment
|
|
{ vendor_string FLAC__StreamMetadata_VorbisComment_Entry }
|
|
{ num_comments FLAC__uint32 }
|
|
{ comments FLAC__StreamMetadata_VorbisComment_Entry* } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_CueSheet_Index
|
|
{ offset FLAC__uint64 }
|
|
{ number FLAC__byte } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_CueSheet_Track
|
|
{ offset FLAC__uint64 }
|
|
{ number FLAC__byte }
|
|
{ isrc char[13] }
|
|
{ type unsigned bits: 1 }
|
|
{ pre_emphasis unsigned bits: 1 }
|
|
{ num_indices FLAC__byte }
|
|
{ indices FLAC__StreamMetadata_CueSheet_Index* } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_CueSheet
|
|
{ media_catalog_number char[129] }
|
|
{ lead_in FLAC__uint64 }
|
|
{ is_cd FLAC__bool }
|
|
{ num_tracks unsigned }
|
|
{ tracks FLAC__StreamMetadata_CueSheet_Track* } ;
|
|
|
|
ENUM: FLAC__StreamMetadata_Picture_Type
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_BAND
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_FISH
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE
|
|
FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_Picture
|
|
{ type FLAC__StreamMetadata_Picture_Type }
|
|
{ mime_type char* }
|
|
{ description FLAC__byte* }
|
|
{ width FLAC__uint32 }
|
|
{ height FLAC__uint32 }
|
|
{ depth FLAC__uint32 }
|
|
{ colors FLAC__uint32 }
|
|
{ data_length FLAC__uint32 }
|
|
{ data FLAC__byte* } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata_Unknown
|
|
{ data FLAC__byte* } ;
|
|
|
|
UNION-STRUCT: metadata-union
|
|
{ stream_info FLAC__StreamMetadata_StreamInfo }
|
|
{ padding FLAC__StreamMetadata_Padding }
|
|
{ application FLAC__StreamMetadata_Application }
|
|
{ seek_table FLAC__StreamMetadata_SeekTable }
|
|
{ vorbis_comment FLAC__StreamMetadata_VorbisComment }
|
|
{ cue_sheet FLAC__StreamMetadata_CueSheet }
|
|
{ picture FLAC__StreamMetadata_Picture }
|
|
{ unknown FLAC__StreamMetadata_Unknown } ;
|
|
|
|
STRUCT: FLAC__StreamMetadata
|
|
{ type FLAC__MetadataType }
|
|
{ is_last FLAC__bool }
|
|
{ length unsigned }
|
|
{ data metadata-union } ;
|
|
|
|
FUNCTION: FLAC__bool FLAC__metadata_get_streaminfo ( c-string filename, FLAC__StreamMetadata* streaminfo )
|
|
FUNCTION: FLAC__bool FLAC__metadata_get_tags ( c-string filename, FLAC__StreamMetadata** streaminfo )
|
|
|
|
|