====== MusicMaster Nexus Database Connection ====== In this tutorial, you will learn how to set up the MusicMaster Nexus Database connection in mAirList. Using this method, the mAirList playout application can be attached directly to the [[http://www.musicmaster.com|MusicMaster database]] through the [[https://www.musicmaster.com/nexus.php|MusicMaster Nexus API]], with no mAirList database (mAirListDB) database in between, and thus without the need for any synchronization between the MusicMaster and the automation database. This is visualized in the picture below: {{ :tutorials:musicmaster:pasted:20180424-101043.png?400 }} The Nexus Database Connection is not part of the regular buyout licenses of mAirList. Please contact sales for licensing options and pricing. ===== Prerequisites ===== We assume that the following is available: * A MusicMaster database. * A Nexus server, or a MusicMaster Client/Server database implementing the Nexus API; the HTTP port must be reachable from the playout computer, optionally through a reverse proxy. * A folder with audio files, accessible through a Windows share or HTTP server; the file names (without folder) of the individual must be entered into a MusicMaster field. Please check with MusicMaster support if you are unsure whether your MusicMaster installation provides the above requirements. ===== Nexus API Configuration ===== Before you can configure the database connection, you must set up the Nexus API in the mAirList configuration. In particular, the following fields must be mapped correctly between MusicMaster and mAirList: * Artist, Title and their Keywords * Filename * XML Metadata (mAirList will store additional technical metadata here) Please follow the instructions found here: [[tutorials:musicmaster:nexus-api-setup|MusicMaster Nexus API Setup]] ===== Database Connection Setup ===== Once the Nexus API has been set up, go to the //Database// page in the mAirList configuration app, click //Add// and then //MusicMaster Nexus Server//. A new configuration dialog will appear. ==== General settings ==== On the first page, select the Nexus API (host, port and database name) to be used; we assume that it has been [[tutorials:musicmaster:nexus-api-setup|set up in the mAirList configuration]] correctly. {{ :tutorials:musicmaster:pasted:20180424-101747.png?400 }} You can also enable reconciliation here. If turned on, mAirList will report all song start/stop events to MusicMaster in realtime. ==== Library settings ==== On the //Library// tab, specify where mAirList-specific metadata will be retrieved from and stored at. * //MusicMaster (read/write):// Metadata is retrieved from the MusicMaster database. Metadata updates go back into the MusicMaster database. All mAirList-specific fields for which no field mapping exists will be stored in an XML block inside the field mapped to //XML Metadata//. * //MusicMaster (read-only):// Metadata will be retrieved from MusicMaster, but mAirList will never write back any metadata updates. * //Other database (by Internal ID)// and //Other database (by External ID)//: Allows you to use another database connection as metadata source; see section on third-party libraries below. {{ :tutorials:musicmaster:pasted:20180424-102516.png?400 }} "Other database" requires another database attached to your mAirList instance (e.g. a [[tutorials:mairlistdb:getting-started|mAirListDB]], or a third-party database implemented through a script), you can also use that database as metadata store; only the schedule is fetched from MusicMaster then, all song metadata is fetched from the third-party database. In the //Other databases// box, you can define the pattern to use for the ID, using the following variables: * ''$SONGID'': The MusicMaster song ID * ''$DBID'': The value of the field defined as //Database ID// in the System Field Mapping on the //Databases// tab. * ''$VERSION'': The version tag; see Versioning below. In case the ID must be extracted from the //Database ID// field, you can specify a regular expression to do so (Perl format, first match will be the ''$DBID''). Versioning is a feature used with third-party databases where multiple versions of a particular song exist; the version to play is included as an XML attribute in the schedule returned from Nexus, e.g. ''transition''. You can adjust that name on the //General// tab in the configuration. You can also specify the default version in case the attribute is not present for a particular schedule entry. The version string is then available as the ''$VERSION'' variable in the ID pattern. ==== Content settings ==== When loading schedules from MusicMaster, mAirList can replace lognotes (identified by a particular title) with other content loaded from external files, e.g. logs from a third party scheduling system. This feature is configured on the //Content// tab. {{ :tutorials:musicmaster:pasted:20180424-103403.png?400 }} For advertising import, specify an "import source" (file location and filename pattern), similar to the configuration of traffic logs in the [[tutorials:mairlistdb:advertising-scheduling#importing_traffic_logs|mAirListDB advertising scheduling]]. Any number following the prefix will be treated as the ad block number, e.g. "Traffic 15" will trigger import of advertising block 15. For other external content, specify a prefix (e.g. "EXTERNAL") which must be followed by the name of a playlist file in the lognote title (e.g. "EXTERNAL news.m3u"). You can set a default folder where mAirList will look for the files unless an absolute filename is specified in the lognote. For the configuration of region suffixes, see section on Regionalization below. ==== Colors ==== If a MusicMaster field was mapped as "Color" in the API setup, you can enable automatic coloring of items in the playlist based on its values. Just enter the desired mapping as ''= [UserButton1] Tooltip=Look for New Files in mAirList Image=C:\mAirList\Icons\nexusimporter.ico App=C:\Program Files (x86)\mAirList 6.3\mAirList.exe CommandScript="-mode nexusimporter -songid " & mm.GetField(1) If you are working with more than one MusicMaster database, you must additionally pass the name of the database on the command line: CommandScript="-mode nexusimporter -database """ & mm.DatasetLogo & """ -songid " & mm.GetField(1) In that case, all databases must be registered in the Nexus API configuration of mAirList. In order to identify the database, mAirList will first compare the value to the Nexus ID, then to the alias set in the Nexus API configuration. ===== Editing Music ===== Generally, all library maintenance should be performed from inside MusicMaster. There are a few things however that cannot be edited easily from MusicMaster. In particular the cue markers, as MusicMaster does not have any built-in editing tool. If you need to edit any fields that are not easily accessible from MusicMaster, you have the option to use mAirList's //File Tagger// tool, found in the mAirList Start Menu Group. The File Tagger is basically a browser (as found in the main playout window) and an item properties dialog (the same that you get when you double-click an item in the playout). In the browser part, click //Add// and add a new //Database// pane. This will give you access to all MusicMaster categories and the songs inside them. Double-click a song to edit its properties. When you are finished, **don't forget to click //Export -> Export to Database//** in order to store your changes permanently inside the MusicMaster library. Starting with mAirList 6.3.8, another way to edit items has been established: The //Nexus Editor//, integrated into MusicMaster via a User Button: [UserButton2] Tooltip=Edit song in mAirList Image=C:\mAirList\Icons\nexuseditor.ico App=C:\Program Files (x86)\mAirList 6.3\mAirList-tmp.exe CommandScript="-mode nexuseditor -songid " & mm.GetField(1) When working with more than one database, you must pass the database name on the commandline, and it must match the Nexus database ID or alias set in the config (see comments above): CommandScript="-mode nexuseditor -database """ & mm.DatasetLogo & """ -songid " & mm.GetField(1) ===== Regionalization ===== [[tutorials:region-playout|Regionalization (region splitting)]] is a feature in mAirList which provides special "Region Container" playlist items that have different content for multiple regions, routed to separate audio outputs or streams. mAirList can create region containers from items found in a Nexus Schedule. This requires a little bit of preparation: First, we need to define a filename suffix for each region to be used. Imagine you are broadcasting to three regions "A-Town", "B-Town" and "C-Town". We will use the following filename suffixes: ''-ATOWN'', ''-BTOWN'', ''-CTOWN''. We enter these suffixes on the //Content// tab in the database connection properties: {{ :tutorials:musicmaster:pasted:20180424-105812.png?400 }} So for example, a regionalized jingle "jingle1" must exist in three versions: jingle1-ATOWN.mp3 jingle1-BTOWN.mp3 jingle1-CTOWN.mp3 These should all have the same duration obviously. But most importantly, **they must all reside in the same Windows folder**. In the MusicMaster library, set up a new YesNo field (e.g. "Regionalized") and tick it for the above items. Don't forget to map it to "Regionalized" in the mAirList Nexus API setup. Then create a category+clock that will schedule **one** of the regionalized versions, e.g. ''jingle1-ATOWN.mp3'' - which one doesn't really matter. Now when mAirList encounters the ''jingle1-ATOWN.mp3'' file in the schedule and notices that it's a regionalized item, it will gather the matching items for the other regions (based on the filename suffixes) and create a Region Container from all of them. ===== Automation Setup ===== (work in progress) Similar to mAirListDB automation setup, see here: [[tutorials:mairlistdb:music-scheduling#set_up_an_hourly_event_for_automation|Music Scheduling with mAirListDB]]