[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Форум » Моддинг » 6.1. Остальные уроки » Инструкция: Как изменять музыку в Worms 4 (Инструкция от Woitek'а, перевод Firsacho)
Инструкция: Как изменять музыку в Worms 4
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Чтобы изменить Музыку в Worms 4, необходимо знать в каком файле находится музыкальная тема.
Она хранится в mufronte.sab и вспомогательном файле mufronte.sob , которые можно найти в директории:
WORMS 4 MAYHEM\data\Audio\WXSoundBanks\PC\

Но для начала надо узнать как устроен Sab-файл.

Смотрим на рисунок выше.
1 - Здесь указан формат. Если стоит 06 - это музыкальный формат, если 02 - звуковой.
2 - Коррекция звука. 03 - лучшее значение.
3 - Скорость проигрывание. Если число меньше - то скорость больше, если больше - то меньше... 00 00 00 7D - дефолтная скорость.
4 - Время звучания, если в пункте 1 был указан тип "Музыка" (06), если указан тип "Звук", не используется.
5 - Время звучания, если в пункте 1 был указан тип "Звук" (02), если указан тип "Музыка", не используется.
Максимальное время звучания: 4:25 (FF в 16й СС = 255 в 10й, 255/60=4,25)
6 - Повтор. Если 01 - повтор выключен, если 00 - включен.

Теперь, если вы поняли как устроен Sab, можете попробовать импортировать свою музыку.
Для этого ее надо конвертировать в .wav PCM Signed 16bit, стерео RateHz 16000 .

На картинке показано как это сделать, при помощи программы GoldWave.


1 - Add Files - открывает ваш файл, который вы хотите конвертировать.
2 - Во вкладке Folder указать папку, в которую сохраниться конвертированный файл.
3 - Выставите настройки звука как в красной рамке.

Посмотрите какое время в секундах имеет ваша музыка. Прибавьте к этому времени несколько секунд, чтобы при зацикленном проигрывании после музыки было несколько секунд паузы.
В примере музыка имеет время проигрывания 3:41, так что 3*60+41 = 221, при переводе в данное число в шестнадцатеричную систему счисления получится DD.

Чтобы переводить числа в 16ю СС проще всего воспользоваться Windows калькулятором. Включите Вид-Инженерный, введите число в 10й СС, потом выберите вид-Шестнадцатеричный и число автоматом переведется в новый формат =) (прим. пер.)

Теперь надо запустить Шестнадцатеричный редактор (Я использую HxD) и переместить wav в него wav.
Ниже на картинке выведен 16й код wav-файла:

Если проделали все как на картинке выше, осталось изменить время звучания и сохранить, как mufronte.sab

Конечный файл должен выглядеть как на картинке ниже: =)

Ссылка на sab-файл: http://www.sendspace.com/file/i84ath
Ссылка на музыку (из видео): http://www.sendspace.com/file/qjlfrv




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
нашел ошибку: в проге при конвертировании смешается на байт каждый 5120 байт, из за ошибки в цикле
щас выложу исправленную версию

UPD:
вот прикрепляю файл

погрешность определения время воспроизведения +/- 3 секунды

Сейчас звук должен быть чистым как стеклышко)

Прикрепления: export.zip (384.1 Kb)


:3
 
Проверенные
Сообщений: 2848
Реп: 60 / Инв: 6
Lex-Serest, все, теперь работает) звук такой же как от созданного вручную biggrin



-------------------------------------------------------------
And when the sun is shining, there is justice for all...
And all the people will remember that funny "war".
War, which was so dark in the beginning and so shiny in the end.
But now it's over. Over for all.
-------------------------------------------------------------
Я сюда захожу только из-за Game Project. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
rocketvadim, я знаю)))
теперь надо придумать как можно в проге конвертировать из мп3 в wav
и как можно конвертировать из sab в wav


:3
 
Проверенные
Сообщений: 2848
Реп: 60 / Инв: 6
Lex-Serest, да, и пусть при завершении он в окне пишет не "194", а "Готово" или "File converted" или что-то типо того.



-------------------------------------------------------------
And when the sun is shining, there is justice for all...
And all the people will remember that funny "war".
War, which was so dark in the beginning and so shiny in the end.
But now it's over. Over for all.
-------------------------------------------------------------
Я сюда захожу только из-за Game Project. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
rocketvadim,
Quote (Lex-Serest)
З.Ы. не обращайте внимание на сообщение после конвертации, это я тестил прогу и забыл это удалить, а пересобирать мне уже лень

я это и хотел сделать)


:3
 
Проверенные
Сообщений: 2848
Реп: 60 / Инв: 6
Quote (Lex-Serest)
З.Ы. не обращайте внимание на сообщение после конвертации, это я тестил прогу и забыл это удалить, а пересобирать мне уже лень

это где ты писал? о_О




-------------------------------------------------------------
And when the sun is shining, there is justice for all...
And all the people will remember that funny "war".
War, which was so dark in the beginning and so shiny in the end.
But now it's over. Over for all.
-------------------------------------------------------------
Я сюда захожу только из-за Game Project. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
rocketvadim, я уже удалил, так как перезалил

:3
 
Проверенные
Сообщений: 2848
Реп: 60 / Инв: 6
Lex-Serest, аа, ясн))



-------------------------------------------------------------
And when the sun is shining, there is justice for all...
And all the people will remember that funny "war".
War, which was so dark in the beginning and so shiny in the end.
But now it's over. Over for all.
-------------------------------------------------------------
Я сюда захожу только из-за Game Project. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
 
Unaited
Админы
Сообщений: 1463
Реп: 92 / Инв: 13
а зачем конвертер mp3 и wav?

 
Проверенные
Сообщений: 2848
Реп: 60 / Инв: 6
Unaited_Ru, чтобы удобнее было, т.к. большинство музыки у людей в mp3.



-------------------------------------------------------------
And when the sun is shining, there is justice for all...
And all the people will remember that funny "war".
War, which was so dark in the beginning and so shiny in the end.
But now it's over. Over for all.
-------------------------------------------------------------
Я сюда захожу только из-за Game Project. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
я нашел способ конвертации из sab в wav, когда заплачу за инет, выложу

:3
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
Воитек ошибся по фрейду, он ошибся в "1 - Здесь указан формат. Если стоит 06 - это музыкальный формат, если 02 - звуковой.", и где располагается длина проигрывания

Так же я почти разобрал файл *.sob


:3
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
ыыы решил дописать конвертор, поэтому решил декомпелировать прогу от k^2 для экспорта и импорта
ыыыы надо было еще изучать ассемблер


:3
 
^_[RUSS]SPORE[PRO]_^
Проверенные
Сообщений: 3
Реп: 0
сяп помогли :D :D :D
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Так как я добавил в новый XomView проигрывание sob /sab звуков, то могу сказать со 100% уверенностью урок данный можно выкинуть в топку, он не верен на корню!!!
например числа в уроке:

00 7D 00 00 = (freq) - частота 32000Hz
00 3F DD 00 = (size) - размер 14 499 584 байт

В общем структура sob файла такая:
Код

    TSOB_HEADER = packed record
          id : array[0..3] of char; //   CTF2
          ver: array[0..3] of byte; //01 00 00 02
          numsamples: Longword;
          unknown: Longword;
          end;

    TSOB_SAMPLE = packed record
          id : array[0..3] of byte;// 01 01 00 00
          FF : Longword; // ffffffff
          zeros: array[0..5] of Longword;
          items: longword; //01
          dummy: array[0..1] of Longword;
          end;

а sab файла следующая:
Код

   TSAB_HEADER = packed record
          id : array[0..3] of char; //   CSW2
          ver: array[0..3] of byte; //01 00 00 02
          numsamples: Longword;
          unknown: Longword;
          offset: Longword;
          nSlotNumber: Longword;
          end;

    TSAB_SAMPLE = packed record
          is_file: Longword;
          chan: Longword;
          freq: Longword;
          size: Longword;
          loopstart: Longword;
          loopend: Longword;
          offset: Longword;
          end;


Сам процесс считывания sob информации идет так:
Код

   SOB.LoadFromFile(filename);

    SOB.ReadBuffer(sobh,sizeof(sobh));
    num:=sobh.numsamples;
    SOBChunks.Count:=num;

     for i := 0 to  num-1 do begin
         SOB.ReadBuffer(sobs,sizeof(sobs));   

         if sobs.FF<>$ffffffff then begin
          Showmessage(format('Error reading SOB stream[%d] 0x%x',[i,SOB.Position]));
          goto closep;
          end;
         if (sobs.id[0]and 1)>0 then SOB.Seek(64,1);
         case sobs.id[0] of
         0,1,5: AddSoundItem;     //     101B
         8,9: AddSequeenceItem;   //    1001B
         32:  AddInterleavedItem; //  100000B
         65:  AddMatrixItem;      // 1000001B
         end;

     end;

     // читаем названия
     for i := 0 to  num-1 do begin
       SOB.ReadBuffer(id,4);
       SOB.ReadBuffer(namesize,4);
       FillChar(cname,255,0);
       SOB.ReadBuffer(cname,namesize);
       SOBChunks[i].Name:=cname;      
     end;


В зависимости от типа меняется длинная считываемого контейнера, краткое описание функций считывания:

Код


    procedure AddSoundItem();
    var
    k:integer;
    begin
       Node.Text:='soundItem';
       for k:=1 to sobs.items do begin
            INode:=Tree.Items.AddChild(Node,'entryItem');         
            SOB.Read(val,4); // index;
            AddReadVal(INode,'sampleBankIndex');
            AddReadVal(INode,'sampleObjectIndex');
            SOB.Seek(4*4,1);
          //  AddReadVal(INode,'level');
          //  AddReadVal(INode,'cents');
         //   AddReadVal(INode,'randomCents');
         //   AddReadVal(INode,'randomLevel');
            end;
    end;

    procedure AddSequeenceItem();
    var
    k:integer;
    begin
       Node.Text:='sequenceItem';
       for k:=1 to sobs.items do begin
            INode:=Tree.Items.AddChild(Node,'trackItem');
            SOB.Read(val,4); // index;
            AddReadVal(INode,'soundBank');
            AddReadVal(INode,'soundName');
            AddReadValf(INode,'time');
            end;
    end;

    procedure AddMatrixItem();
    var
    k:integer;
    begin
       Node.Text:='matrixItem';
       SOB.Seek(32,1); // matrixItem 2(matrixItem)
       for k:=1 to sobs.items do begin
            INode:=Tree.Items.AddChild(Node,'matrixItem');
            AddReadVal(INode,'sampleBankIndex');
            AddReadVal(INode,'sampleObjectIndex');
            SOB.Seek(4*2,1);
            end;
    end;

    procedure AddInterleavedItem();
    var
    k:integer;
    begin
       Node.Text:='interleavedItem';
       for k:=1 to sobs.items do begin
            INode:=Tree.Items.AddChild(Node,'sampleItem');
            AddReadVal(INode,'sampleBankIndex');
            AddReadVal(INode,'sampleObjectIndex');
            SOB.Seek(4*2,1);
            end;
    end;


Для sab файла:
Код

      SAB.LoadFromFile(filename);
      SAB.ReadBuffer(sabh,sizeof(sabh));
      num:=sabh.numsamples;
      baseoffset:=sizeof(sabh)+sizeof(sabs)*num;
      SABChunks.Count:=num;
      for i := 0 to  num-1 do begin    
          SAB.ReadBuffer(sabs,sizeof(sabs));
          oldpos:=SAB.Position;
          SAB.Position:=baseoffset+sabs.offset;
          // выделяем место в памяти под wav дату и копируем туда инфу
          SAB.ReadBuffer(p^,Size);
          SAB.Position:=oldpos;
          end;
     end;


P.S. может данная инфа будет кому полезна =)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
А вот музыку все таки проиграть у меня не получилось... там странная система кодирования каналов... все звуки отлично играются, а музыка с глюками...

 
Woitek
Проверенные
Сообщений: 523
Реп: 57 / Инв: 11
Heh =). Now smarter than 2years ago :P. Good work.
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
В общем попытался анализировать музыку и нашел взаимосвязь.. в sab файле каналы чередуются через определенное количество байт, которое я еще не смог вычислить...
Вот картинка волн, на ней оригинальная музыка со стерео дорожками и дорожка взятая из файла sab как моно канал, как видно тут идут блоки левый канал, правый канал...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Раскодировал!!! В общем в TSAB_HEADER неизвестное значение это SampleAlign т.е. длинна семпла одного канала
Код
TSAB_HEADER = packed record    
             id : array[0..3] of char; //   CSW2    
             ver: array[0..3] of byte; //01 00 00 02    
             numsamples: Longword;    
             aSampleAlign: Longword;    
             offset: Longword;    
             nSlotNumber: Longword;    
             end;    

Теперь все работает!!!

ссылка на XomView

При импорте стереомузыки нужно менять это значение на ту длину семплов на канал, который у вас в аудиофайле!!!!


 
53454546
Проверенные
Сообщений: 44
Реп: 0
Why do not you unused?

Sample voclassi.sab is unused (preview wormsx.cpf)

  • captured
  • flawless
  • jump1
  • kamikaze
:( Missing!
 
Форум » Моддинг » 6.1. Остальные уроки » Инструкция: Как изменять музыку в Worms 4 (Инструкция от Woitek'а, перевод Firsacho)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: