Avkoda / knäcka gammalt ljudformat

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Krillo
Inlägg: 40
Blev medlem: 16 februari 2014, 11:04:22

Avkoda / knäcka gammalt ljudformat

Inlägg av Krillo »

Jag är moderator på ett forum för ddrum eltrummor. Där har diskuterats möjligheten att knäcka Clavias gamla ljudformat för deras ddrum4 modul. Clavia är ett svenskt företag och de sålde rättigheterna till ddrum namnet för ett antal år sedan till amerikanska Armadillo. De tillverkar skitdåliga akustiska trummor samt importerar elektroniska skräptrummor (samma som säljs under namnet Medeli) från Kina. Så varken Clavia eller Armadillo har koll på detta längre, och bryr sig inte heller. Vi är flera stycken som har mailat dem och även en av snubbarna som jobbade med detta på den tiden.
Själv kan jag inte så mycket om sånt här, men tänker att det säkert finns någon här som skulle kunna klura ut det hela. Tveksamt om det finns speciellt mycket pengar i det hela, men om någon skulle lyckas, skulle denna kunna göra ett program för att göra egna sådana filer, och det vet jag folk skulle betala för.

Om det finns intresse så svara gärna i denna tråd :)
Nerre
Inlägg: 27148
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av Nerre »

Har du ett exempel på en ljudfil?

Trumljud är väl rätt korta så det borde vara rätt små filer?

Sen kanske schema på en eltrumma skulle ge ledtrådar, t.ex. se vad för D/A-omvandlare som används, om det kanske är flera "kanaler" etc.
Användarvisningsbild
pbgp
Inlägg: 1450
Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av pbgp »

Det kan ju vara ett roligt projekt. Börja med att beskriva vad ni kommit fram till hitintills.

Edit: Hittade manualen: http://www.clavia.se/ddrum/Files/ddrum4 ... manual.pdf

och där står:
7. SOUND FORMATS AND MIDI
The sounds in the ddrum4 SE reside in a memory that is technically called a Flash ROM. This means
that besides storing sounds, you can delete sounds that you do not want and replace them with new ones.
The Flash ROM also retains its content when the power is switched off. You can load sounds into the
ddrum4 SE module via MIDI in two different formats, the ddrum4 format and the MIDI SDS (Sample
Dump Standard) format. Sounds in the ddrum4 format can be accessed from the Clavia web site, free of
charge. Point your browser to http://www.clavia.se/ for more information.

DDRUM4 SOUNDS

A ddrum4 sound contains one or more samples that have been converted to a proprietary format. It has
been carefully edited by the Clavia crew and finally compressed (by a factor 3-6 times). The compression
technology allows for the sounds to take up less memory so that we can put more of them into the
ddrum4 SE. Each ddrum4 sound has a unique name, which assigns it to the appropriate sound group.
The sound numbers do not have to be consecutive. A ddrum4 sound can also contain a couple of varia-
tions, which are different sets of functions that affect the sound and how it behaves when played back.
These special functions/parameters cannot be edited by the user. One type of variation function would
be the crossfade information for multi samples or dynamic filter settings.
Det låter som det egna formatet är lite mer avancerat än bara en sampling. Det här kan nog vara svårt utan ytterligare dokumentation.
Senast redigerad av pbgp 5 juni 2014, 13:08:31, redigerad totalt 1 gång.
Krillo
Inlägg: 40
Blev medlem: 16 februari 2014, 11:04:22

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av Krillo »

Är nu på jobbet :D så jag har bara dessa länkar som är hela bibliotek med samples http://www.4shared.com/file/x4bHUwUL/Me ... brary.html De är midi-sysex filer då de överförs med mididump. En fil kan innehålla upp till 10 stycken samples, alltså olika ljud, beroende på hur hårt man slår. Filen innehåller även settings med två uppsättningar filter, det finns även loop-funktionalitet och pitch-bend etc. Processorn i dessa moduler är Motorola 68k, och dessa filer gjordes även på gamla Mac-datorer som har samma processor. Vet ej om det spelar roll. Settings och filter inställningar är relativt knäckta redan av en snubbe som heter Bill Piland, här finns dokumentation av hans arbete: http://home.comcast.net/~bill.piland/si ... a021d73f28

Kan väl tillägga att formatet alltså komprimerar audiodata upp till 8x har jag för mig. Det är dock inte FFT eller liknande, jag gissar att det är ren datakomprimering, efter som datorerna på den tiden inte hade speciellt mycket kapacitet till avancerade codecs.

Han som jobbade med filformatet när det begav sig, svarade mig så här:
The file has INSTRUMENT_FILE_BLOCK and x number of SAMPLE_FILE_BLOCK.
Then all is packed from 8 to 7 bit into MIDI sysex.
Han bifogade också följade i en txt-fil:

Kod: Markera allt

/***************************************************************/
#define FILE_NAME_SIZE	31

#define MAX_VARIATION	10
#define MAX_PARBLOCK	10
#define MAX_SAMPLE	10
#define MAX_FREQPOINTS	8


/***************************************************************/
typedef struct{		// size = 20
	SBYTE	mParBlockFlag[MAX_PARBLOCK];
	SBYTE	mRandomFlag[MAX_PARBLOCK];
}VARIATION;

typedef struct{		// size = 24
	UWORD	mStartBlock;
	UWORD	mBlockCount;
	UWORD	mLoopBlockCount;
	UBYTE	mFreqPoint[MAX_FREQPOINTS];
	UBYTE	mFreqPointUsed;
	UBYTE	mFiller[5];
	
	void	*mFileMapEntry;				// initialized at channel update
}DD4_SAMPLE;

typedef struct{		// not in instrument
	UBYTE	mGainVel[32];
	UBYTE	mGainPos[8];
	
	UWORD	mOutSelect;
	UWORD	mOutGain1;
	UWORD	mOutGain2;
	UWORD	mOutGain3;
	UWORD	mOutGain4;
	UWORD	mGain;
	UWORD	mGainOffset;
	SWORD	mGainPedal;
	
	SLONG	*mF1TabPtr;
	SLONG	*mF2TabPtr;
	
	SWORD	mF1Freq;
	SWORD	mF1FreqVel;
	SWORD	mF1Gain;
	SWORD	mF1GainVel;
	SWORD	mF1GainDecay;
	
	SWORD	mF2Freq;
	SWORD	mF2Gain;
	SWORD	mF2Q;
	SWORD	mF2FreqJump;
	SWORD	mF2FreqDva;
	
	SWORD	mPitchRes;
	SWORD	mPitchPress;			// was mPitchPressure
	SWORD	mPitchEnvAmt;
	SLONG	mPitchEnvDecay;
	SWORD	mPitchEnvAmtVel;
	SWORD	mPitchEnvAmtDva;
	
	SWORD	mAmpEnvDecayRes;
	SWORD	mAmpEnvDecayVel;
	SWORD	mAmpEnvDecayPress;		// was mDecayPressure
	SWORD	mAmpEnvDecayPedal;
	SWORD	mAmpEnvAttack;
	SWORD	mAmpEnvAttackVel;
	
	DD4_SAMPLE *mSample;
}PB_EXTRA;

typedef struct{		// size = 50
	// Sample select
	SBYTE	mSampleNr;
	
	// Miscellaneous
	SBYTE	mF2FreqDva;
	SBYTE	mDiverse;
	SBYTE	mAmpEnvDecayPedal;
	
	// Gain Scaling
	UBYTE	mGainVel[8];
	UBYTE	mGainPos[8];
	
	// Pitch
	SBYTE	mPitch;
	SBYTE	mPitchFine;
	SBYTE	mPitchPress;			// was mPitchPressure
	SBYTE	mPitchPanel;
	SBYTE	mPitchEnvDecay;
	SBYTE	mPitchEnvAmt;
	SBYTE	mPitchEnvAmtVel;
	SBYTE	mPitchEnvAmtDva;		// Drumhead Vibration Algorythm
	
	// Amp
	SBYTE	mAmp;
	SBYTE	mAmpVelCurve;
	SBYTE	mAmpEnvAttack;
	SBYTE	mAmpEnvAttackVel;
	SBYTE	mAmpEnvDecay;
	SBYTE	mAmpEnvDecayVel;
	SBYTE	mAmpEnvDecayPress;		// was mDecayPressure
	SBYTE	mAmpEnvDecayPanel;
	
	// Filter1
	SBYTE	mF1Freq;
	SBYTE	mF1FreqVel;
	SBYTE	mF1Gain;
	SBYTE	mF1GainVel;
	SBYTE	mF1Q;
	SBYTE	mF1GainDecay;
	
	// Filter2
	SBYTE	mF2Freq;
	SBYTE	mF2Gain;
	SBYTE	mF2Q;
	SBYTE	mF2FreqJump;
	
	PB_EXTRA *mPBExtraPtr;				// initialized at channel update
}PARBLOCK;


/***************************************************************/
typedef struct{		// size = 960 (must be 960)
	UBYTE		mVersion;
	UBYTE		mClass;
	UBYTE		mFiller[18];
	VARIATION	mVariation[MAX_VARIATION];	// size = 20*10 = 200, offs =  20
	PARBLOCK	mParBlock[MAX_PARBLOCK];	// size = 50*10 = 500, offs = 220
	DD4_SAMPLE	mSample[MAX_SAMPLE];		// size = 24*10 = 240, offs = 720
}INSTRUMENT;


typedef struct{		// size = 60 (must be 60)
	char	mFileName[FILE_NAME_SIZE + 1];
	ULONG	mFileType;
	ULONG	mFileSize;
	ULONG	mFileDate;
	UWORD	mBlockCount;				// Including block containing file header
	UBYTE	mReserved[14];
}FILE_HEADER;


/***************************************************************/
typedef struct{		// size = 1020 (must be 1020)
	FILE_HEADER		mFileInfo;
	INSTRUMENT		mFileInstrument;
}INSTRUMENT_FILE_BLOCK;


/***************************************************************/
#define C_PREOVERLAP_SIZE 2
#define C_DATA_SIZE 880
#define C_OVERLAP_SIZE 44
#define C_POSTOVERLAP_SIZE 2
#define C_OVERRUN_START (C_PREOVERLAP_SIZE+C_DATA_SIZE)
#define C_TOTDATA_SIZE (C_PREOVERLAP_SIZE+C_DATA_SIZE+C_OVERLAP_SIZE+C_POSTOVERLAP_SIZE)

typedef struct{		// size = 1020 (must be 1020)
	SBYTE	mData8bit[C_TOTDATA_SIZE];
	SWORD	mData16bit[C_OVERLAP_SIZE];
	SBYTE	mRateIdx;
	SBYTE	mExponentIdx;
	SBYTE	mEmphasis;
	SBYTE	mFiller;
}SAMPLE_FILE_BLOCK;

Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Glenn
Inlägg: 36184
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av Glenn »

Skulle man börja profitera på det där skulle säkerligen den som äger grejerna skicka en fet stämmning.

Anledningen att jag skrev det är för att du skrev det sista, om nån däremot knäcker det och släpper fritt så lär det bli mindre problem, även om det kan strula till sej där med.

..Jag har förut dragit exemplet på min hårdvara som jag saknade manual till, och det svenska företaget som ahde gjort den var HELT ointresserade av att hjälpa mej och sa att dom inte hade några manualer kvar osv.. varvid jag genom lite luskande på forum hittar en kille som har samma hårdvasra, och manualen, så jag scannar hela manualen som en snygg PDF och sen glr jag det dumma, jag mailar företaget och frågar om dom vill ha den för att lägga ut på deras websida eller maila till folk som frågar, till svar får jag en RIKTIGT elak utskällning att jag ABSOLUT inte får scanna nån manual, och att dom tänker vidtaga rättsliga åtgärder om jag gör det blablabla.. ..vilket kändes lite märkligt när dom precis innan var helt ointresserade av produkten.
Användarvisningsbild
pbgp
Inlägg: 1450
Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av pbgp »

Filformatet verkar ganska väl kartlagt av Bill. Så det borde gå att få ut den komprimerade samplingen utan några större omsvep. Men att lista ut hur det funkar... ptja.. hade man en okomprimerad version av någon samling så kanske. Och om man var lite mer erfaren vad det gäller komprimeringsrutiner så.

Kanske skulle det vara lättare att försöka skruva upp en maskin och se om det finns några ROM:ar man kan dumpa och hitta en rutin för avkodning i. Men det börjar gå långt över mina förmågor.
Krillo
Inlägg: 40
Blev medlem: 16 februari 2014, 11:04:22

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av Krillo »

Här är en länk till ett program som nissen som gav mig infon har gjort: http://www.mediafire.com/download/glijz ... um4wav.exe

Detta program extraherar de individuella samplingarna från dd4-formatet. Kanske man kan kika på hur programmet är gjort för att kunna "stoppa in filer i formatet". Vad vet jag :humm:
Josasp
Inlägg: 404
Blev medlem: 8 mars 2009, 16:59:47
Ort: Pattaya, Thailand

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av Josasp »

Som vanligt på internet, man får göra det gratis och släppa under något nickname.
Då orkar ingen leta reda på den skyldige om de inte bryr sig enormt mycket.
Findecanor
Inlägg: 1037
Blev medlem: 2 juli 2010, 23:04:07

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av Findecanor »

Krillo skrev:Processorn i dessa moduler är Motorola 68k, och dessa filer gjordes även på gamla Mac-datorer som har samma processor. Vet ej om det spelar roll.
Det enda det säger mig att datat troligen är big-endian.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av blueint »

Öppna maskinen läs av ROM-PROM-EPROM-EEPROM etc. Använd disassembler mm.
Krillo
Inlägg: 40
Blev medlem: 16 februari 2014, 11:04:22

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av Krillo »

Nån som har i sin ägo pryttlar att läsa av eprom? Kretsen har jag.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av blueint »

Beteckning? Kapsel? Landsända?
Krillo
Inlägg: 40
Blev medlem: 16 februari 2014, 11:04:22

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av Krillo »

Jag får rycka bort ettiketten å kolla. De äldre modulerna hade två eprom, märkta H och L (hi low), men jag tror det bara är ett i denna. Länge sen jag kollade. Stockholm.
mounte
Inlägg: 209
Blev medlem: 14 november 2010, 13:15:00
Ort: Sandviken

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av mounte »

Vore intressant att kika på ett paket med enbart komprimerad sample, kan du skicka/ladda upp så kikar jag gärna.
Jag skulle gissa på att komprimeringen är någon form av LZ / LZW och/eller Huffman (entropi-baserad kodning) då det går relativt kvickt att dekomprimera.
T.ex så andvänder zlib dessa http://www.zlib.net/feldspar.html
Sen finns golomb-coding, har lite sämre pejl på hur utbrett det är...

Kan ju finnas något dsp-chip som sköter avkodning etc...
(dessa är nya ... men någon form kan ju finnas...)
http://www.digikey.com/en/articles/tech ... ontrollers
http://www.ti.com/lit/an/slaa361/slaa361.pdf

mer data:
http://www.hydrogenaud.io/forums/index. ... 0&p=713942&
http://wiki.hydrogenaud.io/index.php?ti ... comparison
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Avkoda / knäcka gammalt ljudformat

Inlägg av blueint »

krillo skrev:dessa filer gjordes även på gamla Mac-datorer som har samma processor.
Då bör det finnas ett program som kan disassembleras för att få fram funktionen. Man skulle t.om kunna göra C-kod av assemblern så har man något att köra direkt.
Skriv svar