Index: src/wp-includes/js/media-audiovideo.js
===================================================================
--- src/wp-includes/js/media-audiovideo.js	(revision 27621)
+++ src/wp-includes/js/media-audiovideo.js	(working copy)
@@ -207,10 +207,11 @@
 
 		defaults : {
 			id : wp.media.view.settings.post.id,
-			src      : '',
-			loop     : false,
+			src : '',
+			loop : false,
 			autoplay : false,
-			preload  : 'none'
+			preload : 'none',
+			caption : ''
 		},
 
 		edit : function (data) {
@@ -266,7 +267,8 @@
 			loop : false,
 			autoplay : false,
 			preload : 'metadata',
-			content : ''
+			content : '',
+			caption : ''
 		},
 
 		edit : function (data) {
Index: src/wp-includes/js/media-editor.js
===================================================================
--- src/wp-includes/js/media-editor.js	(revision 27621)
+++ src/wp-includes/js/media-editor.js	(working copy)
@@ -198,6 +198,23 @@
 				}
 			}
 
+			if ( ! _.isEmpty( attachment.caption ) ) {
+				shortcode.caption = attachment.caption;
+			} else if ( attachment.meta && attachment.meta.title ) {
+				shortcode.caption = '&#8220;' + attachment.meta.title + '&#8221;';
+				if ( attachment.meta.album ) {
+					shortcode.caption += ' from ' + attachment.meta.album;
+				}
+
+				if ( attachment.meta.artist ) {
+					shortcode.caption += ' by ' + attachment.meta.artist;
+				}
+			} else if ( ! _.isEmpty( attachment.description ) ) {
+				shortcode.caption = attachment.description;
+			} else {
+				shortcode.caption = attachment.title;
+			}
+
 			extension = attachment.filename.split('.').pop();
 
 			if ( _.contains( wp.media.view.settings.embedExts, extension ) ) {
Index: src/wp-includes/js/tinymce/skins/wordpress/wp-content.css
===================================================================
--- src/wp-includes/js/tinymce/skins/wordpress/wp-content.css	(revision 27621)
+++ src/wp-includes/js/tinymce/skins/wordpress/wp-content.css	(working copy)
@@ -281,6 +281,16 @@
 	margin: 2px 5px;
 }
 
+.wpview-type-audio .track-details {
+	position: absolute;
+	top: 0;
+	left: 5px;
+	width: 85%;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+
 .wpview-type-audio .toolbar,
 .wpview-type-video .toolbar,
 .wpview-type-gallery.selected .toolbar {
Index: src/wp-includes/media-template.php
===================================================================
--- src/wp-includes/media-template.php	(revision 27621)
+++ src/wp-includes/media-template.php	(working copy)
@@ -814,7 +814,7 @@
 				<div class="setting preload">
 					<span><?php _e( 'Preload' ); ?></span>
 					<div class="button-group button-large" data-setting="preload">
-						<button class="button" value="auto"><?php _ex( 'Auto', 'auto preload video' ); ?></button>
+						<button class="button" value="auto"><?php _ex( 'Auto', 'auto preload audio' ); ?></button>
 						<button class="button" value="metadata"><?php _e( 'Metadata' ); ?></button>
 						<button class="button active" value="none"><?php _e( 'None' ); ?></button>
 					</div>
@@ -829,6 +829,12 @@
 					<span><?php _e( 'Loop' ); ?></span>
 					<input type="checkbox" data-setting="loop" />
 				</label>
+
+				<label class="setting">
+					<span><?php _e( 'Caption' ); ?></span>
+					<input type="text" data-setting="caption" value="{{ data.model.caption }}" />
+				</label>
+
 				<div class="clear"></div>
 			</div>
 		</div>
@@ -901,7 +907,7 @@
 				<div class="setting preload">
 					<span><?php _e( 'Preload' ); ?></span>
 					<div class="button-group button-large" data-setting="preload">
-						<button class="button" value="auto"><?php _e( 'Auto' ); ?></button>
+						<button class="button" value="auto"><?php _ex( 'Auto', 'auto preload video' ); ?></button>
 						<button class="button" value="metadata"><?php _e( 'Metadata' ); ?></button>
 						<button class="button active" value="none"><?php _e( 'None' ); ?></button>
 					</div>
@@ -936,6 +942,11 @@
 					<# } #>
 					<textarea class="hidden content-setting">{{ content }}</textarea>
 				</label>
+
+				<label class="setting">
+					<span><?php _e( 'Caption' ); ?></span>
+					<input type="text" data-setting="caption" value="{{ data.model.caption }}" />
+				</label>
 			</div>
 		</div>
 	</script>
@@ -964,17 +975,23 @@
 
 	<script type="text/html" id="tmpl-editor-audio">
 		<div class="toolbar">
-			<div class="dashicons dashicons-format-audio edit"></div>
+			<div class="dashicons dashicons-edit edit"></div>
 			<div class="dashicons dashicons-no-alt remove"></div>
 		</div>
+		<# if ( ! _.isEmpty( data.model.caption ) ) { #>
+		<div class="track-details">{{{ data.model.caption }}}</div>
+		<# } #>
 		<?php wp_underscore_audio_template() ?>
 	</script>
 
 	<script type="text/html" id="tmpl-editor-video">
 		<div class="toolbar">
-			<div class="dashicons dashicons-format-video edit"></div>
+			<div class="dashicons dashicons-edit edit"></div>
 			<div class="dashicons dashicons-no-alt remove"></div>
 		</div>
+		<# if ( ! _.isEmpty( data.model.caption ) ) { #>
+		<div class="track-details">{{{ data.model.caption }}}</div>
+		<# } #>
 		<?php wp_underscore_video_template() ?>
 	</script>
 
Index: src/wp-includes/media.php
===================================================================
--- src/wp-includes/media.php	(revision 27621)
+++ src/wp-includes/media.php	(working copy)
@@ -1390,6 +1390,7 @@
 
 	$default_types = wp_get_audio_extensions();
 	$defaults_atts = array(
+		'caption'  => '',
 		'src'      => '',
 		'loop'     => '',
 		'autoplay' => '',
@@ -1549,6 +1550,7 @@
 
 	$default_types = wp_get_video_extensions();
 	$defaults_atts = array(
+		'caption'  => '',
 		'src'      => '',
 		'poster'   => '',
 		'loop'     => '',
@@ -2327,6 +2329,13 @@
 			$response['width'] = (int) $meta['width'];
 		if ( isset( $meta['height'] ) )
 			$response['height'] = (int) $meta['height'];
+	} elseif ( $meta && 'audio' === $type ) {
+		$response['meta'] = array();
+		foreach ( array( 'title', 'artist', 'album' ) as $key ) {
+			if ( ! empty( $meta[ $key ] ) ) {
+				$response['meta'][ $key ] = $meta[ $key ];
+			}
+		}
 	}
 
 	if ( $meta && ( 'audio' === $type || 'video' === $type ) ) {
