{"id":20134223,"url":"https://github.com/japlscript/obstmusic","last_synced_at":"2026-05-09T18:44:23.935Z","repository":{"id":40465087,"uuid":"403904393","full_name":"japlscript/obstmusic","owner":"japlscript","description":"Java API for the Apple Music app (macOS)","archived":false,"fork":false,"pushed_at":"2024-01-04T09:43:04.000Z","size":766,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-13T09:25:09.114Z","etag":null,"topics":["apple","applescript","japlscript","java","macos","music"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/japlscript.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-07T08:41:06.000Z","updated_at":"2024-06-01T16:58:05.000Z","dependencies_parsed_at":"2025-01-13T09:22:46.027Z","dependency_job_id":"b151b461-f9f0-495c-bb2a-596b8886e8bc","html_url":"https://github.com/japlscript/obstmusic","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/japlscript%2Fobstmusic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/japlscript%2Fobstmusic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/japlscript%2Fobstmusic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/japlscript%2Fobstmusic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/japlscript","download_url":"https://codeload.github.com/japlscript/obstmusic/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241580577,"owners_count":19985573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple","applescript","japlscript","java","macos","music"],"created_at":"2024-11-13T21:07:22.335Z","updated_at":"2026-05-09T18:44:23.873Z","avatar_url":"https://github.com/japlscript.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![LGPL 2.1](https://img.shields.io/badge/License-LGPL_2.1-blue.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.tagtraum/obstmusic/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.tagtraum/obstmusic)\n[![Build and Test](https://github.com/japlscript/obstmusic/workflows/Build%20and%20Test/badge.svg)](https://github.com/japlscript/obstmusic/actions)\n\n\n# Obstmusic\n\n*Obstmusic* is a Java API for the Apple Music app (macOS) based on\n[JaplScript](https://github.com/japlscript/japlscript).\n\n\n## Installation\n\nObstmusic is released via [Maven](https://maven.apache.org).\nYou can install it via the following dependency:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.tagtraum\u003c/groupId\u003e\n    \u003cartifactId\u003eobstmusic\u003c/artifactId\u003e\n\u003c/dependency\u003e\n```\n\nThe Maven artifacts also contain sources and javadocs. \n\nIf you are using [modules](https://en.wikipedia.org/wiki/Java_Platform_Module_System),\nits name is `tagtraum.obstmusic`.\n\n\n## Usage\n                           \nTo use the generated code, do something like this:\n\n```java\nimport com.tagtraum.macos.music.Application;\n\npublic class PlayPause {\n\n    public static void main(final String[] args) {\n        Application app = Application.getInstance();\n        // then use app, for example, to toggle playback (if a track is in the player)\n        app.playpause();\n    }\n}\n```\n\nOr this:\n\n```java\nimport com.tagtraum.macos.music.Application;\nimport com.tagtraum.japlscript.Reference;\nimport com.tagtraum.japlscript.execution.JaplScriptException;\nimport com.tagtraum.japlscript.language.Tdta;\n\nimport java.io.IOException;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\n\npublic class GetCurrentArtwork {\n\n    public static void main(final String[] args) throws IOException {\n        final Application application = Application.getInstance();\n        try {\n            final Track currentTrack = application.getCurrentTrack();\n            final Artwork[] artworks = currentTrack.getArtworks();\n            if (artworks.length \u003e 0) {\n                final Artwork artwork = artworks[0];\n                final Reference rawData = artwork.getRawData();\n                if (rawData != null) {\n\n                    // get image data\n                    final Tdta tdta = rawData.cast(Tdta.class);\n                    final byte[] imageData = tdta.getTdta();\n\n                    // get image format\n                    final String format = artwork.getFormat().getObjectReference().toLowerCase();\n                    final String extension;\n                    if (format.contains(\"png\")) extension = \".png\";\n                    else if (format.contains(\"tiff\")) extension = \".tiff\";\n                    else if (format.contains(\"gif\")) extension = \".gif\";\n                    else if (format.contains(\"bmp\")) extension = \".bmp\";\n                    else if (format.contains(\"pdf\")) extension = \".pdf\";\n                    else extension = \".jpeg\";\n\n                    // write image file\n                    final Path artworkPath = Paths.get(\"current_artwork\" + extension);\n                    System.out.println(\"Writing artwork to file \" + artworkPath);\n                    Files.write(artworkPath, imageData);\n                }\n            }\n        } catch (JaplScriptException e) {\n            System.out.println(\"No track loaded (we assume).\");\n        }\n    }\n}\n```\n\nOr this:\n\n```java\nimport com.tagtraum.macos.music.Application;\nimport com.tagtraum.macos.music.Track;\n\nimport java.io.IOException;\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\n\npublic class AddArtworkToCurrentTrack {\n\n    public static void main(final String[] args) throws IOException {\n        // path to artwork should be the first argument\n        final Path newArtworkFile = Paths.get(args[0]);\n        \n        final Application application = Application.getInstance();\n        \n        // get currently playing track\n        final Track currentTrack = application.getCurrentTrack();\n\n        // add artwork\n        currentTrack.addArtwork(newArtworkFile);\n    }\n}\n```\n\n## API\n\nYou can find the complete [API here](https://japlscript.github.io/obstmusic/com/tagtraum/macos/music/package-summary.html). \n\n\n## Shipping\n\nFor information about shipping apps with this library, please see\nthe corresponding notes about signing, notarization etc. in the\n[JaplScript documentation](https://github.com/japlscript/japlscript/blob/main/README.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaplscript%2Fobstmusic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaplscript%2Fobstmusic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaplscript%2Fobstmusic/lists"}