diff --git a/README.txt b/README.txt
index 0daf720..1b10518 100644
--- a/README.txt
+++ b/README.txt
@@ -77,6 +77,7 @@ DISPLAY FORMATTERS
 There are 2 display formaters:
 1. Audio player with download
 2. Audio player only
+3. Audio player only with details
 
 MAINTAINERS
 --------------------------------------------------------------------------------
diff --git a/audio.field.inc b/audio.field.inc
index 996cb4a..e2bba7d 100644
--- a/audio.field.inc
+++ b/audio.field.inc
@@ -108,7 +108,7 @@ function audiofield_field_widget_form(&$form, &$form_state, $field, $instance, $
  */
 function audiofield_field_widget_process($element, &$form_state, $form) {
   $fid = isset($element['#value']['fid']) ? $element['#value']['fid'] : 0;
-  
+
   $item = $element['#value'];
   $item['fid'] = $element['fid']['#value'];
   $field = field_widget_field($element, $form_state);
@@ -129,16 +129,15 @@ function audiofield_field_widget_process($element, &$form_state, $form) {
     );
   }
   if ($fid && $element['#file']) {
-    $audiofile = file_create_url($element['#file']->uri);
     $info = pathinfo($element['#file']->uri);
     $op = $info['extension'];
     $element['filename'] = array(
       '#type' => 'markup',
-      '#markup' => audiofield_get_player($audiofile, $op),
+      '#markup' => audiofield_get_player($element['#file']->uri, $op),
       '#weight' => -10,
     );
   }
-  
+
   // Add the description field if enabled.
   if (!empty($instance['settings']['description_field']) && $item['fid']) {
     $element['description'] = array(
@@ -168,6 +167,11 @@ function audiofield_field_formatter_info() {
       'field types' => array('file'),
       'description' => t('Displays only an audio player.'),
     ),
+    'audiofield_details' => array(
+      'label' => t('Audio player with details'),
+      'field types' => array('file'),
+      'description' => t('Displays only an audio player with details.'),
+    ),
   );
 
   return $formatters;
@@ -183,9 +187,9 @@ function audiofield_field_formatter_view($entity_type, $entity, $field, $instanc
   switch ($display['type']) {
     case 'audiofield_embedded' :
     case 'audiofield_nodownload':
+    case 'audiofield_details':
       global $user;
       foreach ($items as $delta => $item) {
-        $audiofile = file_create_url($item['uri']);
         $info = pathinfo($item['uri']);
         $op = $info['extension'];
         $options = array(
@@ -208,7 +212,7 @@ function audiofield_field_formatter_view($entity_type, $entity, $field, $instanc
             $download_link .= '<div class="audio-download"><b>' . t('Download') . ':</b>' . theme('file_link', array('file' => (object) $item)) . '</div>';
           }
         }
-        $elements[] = array('#markup' => audiofield_get_player($audiofile, $op, $options).$download_link);
+        $elements[] = array('#markup' => audiofield_get_player($item['uri'], $op, $options).$download_link);
       }
       break;
   }
diff --git a/audiofield.module b/audiofield.module
index 600f39c..29b62df 100644
--- a/audiofield.module
+++ b/audiofield.module
@@ -91,6 +91,86 @@ function audiofield_admin_settings_form() {
     );
   }
 
+  //File header details
+  if (!empty($players) || count($players)) {
+
+    $detect_getid3 = module_exists('getid3');
+
+    $detail_value = variable_get('audiofield_detail');
+    $form['audiofield_detail'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Show details'),
+      '#description' => t('!getid3_status !getid3.', array(
+        '!getid3' => l(t('getid3'), 'https://www.drupal.org/project/getid3'),
+        '!getid3_status' => $detect_getid3 ? t('Enabled dependency module') : t('For more options enable dependency module'),
+      )),
+      '#collapsible' => TRUE,
+      '#collapsed' => FALSE,
+      '#tree' => TRUE,
+    );
+
+    $form['audiofield_detail']['filename'] = array(
+      '#type' => 'select',
+      '#title' => t('Filename'),
+      '#options' => array('0' => '- None -', '1' => 'Filename', '2' => 'Filename (remove extension)', '3' => 'File extension only'),
+      '#default_value' => isset($detail_value['filename']) ? $detail_value['filename'] : '',
+    );
+
+    $form['audiofield_detail']['filesize'] = array(
+      '#type' => 'select',
+      '#title' => t('Filesize'),
+      '#options' => array('0' => '- None -', '1' => 'Drupal format', '2' => 'Row format'),
+      '#default_value' => isset($detail_value['filesize']) ? $detail_value['filesize'] : '',
+    );
+
+    if ($detect_getid3) {
+      $form['audiofield_detail']['length'] = array(
+        '#type' => 'select',
+        '#title' => t('Length'),
+        '#options' => array('0' => '- None -', '1' => 'H:m:s', '2' => t('seconds')),
+        '#default_value' => isset($detail_value['length']) ? $detail_value['length'] : '',
+      );
+      $form['audiofield_detail']['codec'] = array(
+        '#type' => 'select',
+        '#title' => t('Codec'),
+        '#options' => array('0' => '- None -', '1' => 'Short format',),
+        '#default_value' => isset($detail_value['codec']) ? $detail_value['codec'] : '',
+      );
+      $form['audiofield_detail']['channelmode'] = array(
+        '#type' => 'select',
+        '#title' => t('Channel mode'),
+        '#options' => array('0' => '- None -', '1' => 'Stereo / Mono',),
+        '#default_value' => isset($detail_value['channelmode']) ? $detail_value['channelmode'] : '',
+      );
+      $form['audiofield_detail']['samplerate'] = array(
+        '#type' => 'select',
+        '#title' => t('Sample rate'),
+        '#options' => array('0' => '- None -', '1' => 'Hz',),
+        '#default_value' => isset($detail_value['samplerate']) ? $detail_value['samplerate'] : '',
+      );
+      $form['audiofield_detail']['bitrate'] = array(
+        '#type' => 'select',
+        '#title' => t('Bitrate'),
+        '#options' => array('0' => '- None -', 'b/s' => 'b/s', 'bit/s' => 'bit/s', 'kb/s' => 'kb/s', 'kbit/s' => 'kbit/s',),
+        '#default_value' => isset($detail_value['bitrate']) ? $detail_value['bitrate'] : '',
+      );
+      $form['audiofield_detail']['tags_id3'] = array(
+        '#type' => 'select',
+        '#title' => t('ID3 tags support'),
+        '#options' => array('0' => '- None -', 'id3' => 'ID3 row data (id3v1 & id3v2)', 'title-artist' => 'Title - Artist', 'artist-title' => 'Artist - Title', 'title' => 'Title', 'title-year' => 'Title - Year', 'artist-album-title' => 'Artist - Album - Title', 'language' => 'Language', 'title-language' => 'Title - Language',),
+        '#default_value' => isset($detail_value['tags_id3']) ? $detail_value['tags_id3'] : '',
+        '#description' => t('Limited on mp3 format'),
+      );
+      $form['audiofield_detail']['tags_id3_picture'] = array(
+        '#type' => 'select',
+        '#title' => t('Picture'),
+        '#options' => array('0' => '- None -', '50x50' => '50x50 px', '100x100' => '100x100 px', '150x150' => '150x150 px', '300x200' => '200x200 px', '300x300' => '300x300 px', '600x600' => '600x600 px', 'original' => 'Original size',),
+        '#default_value' => isset($detail_value['tags_id3_picture']) ? $detail_value['tags_id3_picture'] : '',
+        '#description' => t('Limited on mp3 format'),
+      );
+    }
+  }
+
   return system_settings_form($form);
 }
 
@@ -103,10 +183,117 @@ function audiofield_theme() {
   return $theme;
 }
 
+/**
+ * Get getid3_instance.
+ */
+function audiofield_getid3_analyze($audio_path) {
+  if(module_exists('getid3') && getid3_load()) {
+    if(!class_exists('getid3')){
+      drupal_set_message(t('Missing class getid3! Check getid3 module installation.'), 'error', FALSE);
+      return false;
+    } else {
+      $file_path = drupal_realpath($audio_path);
+      $getID3 = getid3_instance();
+      $fileinfo = $getID3->analyze($file_path);
+    }
+  }
+  return $fileinfo;
+}
+
+/**
+ * Get getid3_formater.
+ */
+function audiofield_getid3_formater($audio_path, $audiofield_detail) {
+  $details = array();
+  foreach($audiofield_detail as $key => $val){
+    if ($val) {
+      if(!isset($file_info)) {
+        $file_info = audiofield_getid3_analyze($audio_path);
+        if(!$file_info){
+          return $details;
+        }
+      }
+      switch ($key) {
+        case 'filename':
+          $details['list']['filename'] = t('Filename') . ': ' . $file_info['filename'];
+          break;
+        case 'filesize':
+          $details['list']['filesize'] = t('Filesize') . ': ' . ($var == '1' ? format_size($file_info['filesize']) : $file_info['filesize']);
+          break;
+        case 'codec':
+          $details['list'][]= t('Codec') . ': ' . @$file_info['audio']['codec'] . ' (' . (isset($file_info['audio']['encoder_settings']) ? $file_info['audio']['encoder_settings'] : @$file_info['audio']['dataformat']) . ')';
+          break;
+        case 'length':
+          $details['list'][]= t('Length') . ': ' . ($val == '2' ? round($file_info['playtime_seconds'],3) . ' ' .t('seconds') : $file_info['playtime_string']);
+          break;
+        case 'channelmode':
+          $details['list'][]= t('Channel mode') . ': ' . @$file_info['audio']['channelmode'];
+          break;
+        case 'samplerate':
+          $details['list'][]= t('Sample rate') . ': ' . $file_info['audio']['sample_rate'] . ' Hz';
+          break;
+        case 'bitrate':
+          $details['list'][]= t('Bitrate') . ': ' . ((substr($val,0,1) == 'k') ? substr($file_info['bitrate'],0, -3) : $file_info['bitrate']) . ' '. $val;
+          break;
+        case 'tags_id3':
+          $tags = array();
+          if($val == 'id3'){
+            if(isset($file_info['id3v2']['comments'])){
+              $id3_encoding = $file_info['id3v2']['encoding'];
+              $id3 = $file_info['id3v2']['comments'];
+            }
+            elseif(isset($file_info['id3v1']['comments'])){
+              $id3_encoding = $file_info['id3v1']['encoding'];
+              $id3 = $file_info['id3v1']['comments'];
+            }
+            if(!empty($id3)) {
+              foreach($id3 as $key => $val){
+                if(is_array($val)){
+                  if(in_array($id3_encoding, array('ISO-8859-1'))){
+                    $id3[$key] = utf8_encode(implode('', $val));
+                  } else {
+                    $id3[$key] = implode('', $val);
+                  }
+                }
+              }
+              $tags[] = '<code class="audiofield_id3">'. json_encode($id3).'</code>';
+            }
+          } else {
+            $get_tags = explode('-', $val);
+            foreach ($get_tags as $tag){
+              if (isset($file_info['id3v2']['comments'][$tag])) {
+                $tags[$tag] = implode(';', $file_info['id3v2']['comments'][$tag]);
+              }
+              elseif (isset($file_info['id3v1'][$tag])) {
+                $tags[$tag] = $file_info['id3v1'][$tag];
+              }
+            }
+          }
+          $details['list'][]= 'ID3 '. t('tags') . ': ' . implode(' - ', $tags);
+          break;
+        case 'tags_id3_picture':
+          if (isset($file_info['id3v2']['APIC'][0]['data'])) {
+            if($val != 'original'){
+              $img_size = explode('x', $val);
+              $details['img']['attributes'] = array('width' => $img_size[0], 'height' => $img_size[1]);
+            }
+            $src = 'data:'.$file_info['id3v2']['APIC'][0]['image_mime'].';charset=utf-8;base64,'.base64_encode($file_info['id3v2']['APIC'][0]['data']);
+            $details['img']['attributes']['src'] = $src;
+          }
+          break;
+        default:
+          $details['list'][]= $key . ': not support';
+          break;
+      }
+    }
+  }
+  return $details;
+}
+
 /**
  * Get the object for the suitable player for the parameter resource
  */
-function audiofield_get_player($audio_url, $op, $options = array()) {
+function audiofield_get_player($audio_path, $op, $options = array()) {
   global $base_path;
   //Lets convert $op to lowercase
   $op = strtolower($op);
@@ -115,8 +302,70 @@ function audiofield_get_player($audio_url, $op, $options = array()) {
   $player_id = variable_get($variable_name, '');
   $player = isset($audio_players[$player_id]) ? $audio_players[$player_id] : NULL;
 
-  if (empty($player)) {
-    return audiofield_embeddedplayer($audio_url);
+  //File header details
+  $details_html = '';
+  if(empty($options['display']['type']) || in_array($options['display']['type'], array('audiofield_details'))) {
+    $details = [];
+    $img = '';
+    $audiofield_detail = variable_get('audiofield_detail');
+    if ($audiofield_detail && is_array($audiofield_detail)) {
+      //File name
+      if (!empty($audiofield_detail['filename'])) {
+        $filename = drupal_basename($audio_path);
+
+        //File name (remove extension).
+        if ($audiofield_detail['filename'] == '2') {
+          $last_dot = strrpos($filename, '.');
+          if ($last_dot !== FALSE) {
+            $filename = substr($filename, 0, $last_dot);
+          }
+          $details['list']['filename'] = t('Filename') . ': ' . $filename;
+        }
+        //Only extension.
+        elseif ($audiofield_detail['filename'] == '3') {
+          $last_dot = strrpos($filename, '.');
+          if ($last_dot === FALSE) {
+            $ext = '';
+          }
+          else {
+            $ext = substr($filename, $last_dot);
+          }
+          $details['list']['filename'] = t('Extension') . ': ' . $ext;
+        }
+        //Def. file name
+        else {
+          $details['list']['filename'] = t('Filename') . ': ' . $filename;
+        }
+        unset($audiofield_detail['filename']);
+      }
+      // File size
+      if (!empty($audiofield_detail['filesize'])) {
+        $filesize = filesize(drupal_realpath($audio_path));
+        if ($audiofield_detail['filesize'] == '1') {
+          $filesize = format_size($filesize);
+        }
+        $details['list']['filesize'] = t('Filesize') . ': ' . $filesize;
+        unset($audiofield_detail['filesize']);
+      }
+      // GetID3 details
+      $details = array_merge($details, audiofield_getid3_formater($audio_path, $audiofield_detail));
+    }
+
+    if (!empty($details)) {
+      if (isset($details['img']['attributes']['src'])) {
+        $img = '<div class="audiofield_img">' . theme('html_tag', [
+            'element' => [
+              '#tag' => 'img',
+              '#attributes' => $details['img']['attributes'],
+            ],
+          ]) . '</div>';
+      }
+      $details_html = $img . '<ul class="tips audiofield_detail"><li>' . implode("</li>\n<li>", $details['list']) . '</li></ul>';
+    }
+  }
+
+if (empty($player)) {
+    return audiofield_embeddedplayer($audio_path) . $details_html;
   }
   if(isset($player['path'])) {
     $path = $base_path . $player['path'];
@@ -124,7 +373,7 @@ function audiofield_get_player($audio_url, $op, $options = array()) {
   else {
     $path = '';
   }
-  return call_user_func($player['callback'], $path, $audio_url, $options);
+  return call_user_func($player['callback'], $path, $audio_path, $options) . $details_html;
 }
 
 /**
diff --git a/audiofield.players.inc b/audiofield.players.inc
index 4585654..9c79962 100644
--- a/audiofield.players.inc
+++ b/audiofield.players.inc
@@ -7,7 +7,7 @@ function audiofield_players() {
 
   $players['html5'] = array(
     'name' => 'HTML5 <audio>',
-    'filetypes' => array('mp3', 'wav', 'ogg'),
+    'filetypes' => array('mp3', 'wav', 'ogg', 'opus', 'webm'),
     'local' => TRUE,
     'callback' => 'audiofield_html5_audio',
   );
@@ -117,11 +117,13 @@ function _audiofield_theme() {
 
 /* Audio Callback Functions */
 
-function audiofield_embeddedplayer($audio_file) {
+function audiofield_embeddedplayer($audio_path) {
+  $audio_file = file_create_url($audio_path);
   return '<audio src="' . $audio_file . '" controls><embed height="15" src="' . $audio_file . '" autostart="false"></embed></audio>';
 }
 
-function audiofield_html5_audio($player_path, $audio_file) {
+function audiofield_html5_audio($player_path, $audio_path) {
+  $audio_file = file_create_url($audio_path);
   return '<audio src="' . $audio_file . '" controls></audio>';
 }
 
