PSX STR/ZXA, музыка |
Добро пожаловать, гость ( Вход | Регистрация )
PSX STR/ZXA, музыка |
-=CHE@TER=- |
Jul 30 2008, 10:59
Сообщение
#1
|
Walter Sullivan Группа: Root Admin Сообщений: 1,355 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 311 раз(а) |
Откопал одну старую игру - The Note / Playstation.
Там офигенная музыка, но достать её не могу. На диске есть каталог \ZXA\ с файлами: CODE XA_001.STR XA_002.STR XA_003.STR XA_004.STR XA_005.STR XA_006.STR XA_007.STR Однако, ни один конвертер для PSX их не берёт, потому что это чистый звук, без заголовка (файлы большие - самый мелкий - 9 Мб). Если попытаться проиграть его как RAW PCM в Audition, то через хрип и храп угадывается мелодия. Перепробовал все возможные способы открытия (stereo-mono, 8-16-32 bit, intel-motorola-?law, etc) - как был храп, так и остался. Кто-нибудь знает, чем можно это сконвертировать в .WAV? Что за упаковщик не знаю, но первый файл начинается вот так: CODE &&))&&))**))**)) второй вот так: CODE ((**((**++**++** Остальные - похоже. Кто-нибудь может помочь? |
-=CHE@TER=- |
Aug 3 2009, 19:11
Сообщение
#2
|
Walter Sullivan Группа: Root Admin Сообщений: 1,355 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 311 раз(а) |
Год спустя...
До меня, наконец, дошло что же там такое, после того как ещё одну PSX-игру посмотрел. Оказывается, это .XA файлы, но без заголовка. Нашёл прогу с иходными кодами - cdxa (см. ссылку справа "Tar/GZ"). Попытался декодировать, звук перестал трещать (т.е. декодировался нормально), но почему-то стал заикаться. При увеличении дорожки видно, что между кусками звука торчит пустота. Эксперементы с длинной буфера желаемого результата не принесли. Попытки пропустить пустоту, про которую говорил товарищ Axsis, тоже ничего особо не дало. Кто-нибудь может помочь? После распаковки архива по ссылке выше нужно из каталога /xmms-cdxaaudio/ взять файлы xadecode.c и xadecode.h и использовать их в такой вот тестовой программке: CODE #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include "xadecode.h" int main(void){ FILE *fl, *fw; SoundSector *blk; long sz; char *buf; fl = fopen("XA_004.STR", "rb"); fw = fopen("XA_004.DAR", "wb+"); blk = (SoundSector *)malloc(kNumOfSGs * sizeof(SoundGroup) + 0x18); memset(blk->sectorFiller, 0, 0x18); /* этого заголовка, увы, в файлах нет...*/ buf = (char *)malloc(0xFFFF); do{ fread(blk->SoundGroups, 1, kNumOfSGs * sizeof(SoundGroup), fl); sz = decodeSoundSect1(blk, buf); fwrite(buf, 1, sz, fw); }while(!feof(fl)); free(buf); free(blk); fclose(fw); fclose(fl); return(0); } Заранее спасибо. |
Упрощённая версия | Сейчас: 16th May 2024 - 15:08 |