diff --git a/BGMApp/BGMApp/Music Players/BGMDecibel.h b/BGMApp/BGMApp/Music Players/BGMDecibel.h
new file mode 100644
index 0000000..d24e5fa
--- /dev/null
+++ b/BGMApp/BGMApp/Music Players/BGMDecibel.h
@@ -0,0 +1,30 @@
+// This file is part of Background Music.
+//
+// Background Music is free software: you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation, either version 2 of the
+// License, or (at your option) any later version.
+//
+// Background Music is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Background Music. If not, see .
+
+//
+// BGMDecibel.h
+// BGMApp
+//
+// Copyright © 2016 Kyle Neideck
+//
+
+// Superclass/Protocol Import
+#import "BGMMusicPlayer.h"
+
+
+@interface BGMDecibel : BGMMusicPlayer
+
+@end
+
diff --git a/BGMApp/BGMApp/Music Players/BGMDecibel.m b/BGMApp/BGMApp/Music Players/BGMDecibel.m
new file mode 100644
index 0000000..c3c3685
--- /dev/null
+++ b/BGMApp/BGMApp/Music Players/BGMDecibel.m
@@ -0,0 +1,91 @@
+// This file is part of Background Music.
+//
+// Background Music is free software: you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation, either version 2 of the
+// License, or (at your option) any later version.
+//
+// Background Music is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Background Music. If not, see .
+
+//
+// BGMDecibel.m
+// BGMApp
+//
+// Copyright © 2016 Kyle Neideck
+//
+
+// Self Include
+#import "BGMDecibel.h"
+
+// Auto-generated Scripting Bridge header
+#import "Decibel.h"
+
+// PublicUtility Includes
+#undef CoreAudio_ThreadStampMessages
+#define CoreAudio_ThreadStampMessages 0 // Requires C++
+#include "CADebugMacros.h"
+
+
+@implementation BGMDecibel
+
+BGM_MUSIC_PLAYER_DEFAULT_LOAD_METHOD
+
++ (NSString*) name {
+ return @"Decibel";
+}
+
+- (CFNumberRef) pid {
+ return NULL;
+}
+
++ (CFStringRef) bundleID {
+ return CFSTR("org.sbooth.Decibel");
+}
+
+- (DecibelApplication* __nullable) decibel {
+ return (DecibelApplication*) self.sbApplication;
+}
+
+- (BOOL) isRunning {
+ return self.decibel && [self.decibel isRunning];
+}
+
+- (BOOL) pause {
+ // isPlaying checks isRunning, so we don't need to check it here and waste an Apple event
+ BOOL wasPlaying = [self isPlaying];
+
+ if (wasPlaying) {
+ DebugMsg("BGMDecibel::pause: Pausing Decibel");
+ [self.decibel pause];
+ }
+
+ return wasPlaying;
+}
+
+- (BOOL) unpause {
+ // isPaused checks isRunning, so we don't need to check it here and waste an Apple event
+ BOOL wasPaused = [self isPaused];
+
+ if (wasPaused) {
+ DebugMsg("BGMDecibel::unpause: Unpausing Decibel");
+ [self.decibel playPause];
+ }
+
+ return wasPaused;
+}
+
+- (BOOL) isPlaying {
+ return [self isRunning] && [self.decibel playing];
+}
+
+- (BOOL) isPaused {
+ return [self isRunning] && ![self.decibel playing];
+}
+
+@end
diff --git a/BGMApp/BGMApp/Music Players/Decibel.h b/BGMApp/BGMApp/Music Players/Decibel.h
new file mode 100644
index 0000000..78dfea8
--- /dev/null
+++ b/BGMApp/BGMApp/Music Players/Decibel.h
@@ -0,0 +1,178 @@
+/*
+ * Decibel.h
+ */
+
+#import
+#import
+
+
+@class DecibelApplication, DecibelDocument, DecibelWindow, DecibelApplication, DecibelTrack;
+
+enum DecibelSaveOptions {
+ DecibelSaveOptionsYes = 'yes ' /* Save the file. */,
+ DecibelSaveOptionsNo = 'no ' /* Do not save the file. */,
+ DecibelSaveOptionsAsk = 'ask ' /* Ask the user whether or not to save the file. */
+};
+typedef enum DecibelSaveOptions DecibelSaveOptions;
+
+enum DecibelPrintingErrorHandling {
+ DecibelPrintingErrorHandlingStandard = 'lwst' /* Standard PostScript error handling */,
+ DecibelPrintingErrorHandlingDetailed = 'lwdt' /* print a detailed report of PostScript errors */
+};
+typedef enum DecibelPrintingErrorHandling DecibelPrintingErrorHandling;
+
+enum DecibelShuffleMode {
+ DecibelShuffleModeOff = 'off ' /* Off */,
+ DecibelShuffleModeTrack = 'trck' /* Track */,
+ DecibelShuffleModeAlbum = 'albm' /* Album */,
+ DecibelShuffleModeArtist = 'arts' /* Artist */
+};
+typedef enum DecibelShuffleMode DecibelShuffleMode;
+
+enum DecibelRepeatMode {
+ DecibelRepeatModeOff = 'off ' /* Off */,
+ DecibelRepeatModeTrack = 'trck' /* Track */,
+ DecibelRepeatModeAlbum = 'albm' /* Album */,
+ DecibelRepeatModeArtist = 'arts' /* Artist */,
+ DecibelRepeatModeAll = 'all ' /* All */
+};
+typedef enum DecibelRepeatMode DecibelRepeatMode;
+
+@protocol DecibelGenericMethods
+
+- (void) closeSaving:(DecibelSaveOptions)saving savingIn:(NSURL *)savingIn; // Close a document.
+- (void) saveIn:(NSURL *)in_ as:(id)as; // Save a document.
+- (void) printWithProperties:(NSDictionary *)withProperties printDialog:(BOOL)printDialog; // Print a document.
+- (void) delete; // Delete an object.
+- (void) duplicateTo:(SBObject *)to withProperties:(NSDictionary *)withProperties; // Copy an object.
+- (void) moveTo:(SBObject *)to; // Move an object to a new location.
+
+@end
+
+
+
+/*
+ * Standard Suite
+ */
+
+// The application's top-level scripting object.
+@interface DecibelApplication : SBApplication
+
+- (SBElementArray *) documents;
+- (SBElementArray *) windows;
+
+@property (copy, readonly) NSString *name; // The name of the application.
+@property (readonly) BOOL frontmost; // Is this the active application?
+@property (copy, readonly) NSString *version; // The version number of the application.
+
+- (id) open:(id)x; // Open a document.
+- (void) print:(id)x withProperties:(NSDictionary *)withProperties printDialog:(BOOL)printDialog; // Print a document.
+- (void) quitSaving:(DecibelSaveOptions)saving; // Quit the application.
+- (BOOL) exists:(id)x; // Verify that an object exists.
+- (void) play; // Begin audio playback
+- (void) pause; // Suspend audio playback
+- (void) stop; // Stop audio playback
+- (void) playPause; // Begin or suspend audio playback
+- (void) seekForward; // Seek forward three seconds
+- (void) seekBackward; // Seek backward three seconds
+- (void) playSelection; // Play the selected track, or the first track if more than one are selected
+- (void) playPreviousTrack; // Play the previous logical track in the playlist
+- (void) playNextTrack; // Play the next logical track in the playlist
+- (void) addFile:(NSURL *)x; // Add a file to the playlist
+- (void) playFile:(NSURL *)x; // Add a file to the playlist and play it
+- (void) playTrackAtIndex:(NSInteger)x; // Play a track in the playlist
+- (void) increaseDeviceVolume; // Increase the device volume
+- (void) decreaseDeviceVolume; // Decrease the device volume
+- (void) increaseDigitalVolume; // Increase the digital volume
+- (void) decreaseDigitalVolume; // Decrease the digital volume
+- (void) clearPlaylist; // Clear the playlist
+- (void) scramblePlaylist; // Scramble the playlist
+
+@end
+
+// A document.
+@interface DecibelDocument : SBObject
+
+@property (copy, readonly) NSString *name; // Its name.
+@property (readonly) BOOL modified; // Has it been modified since the last save?
+@property (copy, readonly) NSURL *file; // Its location on disk, if it has one.
+
+
+@end
+
+// A window.
+@interface DecibelWindow : SBObject
+
+@property (copy, readonly) NSString *name; // The title of the window.
+- (NSInteger) id; // The unique identifier of the window.
+@property NSInteger index; // The index of the window, ordered front to back.
+@property NSRect bounds; // The bounding rectangle of the window.
+@property (readonly) BOOL closeable; // Does the window have a close button?
+@property (readonly) BOOL miniaturizable; // Does the window have a minimize button?
+@property BOOL miniaturized; // Is the window minimized right now?
+@property (readonly) BOOL resizable; // Can the window be resized?
+@property BOOL visible; // Is the window visible right now?
+@property (readonly) BOOL zoomable; // Does the window have a zoom button?
+@property BOOL zoomed; // Is the window zoomed right now?
+@property (copy, readonly) DecibelDocument *document; // The document whose contents are displayed in the window.
+
+
+@end
+
+
+
+/*
+ * Decibel Scripting Suite
+ */
+
+// The Decibel application class.
+@interface DecibelApplication (DecibelScriptingSuite)
+
+- (SBElementArray *) tracks;
+
+@property (readonly) BOOL playing; // Is the player currently playing?
+@property (readonly) BOOL shuffling; // Is the player currently shuffling?
+@property (readonly) BOOL repeating; // Is the player currently repeating?
+@property (copy, readonly) DecibelTrack *nowPlaying; // The track that is currently playing?
+@property double deviceVolume; // The current device volume
+@property double digitalVolume; // The current digital volume
+@property double playbackPosition; // The current playback position [0, 1]
+@property double playbackTime; // The current playback time in seconds
+@property (readonly) BOOL canPlay; // Is the player currently playing?
+@property (readonly) BOOL canPlayPreviousTrack; // Is the player currently playing?
+@property (readonly) BOOL canPlayNextTrack; // Is the player currently playing?
+@property (readonly) BOOL canAdjustDeviceVolume; // Can the device volume be adjusted?
+@property DecibelShuffleMode shuffleMode; // Player shuffle mode
+@property DecibelRepeatMode repeatMode; // Player repeat mode
+@property (copy, readonly) SBObject *currentPlaylist; // The current playlist
+
+@end
+
+// A track in the playlist
+@interface DecibelTrack : SBObject
+
+- (NSString *) id; // The track's ID
+@property (copy, readonly) NSURL *file; // The track's location
+@property (readonly) double duration; // The track's duration in seconds
+@property (readonly) double sampleRate; // The track's sample rate in Hz
+@property (readonly) NSInteger bitDepth; // The bit depth
+@property (readonly) NSInteger channels; // The track's channels
+@property (copy) NSString *title; // The track's title
+@property (copy) NSString *artist; // The track's artist
+@property (copy) NSString *albumTitle; // The track's album title
+@property (copy) NSString *albumArtist; // The track's album artist
+@property NSInteger trackNumber; // The track's track number
+@property NSInteger trackTotal; // The total number of tracks on the album
+@property NSInteger discNumber; // The disc number containing the track
+@property NSInteger discTotal; // The total number of discs (for multidisc albums)
+@property BOOL partOfACompilation; // Is the track part of a compilation?
+@property (copy) NSString *genre; // The track's genre
+@property (copy) NSString *composer; // The track's composer
+@property (copy) NSString *releaseDate; // The track's release date
+@property (copy) NSString *ISRC; // The track's ISRC
+@property (copy) id MCN; // The track's MCN
+
+- (void) playTrack; // Play a track in the playlist
+
+@end
+