W4Tweaks
Меню сайта

Вход


Последние файлы

Последние темы

Поиск

Мини-чат
 
500

Статистика
Онлайн:
Сегодня заходили: 4erveR, Unaited, лова

Друзья сайта

Если вы хотите увидеть в этом спиcке свой сайт загляните сюда

Наш баннер


·  Регистрация Вход
[ Новые сообщения · Участники · Подписки · Поиск · RSS ]
Страница 2 из 3«123»
Форум » Worms 4 Mayhem » 0.1. Остальные уроки » Инструкция: Как изменять музыку в Worms 4 (Инструкция от Woitek'а, перевод Firsacho)
Инструкция: Как изменять музыку в Worms 4
firsacho
Дата: ПН, 24.01.2011, 11:26:07 | Сообщение # 1
firsacho
ICQ = 453-163-541
Группа: Админы
Сообщений: 3715
Репутация: 76
Инвентарь: 15
Статус: Offline
Чтобы изменить Музыку в 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
Дата: ВС, 30.01.2011, 17:04:40 | Сообщение # 21
Lex-Serest
Onecake-man
Группа: Админы
Сообщений: 825
Репутация: 83
Инвентарь: 14
Статус: Offline
нашел ошибку: в проге при конвертировании смешается на байт каждый 5120 байт, из за ошибки в цикле
щас выложу исправленную версию

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

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

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

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


:3
 
Rorschach
Дата: ВС, 30.01.2011, 17:23:07 | Сообщение # 22
Легендарный червь
Группа: Проверенные
Сообщений: 2848
Репутация: 60
Инвентарь: 6
Статус: Offline
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
Дата: ВС, 30.01.2011, 17:28:40 | Сообщение # 23
Lex-Serest
Onecake-man
Группа: Админы
Сообщений: 825
Репутация: 83
Инвентарь: 14
Статус: Offline
rocketvadim, я знаю)))
теперь надо придумать как можно в проге конвертировать из мп3 в wav
и как можно конвертировать из sab в wav


:3
 
Rorschach
Дата: ВС, 30.01.2011, 17:31:08 | Сообщение # 24
Легендарный червь
Группа: Проверенные
Сообщений: 2848
Репутация: 60
Инвентарь: 6
Статус: Offline
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
Дата: ВС, 30.01.2011, 17:33:20 | Сообщение # 25
Lex-Serest
Onecake-man
Группа: Админы
Сообщений: 825
Репутация: 83
Инвентарь: 14
Статус: Offline
rocketvadim,
Quote (Lex-Serest)
З.Ы. не обращайте внимание на сообщение после конвертации, это я тестил прогу и забыл это удалить, а пересобирать мне уже лень

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


:3
 
Rorschach
Дата: ВС, 30.01.2011, 17:37:59 | Сообщение # 26
Легендарный червь
Группа: Проверенные
Сообщений: 2848
Репутация: 60
Инвентарь: 6
Статус: Offline
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
Дата: ВС, 30.01.2011, 17:42:30 | Сообщение # 27
Lex-Serest
Onecake-man
Группа: Админы
Сообщений: 825
Репутация: 83
Инвентарь: 14
Статус: Offline
rocketvadim, я уже удалил, так как перезалил

:3
 
Rorschach
Дата: ВС, 30.01.2011, 18:00:59 | Сообщение # 28
Легендарный червь
Группа: Проверенные
Сообщений: 2848
Репутация: 60
Инвентарь: 6
Статус: Offline
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
Дата: ВС, 30.01.2011, 18:26:59 | Сообщение # 29
Unaited
UN4173D
Группа: Админы
Сообщений: 1371
Репутация: 91
Инвентарь: 13
Статус: Offline
а зачем конвертер mp3 и wav?

 
Rorschach
Дата: ВС, 30.01.2011, 18:51:02 | Сообщение # 30
Легендарный червь
Группа: Проверенные
Сообщений: 2848
Репутация: 60
Инвентарь: 6
Статус: Offline
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
Дата: ВТ, 01.02.2011, 18:41:59 | Сообщение # 31
Lex-Serest
Onecake-man
Группа: Админы
Сообщений: 825
Репутация: 83
Инвентарь: 14
Статус: Offline
я нашел способ конвертации из sab в wav, когда заплачу за инет, выложу

:3
 
Lex-Serest
Дата: СР, 09.02.2011, 20:10:13 | Сообщение # 32
Lex-Serest
Onecake-man
Группа: Админы
Сообщений: 825
Репутация: 83
Инвентарь: 14
Статус: Offline
Воитек ошибся по фрейду, он ошибся в "1 - Здесь указан формат. Если стоит 06 - это музыкальный формат, если 02 - звуковой.", и где располагается длина проигрывания

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


:3
 
Lex-Serest
Дата: СБ, 02.04.2011, 15:14:13 | Сообщение # 33
Lex-Serest
Onecake-man
Группа: Админы
Сообщений: 825
Репутация: 83
Инвентарь: 14
Статус: Offline
ыыы решил дописать конвертор, поэтому решил декомпелировать прогу от k^2 для экспорта и импорта
ыыыы надо было еще изучать ассемблер


:3
 
^_[RUSS]SPORE[PRO]_^
Дата: ЧТ, 30.06.2011, 13:41:00 | Сообщение # 34
^_[RUSS]SPORE[PRO]_^
Только что регнулся
Группа: Новички
Сообщений: 3
Репутация: 0
Статус: Offline
сяп помогли :D :D :D
 
AlexBond
Дата: СР, 26.06.2013, 02:56:29 | Сообщение # 35
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1036
Репутация: 106
Инвентарь: 8
Статус: Offline
Так как я добавил в новый 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
Дата: СР, 26.06.2013, 03:07:57 | Сообщение # 36
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1036
Репутация: 106
Инвентарь: 8
Статус: Offline
А вот музыку все таки проиграть у меня не получилось... там странная система кодирования каналов... все звуки отлично играются, а музыка с глюками...

 
Woitek
Дата: СР, 26.06.2013, 14:36:14 | Сообщение # 37
Woitek
Его узнают в чате
Группа: Проверенные
Сообщений: 521
Репутация: 57
Инвентарь: 11
Статус: Offline
Heh =). Now smarter than 2years ago :P. Good work.
 
AlexBond
Дата: СР, 26.06.2013, 16:24:46 | Сообщение # 38
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1036
Репутация: 106
Инвентарь: 8
Статус: Offline
В общем попытался анализировать музыку и нашел взаимосвязь.. в sab файле каналы чередуются через определенное количество байт, которое я еще не смог вычислить...
Вот картинка волн, на ней оригинальная музыка со стерео дорожками и дорожка взятая из файла sab как моно канал, как видно тут идут блоки левый канал, правый канал...


 
AlexBond
Дата: СР, 26.06.2013, 17:07:11 | Сообщение # 39
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1036
Репутация: 106
Инвентарь: 8
Статус: Offline
Раскодировал!!! В общем в 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
Дата: ПТ, 28.06.2013, 17:08:40 | Сообщение # 40
53454546
Сделал сайт чуть живее
Группа: Проверенные
Сообщений: 44
Репутация: 0
Статус: Offline
Why do not you unused?

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

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

Copyright W4Tweaks™ 2008-2017 Хостинг от uCoz