როგორ ამოიღოთ ხმები თამაშიდან. მუსიკის ფორმატები თამაშებში. თამაშის პროგრამებში FMOD-ის გამოყენების ალგორითმი

თამაშის მოდიფიკაციის კულტურა უძველესი დროიდან იღებს სათავეს. ყველაზე ადრე მახსოვს არის Wolfenstein 3D (1992). თუ არ ვცდები, შეგიძლიათ დახაზოთ საკუთარი რუკები, შემდეგ კი ახალი მტრები, შეცვალოთ ტექსტურები და ხმები. მოდიფიკაციის მთავარი დაბრკოლება არის ანალიზი უცნობი ფორმატებიმონაცემები. მოდით, ამ ფენომენის მორალური ასპექტები სხვა რესურსებს მივატოვოთ და ყურადღება გავამახვილოთ ტექნიკურ სირთულეებზე, რომლებიც შეიძლება წარმოიშვას ამ რთულ საკითხში.

მე დამიგროვდა ამ ტიპის საკმაოდ ბევრი ამბავი, უმარტივესი, მაგალითად, მარტივი არქივის გაანალიზება, სადაც ათასობით თამაშის ფაილი ინახება ერთ ფაილში, 3D მოდელების შეცვლამდე, არასტანდარტული ხმის კოდეკების კვლევასა და დაწერაზე. ერთ-ერთ მათგანს გეტყვით, საშუალო სირთულის.

ვთქვათ, თქვენ გაქვთ სურვილი შეცვალოთ გარკვეული ფრაზები თამაშში, ან თუნდაც სცადოთ სრული ხმოვანი მოქმედება რომელიმე ენაზე, რომლისთვისაც დეველოპერებს არ აქვთ ძალა ან რესურსი. როგორც ჩანს, თქვენ უბრალოდ უნდა ჩაწეროთ ხმა, იპოვოთ სად მდებარეობს თამაშში და შეცვალოთ საჭირო ფაილები. მაგრამ ეს ყოველთვის ადვილი არ არის, მაგალითად უახლესი თამაშები Batman: Arkham სერიიდან იყენებს wwise ხმის ძრავას, რომელიც საკმაოდ დიდი ხნის განმავლობაში იყო ინტეგრირებული Unreal Engine-ში.

UE-ს არაერთხელ შევხვედრივარ, მაგრამ, როგორც მოგეხსენებათ, კომერციულ დეველოპერებს აქვთ შესაძლებლობა მთლიანად შეცვალონ ძრავის კოდის ნებისმიერი ნაწილი, ასე რომ, თითქმის ყველა თამაში უნიკალურია მონაცემთა სტრუქტურის თვალსაზრისით და ეს ყოველთვის საინტერესოა. შესასწავლად.

პირველ რიგში, მოდით შევხედოთ ხმის ფაილებს. როგორც ყოველთვის, ისინი განლაგებულია აუდიო საქაღალდეში და გროვდება ერთში დიდი პაკეტი, მოულოდნელი გაფართოებით.WAD (გამარჯობა DOOM). თუ გსურთ, შეგიძლიათ მისგან ყველა ბგერაც კი ამოიღოთ, მაგრამ ეს იქნება რამდენიმე ათასი უსახელო ფაილი და მათ შორის რაღაცის პოვნა ძალიან პრობლემური იქნება, თუ მათ „ხელით“ არ მოუსმენთ. უნდა ითქვას, რომ ყველაზე ხშირად ეს უფრო მარტივია. დეველოპერები, საკუთარი მოხერხებულობისთვის, ტოვებენ ფაილს სადმე ფრაზების სიით. მაგრამ ეს ასე არ არის.

ლოგიკურია ვივარაუდოთ, რომ რადგან თამაში თავად რაღაცნაირად პოულობს მათთვის საჭირო ხმებს და სუბტიტრებს, ეს ნიშნავს, რომ ეს ინფორმაცია სადღაც შეიცავს ფაილებს, თქვენ უბრალოდ უნდა იპოვოთ იგი. ტექსტები არსად არ არის ნაპოვნი ლოკალიზაციის საქაღალდეებში, რაც ნიშნავს, რომ ისინი მიმოფანტულია თამაშის ცალკეულ დონეზე, როგორც ხშირად ხდება. მაგალითად ავიღოთ ერთი .upk ფაილი დონის მსგავსი სახელით და გავხსნათ იგი. საბედნიეროდ, ამისთვის არსებობს ინსტრუმენტები, თუნდაც წყაროს კოდით.

შიგნით სწრაფად აღმოჩენილია .RDialogueEvent ტიპის ფაილები, რომლებშიც შეუიარაღებელი თვალით ჩანს ფრაზების ტექსტები 11 ენაზე.

ფაილის სახელები ორიგინალური ბგერების სახელების მსგავსია. კარგია, ახლა რჩება მხოლოდ მათსა და ხმის ფაილებს შორის შესატყვისის პოვნა. სწორედ აქედან იწყება პრობლემები. რა თქმა უნდა, ხმის პაკეტში არის იდენტიფიკატორები. ეს არის 30-ბიტიანი ჰეში, რომელიც ყოველთვის გამოიყენება wwise-ში ბგერებისთვის, მაგრამ სამწუხაროდ ისინი ვერსად მოიძებნება დიალოგურ ფაილებს შორის. ყველგან მხოლოდ გაუგებარი რიცხვებია, ხმის ID-ის მსგავსი არაფერია, ისინი მაშინვე შესამჩნევი იქნებოდა. მეორეს მხრივ, ეს გასაგებია, რადგან ძრავა არც ისე მარტივია და არ შეიძლება უბრალოდ აიღო და დაკარგო ხმის ფაილითამაშში. ის შეიცავს აუდიო ბანკს, მას აქვს მრავალი თვისება, რომელიც აწესებს სხვადასხვა ეფექტს და ა.შ.

და შემდეგ ირკვევა, რომ დიალოგის თითოეულ საქაღალდეში არის file.akbank - როგორც ჩანს, ეს არის wwise აუდიო ბანკი.

მას აქვს ბევრი იდენტიფიკატორი შიგნით და შემთხვევით გამოსცადა ისინი, აღმოვაჩინეთ, რომ ერთ-ერთი მათგანი (მონიშნული მწვანეში) არის ხმის პაკეტში. თუ ამ იდენტიფიკატორის გამოყენებით ამოვიღებთ მონაცემებს, მივიღებთ ერთმანეთთან დამაგრებულ რამდენიმე ბგერის გარკვეულ სეგმენტს. მოდით გადავიტანოთ ეს ხმები შიდა wwise ფორმატიდან ჩვეულებრივ ogg-ში. დიახ, მართლაც, ერთ-ერთ მათგანში ბეტმენი ამბობს: „ამისთვის დრო არ მაქვს“, მეორე ფაილში კი პასუხობენ და ფრაზები ზუსტად შეესაბამება ამ კონკრეტული დიალოგის ტექსტებს.

უკვე ცუდი არ არის! პრინციპში, ჩვენ შეგვიძლია შევჩერდეთ: ყველა დიალოგი მოწყობილია საქაღალდეებში, თითოეული მათგანისთვის არის ბანკი აუდიო სეგმენტის ბმულით. რა თქმა უნდა, ჩვენ არ ვიცით, სად არის თითოეული ფაილი, მაგრამ შეგიძლიათ სეგმენტის ნაწილებად გაჭრა, მოსმენა და რამდენიმე ფრაზის განთავსება მათ ადგილებში (და ჩვეულებრივ მხოლოდ 3-4 მათგანია დიალოგებში) ხელით.

მაგრამ ჩვენ არ ვეძებთ მარტივ გზებს. ბოლომდე გაარკვიე. მოდით შევამოწმოთ, ყოველი შემთხვევისთვის, რა მოხდება, თუ ხმები სწორია? რა თქმა უნდა არა, დაბნეულები არიან. რაც არ უნდა თქვას, სადღაც უნდა იყოს ინფორმაცია სეგმენტში ბგერებსა და დიალოგის ტექსტს შორის კავშირის შესახებ. საკმაოდ დიდი ხანია ვიჭრები სხვადასხვა ფაილი, რაღაცის აღმოჩენის იმედით, მაგრამ ყველაფერი უსარგებლოა. ჯარიმა. რადგან ეს ასეა, მოდით გავხსნათ ყველა თამაშის პაკეტი. ეს არის რამდენიმე გიგაბაიტი, კარგი, არაფერი, პირველად თუ რა? ეს უბრალოდ სრული ძებნათამაშის ყველა მონაცემის მიხედვით, მან ასევე არაფერი მისცა. ერთადერთი ადგილი, სადაც არის ხმის იდენტიფიკატორები, არის აუდიო ბანკი. თურმე კავშირი მხოლოდ მისი მეშვეობით გადის. არაფრის გაკეთება არ შეგიძლია, შიგნით უნდა ახვიდე და გაარკვიო, როგორ მუშაობს.

ახლა, დარწმუნებული რომ ვიყოთ, მოდი ვიპოვოთ თამაშში დიალოგი, რომელიც შეგიძლიათ სწრაფად შეამოწმოთ. მომხიბვლელ ქალ რეპორტიორთან და ნიღბების შოუს სანახაობრივი გაცნობის შემდეგ, ბეტმენი დაიპყრო უგო სტრეინჯმა. ის ამბობს რამდენიმე ფრაზას, რომელიც იწყება "ვგრძნობ, რომ მადლობა უნდა გადაგიხადო", შემდეგ ტოვებს და თამაში იწყება. სწორედ აქ ხდება პირველი შენახვა. ეს მომენტი ჩვენთვის შესაფერისია.

მოდი ვიპოვოთ ბოროტმოქმედის ფრაზა ფაილებში. ის მთავრდება OW_E8_Ch1z_Anim პაკეტში. ასე რომ, თქვენ მაშინვე ვერ გამოიცნობთ. შიგნით არის მხოლოდ ერთი დიალოგი, რომელიც შეიცავს თამაშის მთელ დასაწყისს. ეს არის უზარმაზარი 24 ფრაზები, მაგრამ შესაძლოა ეს კარგია კოდების აურზაურში, უფრო ადვილია 24-ის პოვნა, ვიდრე 1 ან 2. ასე რომ, ჩვენ ვაპირებდით .akBank-ის შიგთავსის შესწავლას;

Wwise ბანკების ფორმატი უკვე ნაწილობრივ შესწავლილია. იმედი ვიქონიოთ, რომ ეს ინფორმაცია საკმარისი იქნება ჩვენი მიზნისთვის. თუ ვიმსჯელებთ .akbank ფაილის დასაწყისიდან, ის შეიცავს 5 აუდიო ბანკს 5 ენაზე, პირველი არის INT ბანკი (ინგლისური) - ჩვენ მას შევხედავთ.

ჯერ VKRK სათაურის შემდეგ არის გაუგებარი ცხრილი, შემდეგ საკმაოდ ბევრი ნული (ეს ჩანს წინა სურათზე), შემდეგ BKHD სეგმენტი და შემდეგ HIRC სეგმენტი, რომელიც, როგორც ჩანს, შეიცავს ყველა აუდიოს აღწერას. ობიექტები. IN ამ შემთხვევაშიჩვენ გვაქვს 79 მათგანი (0x4F მონიშნულია მწვანეში). როგორც აღწერილობაშია ნათქვამი, სეგმენტში ობიექტები მიდიან ერთმანეთის მიყოლებით, თითოეულისთვის მითითებულია ტიპი (1 ბაიტი), შემდეგ 32 ბიტიანი სიგრძე და ID. ობიექტის სიგრძე და შინაარსი განსხვავდება ტიპის მიხედვით.

ტიპი 2 ობიექტები არის ნამდვილი ხმები. ტიპი მონიშნულია წითლად, სიგრძე - ყვითელი. თითოეული მათგანი მიუთითებს თავად ობიექტის ID (მწვანე) და ხმის ფაილის ID (იისფერი), სადაც ის შეიცავს. ქვემოთ შეგიძლიათ იხილოთ დასაწყისი შემდეგი ობიექტიიგივე ტიპის.

ობიექტები 3 - ხმოვანი მოქმედებები, როგორც ჩანს, თითოეული მათგანი "ათამაშებს ხმას", ჩვენთვის უცნობი პარამეტრით, მაგრამ თითოეულ მათგანს აქვს საკუთარი ID (ნაცრისფერი) და ხმის ID, რომელიც რეალურად უნდა დაკვრა (მწვანე ).

ობიექტები 4 - ხმის მოვლენები. ძალიან მოკლე ჩანაწერები, რომელშიც ნაჩვენებია მხოლოდ მოვლენის ID (ლურჯი) და ასევე მითითებულია, რომ შეიცავს მხოლოდ ერთ მოქმედებას და სწორედ ამ მოქმედების ID-ს (ნაცრისფერი).

ისე, როგორც ჩანს, ჩვენ გვაქვს მსგავსი მოვლენების 24 ჯაჭვი:

მოვლენა -> მოქმედება -> ხმა

ისინი დაკავშირებულია იდენტიფიკატორებით და მთავრდება ხმოვანი ფაილების ბმულებით. როგორ მოვძებნოთ საჭირო ფაილები? ამ კოდების ძიების შემდეგ, მათ ვპოულობთ ზუსტად იმავე ცხრილში ბანკის დასაწყისში. როგორც ჩანს, ეს არის ცხრილი, რომელიც ჩაწერს, თუ სად არის ცალკეული ხმები ხმის სეგმენტში. და მართლაც, ის შეიცავს ზუსტად 24 ელემენტს და თითოეული ფაილისთვის არის იგივე ID, რაც გვქონდა ხმის ობიექტში, ოფსეტი დასაწყისში და სიგრძე მითითებულია. გილოცავ! ახლა ჩვენ გვაქვს სრულიად მიკვლევადი კავშირი ბანკებში აუდიო მოვლენებიდან ცალკეულ ხმის ფაილებამდე:

ანუ შეყვანის სახით გვაქვს რამდენიმე მოვლენის ID, ერთი დიალოგის თითოეული ფრაზისთვის და თითოეული მათგანისთვის შეგვიძლია ვიპოვოთ ხმის ფაილი. მაგრამ როგორ შეგვიძლია დავაკავშიროთ ისინი ახლა თავად დიალოგთან?

შევეცადოთ სადმე მოძებნოთ ეს იდენტიფიკატორები. ისევ და ისევ, ისინი არ არიან დიალოგის ფაილებში. ასევე არის რამდენიმე ძალიან მოკლე .akevent ფაილი საქაღალდეში - ასევე არის 24 მათგანი. ცხადია, ეს არის აუდიო მოვლენის ფაილები. შიგნით არის რაღაც პატარა ნომრები, ყველასთვის ერთნაირი, არაფერ შუაშია. ერთადერთი, რაც აქ არის განსხვავებული, არის აუდიო მოვლენების იდენტიფიკატორი, რომელიც ბანკში ვიპოვეთ.

კიდევ ერთი ჩიხი: ყველა მოვლენისთვის არის იდენტიფიკატორები, მაგრამ მათსა და დიალოგის ტექსტს შორის არანაირი კავშირი არ არის! ყოველ შემთხვევაში, მოდით გავაკეთოთ ტესტი: შეცვალეთ საჭირო ფაილი ID და გაუშვით თამაში. დიახ, მართლაც, ჰიუგო პირს ხსნის, მაგრამ არაფერს ამბობს. ეს ნიშნავს, რომ ეს არის ზუსტად ის მონაცემები, რომლითაც თამაში პოულობს სწორი ხმა. ამავე დროს, ჩვენ აღვნიშნავთ, რომ სუბტიტრები კვლავ ნაჩვენებია. ეს ნიშნავს, რომ ჩვენს შემთხვევაში დიალოგების ტექსტები პირველადია და ხმა უკვე მათგან მოდის.

შემდეგ კი მახსოვს, რომ UE3 ძრავას აქვს ჩვევა მიმართოს პაკეტის ობიექტებს მათი თანმიმდევრული ნომრის მეშვეობით პაკეტში, ანუ როგორ არის შეფუთული ისინი მასში. მოდით შევხედოთ საექსპორტო ფაილს, რომელიც წარმოიქმნება პაკეტების გახსნისას:

რიცხვები აქ არის ათობითი და იწყება ნულიდან, მაგრამ თამაშში ისინი იწყება 1-დან, ასე რომ, გამოდის, რომ ექსპორტში მოვლენის ფაილები დანომრილია 0x35-0x4С. ვნახოთ, არიან თუ არა სადმე დიალოგებს შორის. ჩვენ ვიწყებთ ძებნას - და ვაი, ფაილის დასაწყისში არის ეს ნომერი!

აქ არის ბოლო დაკარგული ბმული. ამავდროულად, ახლოს ვპოულობთ 0x2C - ეს არის ბანკის ფაილის ნომერი. თუ საქაღალდეში მოულოდნელად რამდენიმე დიალოგია, მათი გარჩევაც შესაძლებელია. ახლა ჩვენ სრულად ვიცით, როგორ მოვძებნოთ შესაბამისი ხმა დიალოგის ტექსტიდან.

ეს ერთი ლამაზი აღმოჩნდა რთული წრეურთიერთქმედებები. როგორც ჩანს, დეველოპერებმა გადაწყვიტეს არ ზრუნავდნენ მოხერხებულობაზე და უბრალოდ დაეყრდნოთ ძრავის შიდა მექანიზმებს, რამაც გამოიწვია ეს შედეგი ამ შემთხვევაში. და შემთხვევები, როგორც უკვე ვთქვი, ძალიან განსხვავებულია. ფაილების სტრუქტურა და მათ შორის კავშირები შეიძლება სრულიად განსხვავებული იყოს. აქ გვქონდა ბმული დიალოგის ტექსტიდან ბგერაზე. მაგრამ ეს ხდება პირიქით, პირველადი ხმა არის ხმა და ტექსტი მდებარეობს მის გვერდით იდენტიფიკატორის მიხედვით. ან თამაშის სკრიპტის ღონისძიება არის პირველადი და მისგან არის ბმული როგორც ხმაზე, ასევე ტექსტზე. ეს ხდება, რომ ფაილები განლაგებულია არა სახელით, არამედ ჰეშით. მაგრამ ნებისმიერ შემთხვევაში, რატომღაც ისინი ყველა დაკავშირებულია, რჩება მხოლოდ ამ კავშირის პოვნა.

როგორც საბოლოო შეხება, მოდით ვცადოთ ჩვენი შედეგების შემოწმება. მოდი ვიპოვოთ დიალოგის ფაილი ზუსტად ფრაზიდან „ვგრძნობ, რომ მადლობა უნდა გადაგიხადოთ“ და შევცვალოთ 4B მასში 4C-ით. ჩვენ ვიწყებთ თამაშს და ჩვენი მეგობარი ჰიუგო ამ ფრაზის ნაცვლად აზრობრივად ამბობს: „ეს იქნება ჩემი მემკვიდრეობა, ძეგლი შენი. წარუმატებლობა დათუ ჩემს შეჩერებას ცდილობ, გარანტიას გაძლევთ, ყველა გაიგებს თქვენს საიდუმლოს“.

მოდით, ბეტმენი ამაზე დავტოვოთ, სწავლა დასრულებულად შეიძლება ჩაითვალოს. IN წერილობითპროცესი სწრაფად გამოიყურება, მაგრამ სინამდვილეში, თითოეულ ეტაპს შეიძლება ახლდეს თექვსმეტობითი ციფრების ხანგრძლივი ფიქრი, ყოველგვარი იმედის გარეშე, რომ რაღაც მომენტში ისინი შექმნიან მნიშვნელოვან ჯაჭვებს და მიხვდებით, რას ნიშნავს ისინი. მაგრამ ზოგჯერ ეს მაინც ხდება.

რატომ ამოიღეთ ხმა თამაშიდან? რამდენი მუსიკალური საიტია?

დიახ, საქმე იმაშია, რომ მოგბეზრდებათ თამაშებიდან მელოდიების ძებნა. და შემდეგ იყო თამაშები ცრუობს გარშემო კომპიუტერზე კარგი ელექტრონული მუსიკა. სწორედ ამ დროს სასწრაფოდ მჭირდებოდა ამის გაკეთება და გახმოვანება ხმის ეფექტები. ამიტომ დავიწყე ფიქრი, ამომეღო თუ არა თამაშიდან ხმა. თამაში იყო ჯავის ფორმატში მობილური ტელეფონიდა მან უბრალოდ ვერ გახსნა თავისი დირექტორია, ვერცერთი პროგრამის საშუალებით.

ახლა თამაშებიდან ხმის ამოღება ჩემთვის პრობლემა არ არის. ერთი დამეხმარა ამაში ძლიერი პროგრამა უნიექსტრაქტორი(ჩამოტვირთვა) იგი შექმნილია დაზიანებული არქივების ამოსაღებად, როგორიცაა 7zip, WinRAR და სხვა შეკუმშული ფაილები. კარგად, პროგრამის ინსტალატორები თავად ხსნიან უპრობლემოდ. და Java თამაში არის ზუსტად ინსტალერი. მარტივი თამაშის ამოხსნის შემდეგ, ვცადე უფრო რთული თამაშისგან ხმის ამოღება. UniExtractor პროგრამა ასევე გაუმკლავდა თამაშებს საოპერაციო ოთახისთვის ანდროიდის სისტემები. შეფუთვას ძალიან ცოტა დრო სჭირდება. დაახლოებით ერთი წუთი. ამ დროის განმავლობაში, ნაკლებად სავარაუდოა, რომ ინტერნეტში იპოვნეთ შესაფერისი ხმა. მოდი საქმეს მივუდგეთ.

ხმის ამოღება თამაშიდან

გასახსნელად, როგორც ზემოთ აღვნიშნე, გამოვიყენებთ სპეციალურ არქივის გამხსნელს - უნიექსტრაქტორი. პროგრამის ცალკე გაშვება არ არის საჭირო, უბრალოდ დააწკაპუნეთ მარჯვენა გასაღებიმაუსი თამაშის ინსტალერის გამოყენებით. IN კონტექსტური მენიუაირჩიეთ ელემენტი - ამონაწერი ერთად უნიექსტრაქტორი.

შეფუთვის პროცესი.

ახლა ჩვენ შეგვიძლია ვიხილოთ ორი ფაილი იგივე სახელი. პირველი არის თავად თამაშის ინსტალერი, მეორე კი შეუფუთავი ინსტალერი, ფაილებით საქაღალდის სახით. გახსენით საქაღალდე და მოძებნეთ მასში სხვა, სახელწოდებით აპლიკაცია .

ამ საქაღალდეში არის კიდევ ორი, აუდიო ფაილებით. მათ შეიძლება სხვანაირად ეწოდოს. მაგრამ ჩვეულებრივ ასეა მუსიკადა ხმა.ზოგადად, თუ ისინი იქ არ არიან, მაშინ მოგიწევთ ყველა საქაღალდის გადახედვა.

მინდა გაგახარო. ყველა თამაშს არ აქვს ეს პრობლემა. ზოგიერთი შეფუთული თამაში შეიცავს ფორმატს აუდიო, რომლის მოსმენა დაუყოვნებლივ შესაძლებელია პლეერზე.

ამის ცოდნა სასარგებლოა:




რაიმე შეკითხვა?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: