diff --git a/blocks/library/audio/index.js b/blocks/library/audio/index.js
new file mode 100644
index 00000000000000..eb17ec718b382f
--- /dev/null
+++ b/blocks/library/audio/index.js
@@ -0,0 +1,76 @@
+/**
+ * External dependencies
+ */
+
+/**
+ * WordPress dependencies
+ */
+import { __ } from '@wordpress/i18n';
+import { Placeholder } from '@wordpress/components';
+
+/**
+ * Internal dependencies
+ */
+import './style.scss';
+import { registerBlockType, source } from '../../api';
+import MediaUploadButton from '../../media-upload-button';
+
+const { attr } = source;
+
+registerBlockType( 'core/audio', {
+ title: __( 'Audio' ),
+
+ icon: 'media-audio',
+
+ category: 'common',
+
+ attributes: {
+ src: {
+ type: 'string',
+ source: attr( 'audio', 'src' ),
+ },
+ },
+
+ edit( { attributes, setAttributes, className } ) {
+ const { src } = attributes;
+ const onSelectAudio = ( media ) => {
+ if ( media && media.url ) {
+ setAttributes( { src: media.url } );
+ }
+ };
+
+ if ( ! src ) {
+ return [
+
+
+ { __( 'Insert from Media Library' ) }
+
+ ,
+ ];
+ }
+
+ /* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */
+ return [
+
,
+ ];
+ /* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */
+ },
+
+ save( { attributes } ) {
+ const { src } = attributes;
+ return (
+
+ );
+ },
+} );
diff --git a/blocks/library/audio/style.scss b/blocks/library/audio/style.scss
new file mode 100644
index 00000000000000..6238d5373c3f1f
--- /dev/null
+++ b/blocks/library/audio/style.scss
@@ -0,0 +1,3 @@
+.wp-block-audio .components-placeholder__input {
+ margin-top: 1em;
+}
\ No newline at end of file
diff --git a/blocks/library/index.js b/blocks/library/index.js
index 88024283e13828..ead7508fcef477 100644
--- a/blocks/library/index.js
+++ b/blocks/library/index.js
@@ -22,3 +22,4 @@ import './shortcode';
import './text-columns';
import './verse';
import './video';
+import './audio';
diff --git a/blocks/test/fixtures/core__audio.html b/blocks/test/fixtures/core__audio.html
new file mode 100644
index 00000000000000..1275235db66261
--- /dev/null
+++ b/blocks/test/fixtures/core__audio.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/blocks/test/fixtures/core__audio.json b/blocks/test/fixtures/core__audio.json
new file mode 100644
index 00000000000000..da088eeff96ae2
--- /dev/null
+++ b/blocks/test/fixtures/core__audio.json
@@ -0,0 +1,10 @@
+[
+ {
+ "uid": "_uid_0",
+ "name": "core/audio",
+ "isValid": true,
+ "attributes": {
+ "src": "https://media.simplecast.com/episodes/audio/80564/draft-podcast-51-livePublish2.mp3"
+ }
+ }
+]
diff --git a/blocks/test/fixtures/core__audio.parsed.json b/blocks/test/fixtures/core__audio.parsed.json
new file mode 100644
index 00000000000000..eb4e5753fb3911
--- /dev/null
+++ b/blocks/test/fixtures/core__audio.parsed.json
@@ -0,0 +1,11 @@
+[
+ {
+ "blockName": "core/audio",
+ "attrs": null,
+ "rawContent": "\n\n"
+ },
+ {
+ "attrs": {},
+ "rawContent": "\n"
+ }
+]
diff --git a/blocks/test/fixtures/core__audio.serialized.html b/blocks/test/fixtures/core__audio.serialized.html
new file mode 100644
index 00000000000000..1275235db66261
--- /dev/null
+++ b/blocks/test/fixtures/core__audio.serialized.html
@@ -0,0 +1,3 @@
+
+
+