MyGo 云音乐
Go와 MyGo로 만든 서드파티 네이버 클라우드 뮤직 데스크톱 클라이언트
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A player of chiptunes and tracker modules written entirely in Swift, in two forms: a page that
plays in your browser, and a command-line player for macOS. Both are the same emulators underneath:
of the sound chips of the ZX Spectrum, the Amstrad CPC, the Atari ST, the Commodore 64, the Amiga and
the PC's AdLib and Sound Blaster cards, and of the trackers that played modules on the Amiga and the PC.
The name is the two families of sound chip it began with, SID and AY. How to pronounce it is left open.README 전문 보기 ↗siday plays chiptunes and tracker modules. It is written entirely in Swift, and comes in three forms that share the same emulators:
It emulates the sound chips of the ZX Spectrum, the Amstrad CPC, the Atari ST, the 8-bit Ataris, the Commodore 64, the Amiga, and the PC's AdLib and Sound Blaster cards. It also plays the modules of the trackers of the Amiga and the PC, mostly through ports of those trackers' own replayers.
The name comes from the two families of sound chip it began with: SID and AY. How to pronounce it is up to you.
In a browser: open ptsochantaris.github.io/siday and drop tunes, or a whole folder, onto the page. Nothing is uploaded: the files are played where they are. See In a browser.
On the command line: point it at files, folders or playlists. See On the command line.
siday ~/Music/chiptunes --shuffle
Each format has a story: where it came from, and how siday plays it. Those are in FORMATS.md, and every player can show the story of the tune you are listening to. How siday is built, and how each part was checked, is in DEVELOPMENT.md.
| For | Formats | Played by |
|---|---|---|
| ZX Spectrum, Amstrad CPC | PT3, PT2, PT1, STC, STP, ASC, PSC, SQT, FTC, FXM, PSM, GTR, and TurboSound pairs; VTX and YM register recordings; AY program rips, beeper music included | each tracker's own player, or the tune's own program on a Z80, on the AY chip |
| Atari ST and STE | SNDH, packed with Ice or not; YM files from the ST, with its timer effects; sample tunes (MIX1, YMT1, YMT2) | the tune's own program on a 68000, on the ST's sound chip and the STE's samples |
| Atari 400, 800, XL and XE | SAP, for one POKEY or two | the tune's own program on a 6502, on the POKEY |
| Commodore 64 | SID (PSID and RSID) | the tune's own program on a C64, with either of two emulations of the SID chip |
| Amiga | MOD and its many packed forms, and over twenty other trackers and music systems: see On the Amiga | each format's own player, or a port or reading of it, on the Amiga's sound chip |
| PC trackers | XM, and MOD with more than four channels; S3M; STM and STX; IT; 669; FAR | the replayers of FastTracker 2, Scream Tracker 3, Scream Tracker 2 and Impulse Tracker; players written for 669 and FAR files |
| Other PC trackers | MTM, DTM, AMF; DSM; GDM, PTM, ULT, C67, MDL, DMF, IMF, AMS, PLM; MPTM; MT2; J2B (Jazz Jackrabbit 2), packed with zlib | converted for FastTracker 2's replayer (the first three), Scream Tracker 3's (DSM), or Impulse Tracker's (the rest) |
| Modules packed by Un4seen | MO3, with its samples packed or kept as MP3 or Ogg Vorbis | unpacked into the IT, XM, S3M, MOD or MTM it was made from, and played as that is |
| Epic MegaGames' DOS games | PSM files of MASI, their music system (Epic Pinball, Silverball, Jazz Jackrabbit, Extreme Pinball, Sinaria), told apart from the ZX Spectrum's PSM by how they begin | converted for Scream Tracker 3's replayer |
| Sierra's adventure games, King's Quest to Manhunter | AGI sounds | either of Sierra's own two routines for the Amiga, on the Amiga's sound chip; or the PCjr's and Tandy 1000's chip, as Sierra's interpreter wrote to it |
| Recordings, such as the CD audio of CD32 and CDTV games | Ogg Vorbis, MP3 (and MP2), WAV | ports of stb_vorbis and minimp3; brought to 48 kHz, a voice for each side |
A playlist, in Ay_Emul's AYL format or an M3U (such as VGM packs come with), plays the tunes it names, in its order, whatever kind of tune each is.
Each player here was compared with a reference player, most of them sample for sample. DEVELOPMENT.md says what each is made from and what it was checked against. What is not played, or played with something missing, is under Playback caveats.
Modules of four channels (ProTracker's and its relatives') are played by ProTracker 2.3D's replayer. That covers modules:
Trackers with players of their own, each played by a port of its own player: PumaTracker, Pierre Adane's packed modules (with their samples alongside), Game Music Creator, Images Music System, SoundMon 2.0 and 2.2, SidMon and SidMon II, Digital Mugician and Mugician II (seven voices), Delta Music 2.0, Sonic Arranger, the Musicline Editor, Infogrames' scores, Fashion Tracker, the Peter Verswyvelen Packer, the Alcatraz Packer, Digital Sonix & Chrome's, Andrew Parton's, the Editeur Musical Séquentiel, Forgotten Worlds', the Leggless Music Editor, JamCracker, A.M.Composer, Professional Sound Artists, The Musical Enlightenment, Steve Turner's, Cinemaware's (with its instruments folder), Paul Shields', Lemmings' SoundPlayer, Paul Robotham's, Thomas Hermann's, Soundfactory, Synth Dream, the Blade Packer, Tim Follin's, Paul Summers', Action Amics, David Hanney's, Ron Klaren's, Jason Page's, SoundControl, and Karsten Obarski's Synth Pack, and Silmarils'.
Music systems:
Composers' own players:
Other trackers:
ptsochantaris.github.io/siday is the player as a web page. It is Swift too: the emulators and the page itself are compiled to WebAssembly. Drop tunes or a whole folder onto it, and it plays them. Nothing is uploaded: the files are read where they are and never leave your computer.
You can also drop a playlist, and the files some tunes need alongside them:
A web page can only read the files it is given. So it can't follow a playlist to its tunes on your disk, or a tune to its samples. If you drop a playlist on its own, or a tune that needs its samples, the page says so and asks for the folder they are in. It only looks in that folder, and remembers it for whatever you drop next. Or drop the folder that holds both.
Alongside the player and its list are:
A song is rendered to its end as soon as it starts, far faster than it plays, so you can jump to any point in it. A tune that isn't played quite as its file asks has a small ≈ beside its name: see Playback caveats. Press the name of the tune's format, beside its title, to read what FORMATS.md says about it while the tune plays.
Each light is also a button that mutes its voice, or plays it alone: see Muting a voice.
To run the web player from a copy of this repository, see DEVELOPMENT.md.
siday is also an app for macOS and iOS 26 or later, written in SwiftUI. It has what the web page has:
It opens every kind of file siday plays: from the Finder or the Files app, by drag and drop, or with Add Files and Add Folder. It keeps its list from one day to the next. In the Finder and the Files app, Quick Look shows a tune's details, and plays it with its voices' lights and scopes, as it plays a recording: at once in the Finder, and when you press play in the Files app. Each tune has a picture of the chip it was made for, the SID, the AY, Paula, an OPL or a Gravis Ultrasound's GF1 among them, on the colour of its machine's board: in the list, in the player, in Quick Look and on the lock screen. Every command is in its menus, each with a key. It passes the system's accessibility audit (VoiceOver labels, every text size, contrast). It is not yet in the App Store, but you can try the beta through TestFlight.
siday is the player for the terminal, on macOS 26 or later. To build it:
swift build -c release --package-path CLI
The binary is CLI/.build/release/siday (swift build -c release --package-path CLI --show-bin-path prints the folder). Always use a release build: the emulators are far too slow in a
debug build.
siday <files, folders or playlists…>
Folders are searched recursively, and files are recognised by their extension. Files are only ever read, never written.
A playlist (an AYL or M3U file) is played as written: the tunes it names, in its order, each with whatever the list says about it.
In a folder, tunes play in the order of their names. A playlist in a folder sets the order of the tunes beside it and below it: they are played where the list is, in its order. The tunes a list names from elsewhere are only added if the folder doesn't hold them. So a collection kept as one folder of tunes and many lists is played once through, and a folder of nothing but lists is played too.
While a tune plays:
| Key | Does |
|---|---|
space | pause |
n or → | next tune |
p or ← | previous tune |
+ / - (or ↑ / ↓) | next or previous subsong |
i | the story of the tune's format, from FORMATS.md |
q | quit |
Each voice of the tune has a light on the status line: a bar as tall as the voice is loud, four to a group. There are keys to mute a voice or play it alone: see Muting a voice.
A tune that isn't played quite as its file asks says what is missing when it starts, one line for each thing.
| Option | Effect |
|---|---|
--shuffle | Random order |
--formats pt3,sid | Only these formats |
--match text | Only paths containing the text |
--loops n | Times through a looping tune before it fades (default 1) |
--fade seconds | Fade-out for a tune that is still playing where it ends (default 20, and never longer than the tune itself) |
--default-time m:ss | Time given to tunes whose length is unknown (default 3:00) |
--max-time m:ss | Cap on any tune |
--subsong n / --all-subsongs | Start at song n / play every song of multi-song files |
--chip ay|ym, --clock Hz, --frame-rate Hz | AY settings. Defaults: what the file says; otherwise an AY at 1773400 Hz and 50 Hz |
--output mono|abc|acb|plastic|wood | What the tune is heard through (default mono; see below) |
--level off|full|partial | Bring every tune to the same loudness, or halfway there (see below). Off by default |
--s3m-card gus|sb | The sound card an S3M file is played on: a Gravis Ultrasound, or a Sound Blaster Pro (8-bit, 22 kHz). Default: the one the file was saved with, where it says; otherwise the GUS |
--amiga-separation 0…100 | How far apart a module's left and right are kept, in percent (default 20). 100 is the Amiga's own hard left and right, which is harsh in headphones |
--sb-pro-separation 0…100 | The same for a VGM recording of the first Sound Blaster Pro (one FM chip on each side), or of the Creative Music System (whose voices are mostly on one side); and for a SAP file for two POKEYs, one on each side (default 20). 100 is the hardware's own |
--agi amiga|amiga-later|pc | How a Sierra AGI sound is played: with the first routine of the games' Amiga versions (the default; square waves), with the later one (rounder waves that die away), or on the PCjr's and Tandy 1000's chip, which the music was written for |
--amiga a1200|a500 |
--output: Mono is the default, because many AY tunes layer the chip's three channels into one
sound. abc and acb spread the channels left, centre and right. A SID has a single output, so a
SID tune stays mono with these; a module has a stereo image of its own, which they leave alone.
plastic and wood are the speaker of an early-1980s television (see
Through a television), which is mono too.
--level: full brings every tune to the same loudness. partial goes halfway, so a quiet tune
is still quieter than a loud one, but not by as much. Each song is measured by playing it through,
silently, alongside the song you are hearing, and the next song is measured while that one plays. A
song not yet measured waits up to a second to be measured before it starts. If that isn't enough,
it starts at about its level, judged from what has been measured so far, and glides to its level over
a second once the whole song has been measured. No song is turned up by more than 6 dB. Levels are
kept in ~/Library/Caches/siday/levels.txt. With --list, it says how far each tune would be turned
up or down.
--loops times).--default-time.Songlengths.md5 is asked first, when there is one: named with
--songlengths (once is enough), in $SIDAY_SONGLENGTHS, or found in a DOCUMENTS folder
above the tune, or one kept with --roms, or dropped on the app or the web page (they keep it).
That is the way to use a newer release's lengths. It also finds a tune by its
path inside HVSC when its content differs.--default-time.--loops times, like a module. One that doesn't loop
ends where its writes do, with the same extra second.+ and - move
between songs.These chips were written for, and heard through, a television: one small paper cone in a vented
plastic or wooden cabinet, fed by a sound stage with little treble to give. --output plastic and
--output wood put that between the chip and your speakers. In the browser the same two are in the
list of outputs, and can be switched while a tune plays, to compare the sound with and without.
A television has one loudspeaker, which is why it is a choice alongside mono and stereo rather than
on top of them.
| Stage | What it does |
|---|---|
| One speaker | The two channels are added together |
| Sound channel | Treble falls away gently from about 4.5 kHz |
| Amplifier and cone | Loud passages are bent slightly, adding a little second and third harmonic |
| Speaker | No bass below its own resonance (about 170 Hz in plastic, 90 Hz in wood), and little above 6 to 7 kHz |
| Cabinet | A few resonances with a dip between them: the boxy low-middle and the forward upper-middle of a small set |
plastic is a small portable: thin and forward. wood is a large set in a veneered cabinet: fuller
and rounder. The level in the middle of the range is kept where it was. No particular set was
measured: the figures are typical ones, chosen by ear.
An AY file can only ask for its music routine once every 1/50 s. A few games drove their music from
a free-running loop instead, and their rips only approximate that rate, not always well. Files known
to be off are corrected by their content, and show "timing corrected" when they play. So far those
are the Exolon 128K title tune, which the rip plays 14% fast, and the Kenny Dalglish Soccer Match
menu tune, which it plays 5% slow. Giving --frame-rate plays any file exactly as written.
Any voice of a tune can be left out, or heard alone:
1 to 9 (and 0 for the tenth) mute a voice and
bring it back. [ and ] choose a voice, shown highlighted; m mutes it, and s plays it alone
(s again brings the others back). A muted light is faint, and every tune starts with all its
voices. --mute 2,4 and --solo n do the same for every tune, played or rendered to WAV. Voices
are numbered from 1, as the lights are.A voice means something different in each player: a channel of a chip, a track of a module, a note left ringing behind a newer one. The rule is the same for all of them. A muted voice is left out where it joins the others, but goes on playing. So the tune keeps its timing and comes to the same end, and what is shown of the voice (its light, its pitch, its side) is what would be shown if it were heard.
Because it is left out only where it joins the others, whatever the voices share is still shared, and some of that can be heard:
The browser renders each song to its end as it starts, so a mute can't simply be switched on: the song is rendered again from the beginning without the muted voices. You go on hearing the old rendering until the new one catches up, so nothing stops. That is why the effect comes a moment after the press, and later in a long tune of a kind that is slow to render. The song without some of its voices ends exactly where the whole song did, fade and all. A change between mono and stereo, or to a setting that changes the sound, is handled the same way.
A file that is played with something missing or substituted says so, in a sentence for each thing:
"Three of its instruments play through plug-ins, and are not heard." The page puts a small ≈ beside
its name, and siday --list --shortfalls prints the sentences. Only what the tune itself uses is
mentioned, and only what might be heard.
Not played:
Played, with a difference:
GNU General Public License, version 2 or (at your option) any later version; see LICENSE. Two parts,
the driver for CMF files and the replayer for STM files, come from work under the Apache License 2.0,
which is compatible with version 3 of the GPL but not version 2, and the FM driver for MIDI files is
ported from libADLMIDI's, under version 3 or later. (The MT-32's synthesiser, ported from Munt, is
under the LGPL 2.1 or later.) So the player as a whole is passed on under
version 3 or later.
This project stands on other people's work: the emulators, players and readings below are ported
from theirs, or written to behave as theirs do and checked against them. THIRD-PARTY.md lists what
came from where, and under which terms.
.ay format is as he and
Patrik Rak describe it.--sid-engine resid).swift-argument-parser for the command line, and ElementaryUI and JavaScriptKit for the page in the browser.
| AdLib and Sound Blaster FM, the Creative Music System, the PC speaker, the PCjr and Tandy 1000 | CMF, ROL, FMT; MIDI files (on the FM chip, but see the MT-32 and the Sound Canvas); VGM and VGZ recordings of the OPL, OPL2 and OPL3, of the Creative Music System's two SAA1099s, of the AY-3-8910 that PC speaker music is recorded as, of the samples a Sound Blaster played, and of the SN76489 | Creative's driver, AdLib's driver, OpenMPT's reading and libADLMIDI's General MIDI driver, on the FM chip; a recording's own writes, at their own moments, on the FM chip, the SAA1099, the AY chip, the SN76489 or a DAC |
| The Roland MT-32 (as the LAPC-I and CM-32L) | MIDI files written for it, once siday has been given its ROMs | A port of Munt's mt32emu |
| The Roland SC-55, the first Sound Canvas | General MIDI, GS and XG files, and MT-32 files when there are no MT-32 ROMs, once siday has been given its ROMs | A port of Nuked SC-55 |
| Which Amiga a module is heard on. The 1200 by default. The 500 has a low-pass filter at 4.4 kHz in the way: the darker sound much Amiga music was written on |
--sid-model auto|6581|8580 | SID model (default: what the tune asks for) |
--sid-engine residfp|resid | SID emulation. reSIDfp by default; reSID 1.0 is lighter, and its 6581 filter is drier |
--sid-filter-curve 0…1 | Where the 6581's filter sits, from bright to dark (default 0.5). Real chips varied this much. reSIDfp only |
--songlengths path | A copy of HVSC's Songlengths.md5, asked before the built-in lengths; remembered for later runs. A file with no lengths in it is ignored |
--roms files or folders | A CM-32L's or LAPC-I's ROMs (whole or in halves, of any names), or an SC-55's of firmware 1.21, which siday keeps from then on, and plays MIDI files with: those written for the MT-32 on the first, the rest on the Sound Canvas. A Songlengths.md5 among them is kept too. --kept says what is kept, --forget-kept forgets it, and $SIDAY_KEPT names a folder of them for one run that is never written |
--mute 2,4 / --solo n | Leave these voices out of every tune, or hear only this one: see Muting a voice |
--wav folder | Render to WAV files instead of playing (existing files are not overwritten) |
--list | Show what would be played, with format, length and title. A * after the length marks a tune that isn't played quite as its file asks |
--shortfalls | With --list, say under each marked tune what is left out or made do for |
--check | Load every file and render a few seconds silently, then report per format; the last column counts the tunes --list would mark |
--bench | Render at full speed and report the multiple of real time |
--about it | Print what FORMATS.md says about a format (named, or given by one of its files), and exit |
+ and - move between them, and --list --all-subsongs shows how long each is. Some of what
turns up isn't a song, but patterns the composer left behind after the end of the list.