33 #if !defined(_CARBON_) && !defined(__APPLE__) && !defined(WIN32)
44 #include <sys/types.h>
46 #include <sys/fcntl.h>
48 #if defined(_CARBON_) || defined(__APPLE__) || LINUX
49 # include <sys/ioctl.h>
53 typedef unsigned int uint;
56 # include <linux/cdrom.h>
93 # define CD_FRAMESIZE 2048
96 #define DISK_CLUSTER_SIZE 61440
98 typedef std::string
String;
119 virtual int GetPos()
const;
122 virtual int Available (uint WordSize = 1);
123 virtual int Read (
void* pData, uint WordCount, uint WordSize);
125 void ReadInt8(uint8_t* pData, uint WordCount);
126 void ReadInt16(uint16_t* pData, uint WordCount);
127 void ReadInt32(uint32_t* pData, uint WordCount);
149 #elif defined _CARBON_ || defined(__APPLE__) || LINUX
307 int Read(
void* pBuffer, uint SampleCount);
603 std::list<AkaiSample*> mpSamples;
627 uint
ListSamples(std::list<AkaiDirEntry>& rSamples);
645 std::list<AkaiProgram*> mpPrograms;
646 std::list<AkaiSample*> mpSamples;
664 uint
ListVolumes(std::list<AkaiDirEntry>& rVolumes);
681 std::list<AkaiVolume*> mpVolumes;
706 std::list<AkaiPartition*> mpPartitions;
709 #define AKAI_FILE_ENTRY_SIZE 24
710 #define AKAI_DIR_ENTRY_OFFSET 0xca
711 #define AKAI_DIR_ENTRY_SIZE 16
712 #define AKAI_ROOT_ENTRY_OFFSET 0x0
714 #define AKAI_PARTITION_END_MARK 0x8000
715 #define AKAI_BLOCK_SIZE 0x2000
717 #define AKAI_FAT_OFFSET 0x70a
719 #define AKAI_MAX_FILE_ENTRIES_S1000 125 //should be 128 ??
720 #define AKAI_MAX_FILE_ENTRIES_S3000 509 // should be 512 ??
721 #define AKAI_MAX_DIR_ENTRIES 100
722 #define AKAI_TYPE_DIR_S1000 1
723 #define AKAI_TYPE_DIR_S3000 3
725 #define AKAI_PROGRAM_ID 1
726 #define AKAI_KEYGROUP_ID 2
727 #define AKAI_SAMPLE_ID 3
uint8_t mMidiProgramNumber
AkaiPartition * GetPartition(uint count)
uint8_t mPressureToFilter
AkaiEnveloppe mEnveloppes[2]
uint8_t mModulationToLFODepth
AkaiDirEntry GetDirEntry()
uint8_t mStereoOutputScale
AkaiDirEntry GetDirEntry()
uint8_t mSampleAuxOutOffset[4]
bool WriteImage(const char *path)
Extract Akai data track and write it into a regular file.
virtual int Available(uint WordSize=1)
uint8_t mVelocityToFilter
void SetOffset(uint Offset)
int8_t mSoftpedToTuneSemitones
Encapsulates one disk partition of an AKAI disk.
int8_t mSoftpedToTuneCents
virtual int SetPos(int Where, akai_stream_whence_t Whence=akai_stream_start)
void swapBytes_32(void *Word)
uint8_t mVoiceOutputScale
virtual uint GetError() const
DiskImage(const char *path)
Open an image from a file.
uint ListPrograms(std::list< AkaiDirEntry > &rPrograms)
uint8_t mEnveloppe2ToFilter
int8_t mKeyToDecayAndRelease
Toplevel AKAI image interpreter.
AkaiVolume * GetVolume(uint Index)
void OpenStream(const char *path)
int8_t mOffVelocityToRelease
int8_t mVelocityToVolumeOffset[4]
int ReadFAT(DiskImage *pDisk, AkaiPartition *pPartition, int block)
AkaiSample * GetSample(uint Index)
int8_t mVelocityToEnveloppe2ToFilter
uint16_t mSamplingFrequency
bool LoadSampleData()
Load sample into RAM.
virtual akai_stream_state_t GetState() const
int Read(void *pBuffer, uint SampleCount)
Use this method and SetPos() if you don't want to load the sample into RAM, thus for disk streaming...
AkaiKeygroupSample mSamples[4]
Accessing AKAI image either from file or a drive (i.e.
uint ListSamples(std::list< AkaiDirEntry > &rSamples)
AkaiDirEntry GetDirEntry()
void AkaiToAscii(char *buffer, int length)
uint ListSamples(std::list< String > &rSamples)
bool mHoldAttackUntilLoop
int16_t mVelocityToSampleStart[4]
bool mSampleKeyTracking[4]
int8_t mVelocityToRelease
AkaiProgram * GetProgram(uint Index)
uint8_t mVelocityToLFODepth
AkaiDiskElement(uint Offset=0)
int8_t mEnveloppe2ToPitch
uint8_t mNumberOfKeygroups
AKAI instrument definition.
int SetPos(int Where, akai_stream_whence_t Whence=akai_stream_start)
Use this method and Read() if you don't want to load the sample into RAM, thus for disk streaming...
bool mVelocityZoneCrossfade
AkaiDisk(DiskImage *pDisk)
void ReleaseSampleData()
release the samples once you used them if you don't want to be bothered to
Subdivision of an AKAI disk partition.
uint32_t mNumberOfSamples
virtual int GetPos() const
uint8_t mPressureToLFODepth
AkaiSample * GetSample(uint Index)
AkaiPartition * GetParent()
virtual int Read(void *pData, uint WordCount, uint WordSize)
Returns number of successfully read words.
AkaiKeygroup * mpKeygroups
bool ReadDirEntry(DiskImage *pDisk, AkaiPartition *pPartition, AkaiDirEntry &rEntry, int block, int pos)
int8_t mKeyTemperament[11]
uint ListVolumes(std::list< AkaiDirEntry > &rVolumes)
void swapBytes_16(void *Word)