diff --git a/core/modules/file/config/schema/file.schema.yml b/core/modules/file/config/schema/file.schema.yml
index b9f8918..085c42a 100644
--- a/core/modules/file/config/schema/file.schema.yml
+++ b/core/modules/file/config/schema/file.schema.yml
@@ -67,6 +67,23 @@ field.field_settings.file:
       type: boolean
       label: 'Enable Description field'
 
+field.formatter.settings.file_audio:
+  type: mapping
+  label: 'File audio display format settings'
+  mapping:
+    controls:
+      type: boolean
+      label: 'Show audio controls'
+    autoplay:
+      type: boolean
+      label: 'Autoplay'
+    loop:
+      type: boolean
+      label: 'Loop'
+    multiple_file_behavior:
+      type: string
+      label: 'Display of multiple files'
+
 field.formatter.settings.file_default:
   type: mapping
   label: 'Generic file format settings'
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index d69c149..59b4597 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -563,6 +563,9 @@ function file_theme() {
     'file_managed_file' => array(
       'render element' => 'element',
     ),
+    'file_audio' => array(
+      'variables' => array( 'files' => array(), 'attributes' => NULL),
+    ),
 
     // From file.field.inc.
     'file_widget_multiple' => array(
diff --git a/core/modules/file/src/Plugin/Field/FieldFormatter/FileAudioFormatter.php b/core/modules/file/src/Plugin/Field/FieldFormatter/FileAudioFormatter.php
new file mode 100644
index 0000000..6d1a5ac
--- /dev/null
+++ b/core/modules/file/src/Plugin/Field/FieldFormatter/FileAudioFormatter.php
@@ -0,0 +1,227 @@
+<?php
+
+/**
+ * @file
+ *  Contains Drupal\file\Plugin\Field\FieldFormatter\FileAudioFormatter
+ */
+
+namespace Drupal\file\Plugin\Field\FieldFormatter;
+
+
+use Drupal\Core\Field\FieldDefinitionInterface;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Template\Attribute;
+use Drupal\Core\Render\RendererInterface;
+use Drupal\file\Entity\File;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface;
+
+/**
+ * Plugin implementation of the 'file_audio' formatter.
+ *
+ * @FieldFormatter(
+ *   id = "file_audio",
+ *   label = @Translation("Audio"),
+ *   description = @Translation("Render the file using an HTML5 audio tag."),
+ *   field_types = {
+ *     "file"
+ *   }
+ * )
+ */
+class FileAudioFormatter extends FileFormatterBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The renderer service.
+   *
+   * @var \Drupal\Core\Render\RendererInterface
+   */
+  protected $renderer;
+
+  /**
+   * Constructs a FileAudioFormatter instance.
+   *
+   * @param string $plugin_id
+   *   The plugin_id for the formatter.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
+   *   The definition of the field to which the formatter is associated.
+   * @param array $settings
+   *   The formatter settings.
+   * @param string $label
+   *   The formatter label display setting.
+   * @param string $view_mode
+   *   The view mode.
+   * @param array $third_party_settings
+   *   Any third party settings settings.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
+   * @param Drupal\Core\Render\RendererInterface $renderer
+   *   The rendered service
+   */
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, RendererInterface $renderer) {
+    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
+    $this->renderer = $renderer;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $plugin_id,
+      $plugin_definition,
+      $configuration['field_definition'],
+      $configuration['settings'],
+      $configuration['label'],
+      $configuration['view_mode'],
+      $configuration['third_party_settings'],
+      $container->get('renderer')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function defaultSettings() {
+    return array(
+      'controls' => TRUE,
+      'autoplay' => FALSE,
+      'loop' => FALSE,
+      'multiple_file_behavior' => 'tags',
+    ) + parent::defaultSettings();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsForm(array $form, FormStateInterface $form_state) {
+    $element['controls'] = array(
+      '#title' => t('Show audio controls'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->getSetting('controls'),
+    );
+    $element['autoplay'] = array(
+      '#title' => t('Autoplay'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->getSetting('autoplay'),
+    );
+    $element['loop'] = array(
+      '#title' => t('Loop'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->getSetting('loop'),
+    );
+    $element['multiple_file_behavior'] = array(
+      '#title' => t('Display of multiple files'),
+      '#type' => 'radios',
+      '#options' => array(
+        'tags' => t('Use multiple @tag tags, each with a single source.', array('@tag' => '<audio>')),
+        'sources' => t('Use multiple sources within a single @tag tag.', array('@tag' => '<audio>')),
+      ),
+      '#default_value' => $this->getSetting('multiple_file_behavior'),
+    );
+
+    return $element;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsSummary() {
+    $summary = array();
+    $summary[] = t('Controls: %controls', array('%controls' => $this->getSetting('controls') ? 'visible' : 'hidden'));
+    $summary[] = t('Autoplay: %autoplay', array('%autoplay' => $this->getSetting('autoplay') ? t('yes') : t('no')));
+    $summary[] = t('Loop: %loop', array('%loop' => $this->getSetting('loop') ? t('yes') : t('no')));
+    $summary[] = t('Multiple files: %multiple', array('%multiple' => $this->getSetting('multiple_file_behavior')));
+    return $summary;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function viewElements(FieldItemListInterface $items, $langcode) {
+    $elements = array();
+    $multiple_file_behavior = $this->getSetting('multiple_file_behavior');
+    $source_files = array();
+    // Because we can have the files grouped in a single audio tag, we do a
+    // grouping in case the multiple file behavior is not 'tags'.
+    /**
+     * @var integer $delta
+     * @var File $file
+     */
+    foreach ($this->getEntitiesToView($items, $langcode) as $delta => $file) {
+      $mimeTypeType = static::getMimeTypeType($file->getMimeType());
+
+      if ($mimeTypeType == 'audio') {
+        $source_attributes = new Attribute();
+        $source_attributes->setAttribute('src', file_create_url($file->getFileUri()));
+        $source_attributes->setAttribute('type', $file->getMimeType());
+        if ($multiple_file_behavior == 'tags') {
+          $source_files[] = array(array('file' => $file, 'source_attributes' => $source_attributes));
+        }
+        else {
+          $source_files[0][] = array('file' => $file, 'source_attributes' => $source_attributes);
+        }
+      }
+    }
+    if (!empty($source_files)) {
+      // Prepare the audio attributes according to the settings.
+      $audio_attributes = new Attribute();
+      foreach (array('controls', 'autoplay', 'loop') as $attribute) {
+        if ($this->getSetting($attribute)) {
+          $audio_attributes->setAttribute($attribute, $attribute);
+        }
+      }
+      foreach ($source_files as $delta => $files) {
+        $elements[$delta] = array(
+          '#theme' => 'file_audio',
+          '#attributes' => $audio_attributes,
+          '#files' => $files,
+        );
+
+        foreach ($files as $file) {
+          $this->renderer->addCacheableDependency($elements[$delta], $file['file']);
+        }
+      }
+    }
+
+    return $elements;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function isApplicable(FieldDefinitionInterface $field_definition) {
+    var_dump('ddddd');
+
+    /** @var MimeTypeGuesserInterface $extensionMimeTypeGuesser */
+    $extensionMimeTypeGuesser = \Drupal::service('file.mime_type.guesser.extension');
+
+    $extensionList = array_filter(explode(' ', $field_definition->getSetting('file_extensions')));
+
+    $applicable = FALSE;
+    foreach ($extensionList as $extension) {
+
+      $mimeType = $extensionMimeTypeGuesser->guess('fakedFile.' . $extension);
+
+      if (static::getMimeTypeType($mimeType) == 'audio') {
+        $applicable = TRUE;
+      }
+    }
+
+    return parent::isApplicable($field_definition) && $applicable;
+  }
+
+  /**
+   * Returns the first part of the mimetype of the file.
+   *
+   * @return string
+   *   The mimetype.
+   */
+  public static function getMimeTypeType($mimeType) {
+    list($type, $subtype) = explode('/', $mimeType, 2);
+    return $type;
+  }
+}
diff --git a/core/modules/file/templates/file-audio.html.twig b/core/modules/file/templates/file-audio.html.twig
new file mode 100644
index 0000000..39ae9ac
--- /dev/null
+++ b/core/modules/file/templates/file-audio.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+* @file
+* Default theme implementation to display the file entity as an audio tag.
+*
+* Available variables:
+* - attributes: An array of HTML attributes, intended to be added to the
+*   audio tag.
+* - files: And array of files to be added as sources for the audio tag. Each
+*   element is an array with the following elements:
+*   - file: The full file object.
+*   - source_attributes: An array of HTML attributes for to be added to the
+*     source tag.
+*
+* @ingroup themeable
+*/
+#}
+
+<audio {{ attributes }}>
+    {% for file in files %}
+        <source {{ file.source_attributes }} />
+    {% endfor %}
+</audio>
\ No newline at end of file
diff --git a/core/modules/file/tests/src/Kernel/Formatter/FileAudioFormatterTest.php b/core/modules/file/tests/src/Kernel/Formatter/FileAudioFormatterTest.php
new file mode 100644
index 0000000..25ad534
--- /dev/null
+++ b/core/modules/file/tests/src/Kernel/Formatter/FileAudioFormatterTest.php
@@ -0,0 +1,127 @@
+<?php
+
+namespace Drupal\Tests\file\Kernel\Formatter;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\file\Entity\File;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * @coversDefaultClass \Drupal\file\Plugin\Field\FieldFormatter\FileAudioFormatter
+ * @group field
+ */
+class FileAudioFormatterTest extends KernelTestBase {
+
+  /**
+   * @var string
+   */
+  protected $entityType;
+
+  /**
+   * @var string
+   */
+  protected $bundle;
+
+  /**
+   * @var string
+   */
+  protected $fieldName;
+
+  /**
+   * @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface
+   */
+  protected $display;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'entity_test',
+    'field',
+    'file',
+    'user',
+    'system',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installConfig(['field']);
+    $this->installEntitySchema('entity_test');
+    $this->installEntitySchema('file');
+    $this->installSchema('file', array('file_usage'));
+
+    $this->entityType = 'entity_test';
+    $this->bundle = $this->entityType;
+    $this->fieldName = Unicode::strtolower($this->randomMachineName());
+
+    FieldStorageConfig::create(array(
+      'entity_type' => $this->entityType,
+      'field_name' => $this->fieldName,
+      'type' => 'file',
+      'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
+    ))->save();
+    FieldConfig::create([
+      'entity_type' => $this->entityType,
+      'field_name' => $this->fieldName,
+      'bundle' => $this->bundle,
+      'settings' => [
+        'file_extensions' => 'mp3',
+      ],
+    ])->save();
+
+    $this->display = entity_get_display($this->entityType, $this->bundle, 'default')
+      ->setComponent($this->fieldName, [
+        'type' => 'file_audio',
+
+      ]);
+    $this->display->save();
+  }
+
+  /**
+   * @covers ::viewElements
+   */
+  public function testRender() {
+
+    file_put_contents('public://file.mp3', str_repeat('t', 10));
+    $file = File::create([
+      'uri' => 'public://file.mp3',
+      'filename' => 'file.mp3',
+    ]);
+    $file-> save();
+
+    $entity = EntityTest::create([
+      $this->fieldName => [[
+        'target_id' => $file->id(),
+      ],],
+    ]);
+    $entity->save();
+
+    $build = $this->display->build($entity);
+
+    $this->render($build);
+    
+    $expected_output = <<<EXPECTED
+
+  <div>
+    <div>test_er_field</div>
+              <div>
+  <div>
+    <div>Name</div>
+              <div>child name</div>
+          </div>
+</div>
+          </div>
+
+EXPECTED;
+    $this->assertEquals($expected_output, $build[$this->fieldName]['#markup']);
+  }
+
+}
\ No newline at end of file
