Hi Pedro,
I found a Cakewalk wrk to midi converter program put
out by cakewalk themselves that handles cakewalk
version 1 or 2 (can't remember which) files.
Unfortunately all my files are version 3. It worked on
some of them though.
Let me know if you want a copy. Maybe you can look at
the program to get some hints.
Kev
--- Pedro Lopez-Cabanillas <plcl(a)telefonica.net>
wrote:
Hi,
I've posted the following message in
Rosegarden-devel mailing list, and
Michael pointed me to an old thread from you about
the same subject:
Attached is a little program summarizing what I have
found about the file
format at this moment. I would like to know if you
have more information,
ideas or want to collaborate in this task.
Regards,
Pedro
On Sunday 29 August 2004 01:50, Pedro
Lopez-Cabanillas wrote:
Hi,
I have many old songs, stored as Cakewalk "WRK"
files, and I don't
use
Cakewalk or Sonar anymore. I'm not planning
to do
so in the future, 'cause
I'm sure I will use Rosegarden. Of course.
So, I need to convert my old WRK files to
Rosegarden. But the WRK file is a
closed format, and not publicly documented. It
will be necessary to reverse
engineer it, to rescue my old loved melodies
along
with the pile of shit.
My plan is to first write a 'cake2rg' standalone
utility, to start
learning
the file format and meanwhile to produce some
practical results. After
that, I hope to be able to import the files
directly into Rosegarden. This
won't happen before 1.0-final.
If somebody had the same idea and has the work
almost finished, please let
me know ;-). Let's avoid duplicated work.
Comments, please.
Regards,
Pedro
/*
* Cakewalk (WRK) file format test
*
* Copyright (c) 2004 Pedro Lopez-Cabanillas All
rights reserved.
*
* This program is free software; you can
redistribute it and/or modify
* it under the terms of the GNU General Public
License as published by
* the Free Software Foundation; either version 2 of
the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it
will be useful,
* but WITHOUT ANY WARRANTY; without even the implied
warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General
Public License
* along with this program; if not, write to the Free
Software
* Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *file;
char *buffer;
char *HEADER = "CAKEWALK";
int vma, vme;
#define BUFSIZE 1024
#define TRACK_CHUNK 1
#define STREAM_CHUNK 2
#define VARS_CHUNK 3
#define METER_CHUNK 4
#define TEMPO_CHUNK 5
#define SYSEX_CHUNK 6
#define MEMRGN_CHUNK 7 // ???
#define TIMEBASE_CHUNK 0x0A // if present should be
the first chunk in the file.
#define END_CHUNK 0xff
void readBuffer(long count)
{
if (count > BUFSIZE)
fseek(file, count, SEEK_CUR);
else
fread(buffer, count, 1, file);
}
void readFileVersion()
{
fgetc(file);
vme = fgetc(file);
vma = fgetc(file);
}
int readChunk()
{
int len;
int ck = fgetc(file);
if (ck != END_CHUNK) {
fread(&len, sizeof(len), 1, file); // not portable
readBuffer(len);
}
printf(" %02x", ck);
return ck;
}
void cakeTest(char *fileName)
{
int ck_id;
printf("File: %s\n", fileName);
file = fopen(fileName, "r");
if (!file) {
printf(" Error reading the file\n");
} else {
readBuffer(strlen(HEADER));
if (strcmp(buffer, HEADER)) {
printf(" Bad file format\n");
} else {
readFileVersion();
printf(" file version: %d.%d\n", vma, vme);
printf(" file chunks:");
do
ck_id = readChunk();
while (ck_id != END_CHUNK);
fgetc(file);
printf("\n");
if (!feof(file)) {
printf(" Corrupted file\n");
}
}
fclose(file);
}
}
int main(int argc, char *argv[])
{
int i;
buffer = malloc(BUFSIZE);
for (i = 1; i < argc; i++)
cakeTest(argv[i]);
return EXIT_SUCCESS;
}
___________________________________________________________ALL-NEW Yahoo! Messenger - all
new features - even more fun!