Найти - Пользователи
Полная версия: работа с gp3 файлами
Начало » Флейм » работа с gp3 файлами
1
niro
Пытаюсь реализовать хотя бы чтение заголовков gp3 (guitar pro) файлов. Но нифига не получается. Формат нигде не описан, но есть окрытые варианты на java. Вот функция, которая по моему мнению добывает из бинарного файла последовательно информацию.
    protected String readStringIntegerPlusOne() throws IOException {
byte[] b;
String str;
int lengthPlusOne;
int length;
int r;
lengthPlusOne = readInt(); // reads the expected length + 1
length = lengthPlusOne - 1; // computes the real length
if (lengthPlusOne > 0) {
// reads the real length (as a byte)
r = read();
if (length != r) {
throw new IOException("Wrong string length: should have been "
+ length);
}
b = new byte[length];
read(b);
str = new String(b);
} else {
r = read();
str = "";
}
return str;
}
К ней обращаются так
       // Title
s = readStringIntegerPlusOne();
piece.setTitle(s);

// Subtitle
s = readStringIntegerPlusOne();
piece.setSubtitle(s);

// Interpret
s = readStringIntegerPlusOne();
piece.setInterpret(s);

// Album
s = readStringIntegerPlusOne();
piece.setAlbum(s);

// Author of the song
s = readStringIntegerPlusOne();
piece.setAuthorSong(s);
...
Как будет выглядеть функция на питоне ? Спасибо.
tabajara
lengthPlusOne = readInt(); // зчитує 4 байти
if (lengthPlusOne > 0) // дивиться чи не дорівнює lengthPlusOne нулю
r = read(); // зчитує якусь кількість байт r - число
if (length != r) {                      // якщо кількість байт в файлі не дорівнює lengthPlusOne - 1 то файл поганий
                Error("Wrong string length: should have been "
                        + length);
}
} else {                       // якщо lengthPlusOne == 0  - функція повертає пусту стрічку
            r = read();
            str = "";
}
return str
Ця функція наскільки я розумію дивиться чи файл не є пошкодженим - перевіряє довжину файлу записану в загаловку з реальною довжиною і повертає весь файл як стрічку. На пітоні переписати не вийде - треба знати що роблять ф-ції readInt() і read(). Мені здається що файл парситься якраз в ф-ції read().
tabajara
piece.setTitle(s); piece.setSubtitle(s);piece.setAlbum(s);
додають до зчитаної стрічки якісь свої дані і записують ту стрічку в файл
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB