Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Июль 1, 2007 17:02:20

niro
От:
Зарегистрирован: 2006-10-04
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с gp3 файлами

Пытаюсь реализовать хотя бы чтение заголовков 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);
...
Как будет выглядеть функция на питоне ? Спасибо.



Офлайн

#2 Июль 1, 2007 17:28:15

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с gp3 файлами

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().



Отредактировано (Июль 1, 2007 17:39:41)

Офлайн

#3 Июль 1, 2007 17:42:12

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с gp3 файлами

piece.setTitle(s); piece.setSubtitle(s);piece.setAlbum(s);
додають до зчитаної стрічки якісь свої дані і записують ту стрічку в файл



Отредактировано (Июль 1, 2007 17:42:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version