Q&A

Applause for Call of Duty: Modern Warfare

Call of Duty: Modern Warfare took home the Audio Design Award for best in-game audio and sound design at the 2019 Game Awards. Discover how Audio Director Stephen Miller and his team at Infinity Ward used Dolby Atmos to bring unrivaled intensity to the battlefield.

{{ headingBlockSlot.videoLinkButton.text }} {{ headingBlockSlot.videoLinkButton.text }}
 
Why did you choose to include Dolby Atmos in this title?
 
We knew when we started Modern Warfare that the audio had to be the most compelling, most immersive audio of any Call of Duty to date.  We had to not only raise the bar, we had to set a new standard of quality in order to rope people into the world and keep them there.  The environment and gameplay needed to feel real, grounded, and allow the player to put down their guard and let their living room walls melt away into the action on screen.

Real-time Dolby Atmos was a key component to giving the player those feelings with a custom surround experience that preserved creative choices, even in different listening environments.

Stephen Miller, Audio Director at Infinity Ward

Real-time Dolby Atmos was a key component to giving the player those feelings with a custom surround experience that preserved creative choices, even in different listening environments.  If the user had upward-shooting speakers or in-ceiling speakers we knew the original artistic intent was maintained and rendered to the individual player.
 
 
Things don't always go as planned. Did you run into any challenges?
 
The Spatial Audio API that Microsoft uses to expose this functionality was easy to use as it's very similar to the existing Windows Audio Service API (WASAPI) that we already use.  After some DSP and mix optimizations in our own proprietary audio engine, we flipped the switch and all the game audio objects started rendering in 7.1.4.4 without any hitches.  Our engine is already set up to handle multi-channel audio object spread and special panning, so it felt like the sound field just opened upwards and outwards.
 
CODIMAGE.jpg
 
The biggest challenge was getting the game’s level designers to create gameplay moments and geometry that could take full advantage of Dolby Atmos’ ability to render audio elevation changes.  It means presenting the player with set pieces and moments that aren’t necessarily in front of the player’s view, and might be offscreen.
 
 
Do you have a favorite Dolby Atmos scene in the game?
 
That’s tough, because there are so many moments the player can experience in real-time.  The environmental emitters throughout all sound great, and there are great overhead set pieces.  But my absolute favorite Dolby Atmos moment in campaign is when you are walking up the stairs in the mission “Clean House.”  You are quietly infiltrating a home, going up these old stairs.  All the quiet foley creates this great tension, only to be broken by the sounds of people running around and yelling to each other upstairs.  

The Dolby Atmos elevation channels also help locate enemies above the player by panning special footsteps.

Stephen Miller

The elevation of the sound coming from the ceiling speakers completely draws the player in and points them towards their objective - up.  In multiplayer and co-op, the action gives so many incredible moments, from jets screaming overhead, to incoming missiles you have to run to find cover from.  The Dolby Atmos elevation channels also help locate enemies above the player by panning special footsteps.  The real-time Dolby Atmos panning based on the player-controlled camera makes for a complete wrap-around experience, and we love it!
 

Explore More

Let's connect!

Get in touch with our Developer Relations team.
Have questions about how to make your game in Dolby?
Our Developer Relations team is here to help! 
// This view acts as a rendering template to render InitScript(and server-side Form's descriptor) in FormContainerBlock's client-side for Form[6d2a2eb1-656d-463d-a6a9-7f771e55a664]. // TECHNOTE: all serverside (paths, dynamic values) of EPiServerForms will be transfered to client side here in this section. (function initializeOnRenderingFormDescriptor() { // each workingFormInfo is store inside epi.EPiServer.Forms, lookup by its FormGuid var workingFormInfo=epi.EPiServer.Forms["6d2a2eb1-656d-463d-a6a9-7f771e55a664"] ={ Id: "6d2a2eb1-656d-463d-a6a9-7f771e55a664" , Name: "EN - Professional Gaming Sign-Up Form" , // whether this Form can be submitted which relates to the visitor's data (cookie, identity) and Form's settings (AllowAnonymous, AllowXXX) SubmittableStatus : {"submittable":true,"message":""}, ConfirmMessage: "Thank you for your submission", ResetConfirmMessage : "", ShowNavigationBar : false, ShowSummarizedData : false, // serialize the dependency configuration of this form to clientside DependenciesInfo : JSON.parse("[]"), // keep all fieldName which are not satisfied the field dependency conditions DependencyInactiveElements: [], // Validation info, for executing validating on client side ValidationInfo : JSON.parse("[{\"targetElementName\":\"__field_75601\",\"targetElementId\":\"964f1ac2-7a9d-483f-abb2-aaec60d681e7\",\"validators\":[{\"type\":\"EPiServer.Forms.Implementation.Validation.RequiredValidator\",\"description\":null,\"model\":{\"message\":\"This field is required.\",\"validationCssClass\":\"ValidationRequired\",\"additionalAttributes\":{\"required\":\"\",\"aria-required\":\"true\"}}}]},{\"targetElementName\":\"__field_75602\",\"targetElementId\":\"b2ba54c1-2318-480d-8d69-0f6c1a8e4cb2\",\"validators\":[{\"type\":\"EPiServer.Forms.Implementation.Validation.RequiredValidator\",\"description\":null,\"model\":{\"message\":\"This field is required.\",\"validationCssClass\":\"ValidationRequired\",\"additionalAttributes\":{\"required\":\"\",\"aria-required\":\"true\"}}}]},{\"targetElementName\":\"__field_75611\",\"targetElementId\":\"6d7b748f-43de-4e10-9a2c-5df8ef52dd45\",\"validators\":[{\"type\":\"EPiServer.Forms.Implementation.Validation.RequiredValidator\",\"description\":null,\"model\":{\"message\":\"This field is required.\",\"validationCssClass\":\"ValidationRequired\",\"additionalAttributes\":{\"required\":\"\",\"aria-required\":\"true\"}}},{\"type\":\"EPiServer.Forms.Implementation.Validation.EmailValidator\",\"description\":null,\"model\":{\"jsPattern\":\"^((([a-zA-Z]|\\\\d|[!#\\\\$%\u0026\u0027\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+(\\\\.([a-zA-Z]|\\\\d|[!#\\\\$%\u0026\u0027\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+)*)|((\\\\x22)((((\\\\x20|\\\\x09)*(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(([\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x7f]|\\\\x21|[\\\\x23-\\\\x5b]|[\\\\x5d-\\\\x7e]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(\\\\\\\\([\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0d-\\\\x7f]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]))))*(((\\\\x20|\\\\x09)*(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(\\\\x22)))@((([a-zA-Z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(([a-zA-Z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])([a-zA-Z]|\\\\d|-|\\\\.|_|~|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])*([a-zA-Z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])))\\\\.)+(([a-zA-Z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(([a-zA-Z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])([a-zA-Z]|\\\\d|-|\\\\.|_|~|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])*([a-zA-Z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])))$\",\"dotNetPattern\":\"^((([a-zA-Z]|\\\\d|[!#\\\\$%\u0026\u0027\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+(\\\\.([a-zA-Z]|\\\\d|[!#\\\\$%\u0026\u0027\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+)*)|((\\\\x22)((((\\\\x20|\\\\x09)*(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(([\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x7f]|\\\\x21|[\\\\x23-\\\\x5b]|[\\\\x5d-\\\\x7e]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(\\\\\\\\([\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0d-\\\\x7f]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]))))*(((\\\\x20|\\\\x09)*(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(\\\\x22)))@((([a-zA-Z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(([a-zA-Z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])([a-zA-Z]|\\\\d|-|\\\\.|_|~|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])*([a-zA-Z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])))\\\\.)+(([a-zA-Z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(([a-zA-Z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])([a-zA-Z]|\\\\d|-|\\\\.|_|~|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])*([a-zA-Z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])))$\",\"message\":\"Enter a valid email address.\",\"validationCssClass\":null,\"additionalAttributes\":null}}]},{\"targetElementName\":\"__field_75605\",\"targetElementId\":\"05e08626-4506-4821-8a4d-5459a681204b\",\"validators\":[{\"type\":\"EPiServer.Forms.Implementation.Validation.RequiredValidator\",\"description\":null,\"model\":{\"message\":\"This field is required.\",\"validationCssClass\":\"ValidationRequired\",\"additionalAttributes\":{\"required\":\"\",\"aria-required\":\"true\"}}}]}]"), // Steps information for driving multiple-step Forms. StepsInfo : { Steps: [{"index":0,"attachedUrl":"","dependField":null,"dependCondition":null,"isActive":true,"attachedContentLink":"","dependValue":"","elementName":"__field_","guid":"00000000-0000-0000-0000-000000000000"}] }, FieldsExcludedInSubmissionSummary: [], ElementsInfo: JSON.parse("{\"__field_75601\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeTextElementBlock\",\"friendlyName\":\"FirstName\",\"customBinding\":false},\"__field_75602\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeTextElementBlock\",\"friendlyName\":\"LastName\",\"customBinding\":false},\"__field_75611\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeTextElementBlock\",\"friendlyName\":\"Email\",\"customBinding\":false},\"__field_75603\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeTextElementBlock\",\"friendlyName\":\"Company\",\"customBinding\":false},\"__field_75604\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeTextElementBlock\",\"friendlyName\":\"JobTitle\",\"customBinding\":false},\"__field_75605\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeSelectionElementBlock\",\"friendlyName\":\"Country\",\"customBinding\":false},\"__field_75606\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeTextElementBlock\",\"friendlyName\":\"State\",\"customBinding\":false},\"__field_75607\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeTextElementBlock\",\"friendlyName\":\"City\",\"customBinding\":false},\"__field_75608\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.Braze.Elements.BrazeChoiceElementBlock\",\"friendlyName\":\"GamingPlatform\",\"customBinding\":false},\"__field_76308\":{\"type\":\"Dolby.Web.Core.Implementation.Models.Form.GoogleReCaptchaElementBlock\",\"friendlyName\":\"ReCaptcha\",\"customBinding\":false},\"__field_75610\":{\"type\":\"EPiServer.Forms.Implementation.Elements.SubmitButtonElementBlock\",\"friendlyName\":\"Submit\",\"customBinding\":false}}"), DataSubmitController: "/EPiServer.Forms/DataSubmit" }; /// TECHNOTE: Calculation at FormInfo level, and these values will be static input for later processing. workingFormInfo.StepsInfo.FormHasNoStep_VirtualStepCreated=true; // this FLAG will be true, if Editor does not put any FormStep. Engine will create a virtual step, with empty GUID workingFormInfo.StepsInfo.FormHasNothing=false; // this FLAG will be true if FormContainer has no element at all workingFormInfo.StepsInfo.AllStepsAreNotLinked=true; // this FLAG will be true, if all steps all have contentLink= ="" (emptyString) epi.EPiServer.SystemSettings = { RequestVerification: { FormFieldName: "__RequestVerificationToken", HeaderName: "RequestVerificationToken" } }; })();
Do you want to sign up to receive latest news and updates about gaming in Dolby?
function getSubmitBtn(target) { const scriptTarget = document.querySelector(`#${target}`); const container = scriptTarget?.closest('.EPiServerForms'); const submitBtn = container?.querySelector('form .FormSubmitButton'); return submitBtn; } window[`disableSubmitButton${'__field_76308'}`] = function() { const target = '__field_76308'; this.getSubmitBtn(target).setAttribute('disabled', true); this.getSubmitBtn(target).classList.add('no-spin'); } window[`onReCaptchaSuccess${'__field_76308'}`] = function() { const target = '__field_76308'; this.getSubmitBtn(target).removeAttribute('disabled'); this.getSubmitBtn(target).classList.remove('no-spin'); } // disable submit cta on load window[`disableSubmitButton${'__field_76308'}`]();
function reloadEpiFormJs(url) { const dataEl = document.querySelectorAll('[data-id="fsasync"]'); if (!dataEl.length) { let theScript = document.createElement('script'); theScript.src = url; theScript.setAttribute('data-id', 'fsasync'); document.head.appendChild(theScript); } } window.setTimeout(function () { reloadEpiFormJs('/Util/EPiServer.Forms/EPiServerForms.min.js'); }, 3000);