{"id":22104861,"url":"https://github.com/nemeslaszlo/musicbox-and-client","last_synced_at":"2025-03-24T02:43:39.483Z","repository":{"id":117466340,"uuid":"183268709","full_name":"NemesLaszlo/MusicBox-and-Client","owner":"NemesLaszlo","description":"Shared Systems. A music playback software where the music / notes and text of the music are stored on a server, which can be play by different clients and write the text of the musics like in the \"karaoke\" program, with other playback modifications.","archived":false,"fork":false,"pushed_at":"2019-08-29T19:39:27.000Z","size":97,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-29T08:44:12.118Z","etag":null,"topics":["client","java","multithreading","musicbox","server","server-client","socket"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NemesLaszlo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2019-04-24T16:39:18.000Z","updated_at":"2021-11-20T02:45:57.000Z","dependencies_parsed_at":"2023-07-17T16:47:51.162Z","dependency_job_id":null,"html_url":"https://github.com/NemesLaszlo/MusicBox-and-Client","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/NemesLaszlo%2FMusicBox-and-Client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NemesLaszlo%2FMusicBox-and-Client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NemesLaszlo%2FMusicBox-and-Client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NemesLaszlo%2FMusicBox-and-Client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NemesLaszlo","download_url":"https://codeload.github.com/NemesLaszlo/MusicBox-and-Client/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245200670,"owners_count":20576673,"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":["client","java","multithreading","musicbox","server","server-client","socket"],"created_at":"2024-12-01T06:35:52.806Z","updated_at":"2025-03-24T02:43:39.458Z","avatar_url":"https://github.com/NemesLaszlo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MusicBox-and-Client\n\n## Szerver\n\nKészítsd el a `MusicBox` osztályt, amelynek főprogramja egy szervert indít el a `40000` porton. A szerver dalokat tárol el és játszik vissza; egyszerre tetszőlegesen sok klienst tud kiszolgálni. A szerver a következő fajta szöveges üzeneteket várja:\n\n- `add \u003ccím\u003e`: a megadott című dal feltöltése\n  - a következő sor tartalmazza a dal adatait: a hangokat és azok hosszát\n    - a hangok hossza nyolcadokban van megadva\n    - `R` jelentése szünet\n    - `REP n;m` jelentése: a legutóbbi `n` hangot meg kell ismételni `m` alkalommal\n      - feltehető, hogy az ismétlésben csak “szokásos” hangok érintettek (`R` és `REP` nem)\n    - a hangok alakja a szokásos (pl. `C` vagy `Db`), és lehetnek magasabb (`F/1`, `A#/3`) vagy alacsonyabb (`Bb/-1`, `D#/-2`) oktávban\n  - példa: `C 4 E 4 C 4 E 4 G 8 G 8 REP 6;1 C/1 4 B 4 A 4 G 4 F 8 A 8 G 4 F 4 E 4 D 4 C 8 C 8`\n  - példa: `D 1 D 3 D/1 1 D/1 3 C/1 1 C/1 3 C/1 2 C/1 2 D/1 1 D/1 3 C/1 1 Bb 3 A 4 A 2 R 2 REP 15;1 Bb 4 A 2 G 2 F 1 F 3 E 2 D 2 G 2 G 2 C/1 2 Bb 2 A 4 D/1 2 R 2 C/1 1 Bb 3 A 2 G 2 G 1 A 3 G 2 F 2 A 1 G 3 F# 2 Eb 2 D 4 D 2 R 2`\n  - ha már létezik a megadott nevű dal, a feltöltés felülírja\n- `addlyrics \u003ccím\u003e`: a megadott című dalhoz szöveg feltöltése\n  - a következő sor tartalmazza a szöveget: minden hanghoz egy szótagot, szóközökkel elválasztva\n  - példa: az első dalhoz `bo ci bo ci tar ka se fü le se far ka o da me gyünk lak ni a hol te jet kap ni`\n    - a `REP` részekre értelemszerűen a soron következő szótagok esnek, itt a `se fü le se far ka`\n- `play \u003ctempó\u003e \u003ctranszponálás\u003e \u003ccím\u003e`: a megadott című dal lejátszása\n  - a `tempó` azt adja meg, hogy egy nyolcadhang hány ezredmásodpercig tartson\n  - a `transzponálás` azt adja meg, hogy hány félhanggal az eredeti fölött/alatt játssza le a rendszer a dalt\n  - a lejátszás menete a következő\n    - a lejátszás kap egy sorszámot, ezt a szerver `playing \u003csorszám\u003e` szöveg elküldésével jelzi a kliensnek\n    - a szerver elküldi a kliensnek a dal hangjait a megfelelő ütemezéssel\n      - az elküldött tartalom maga a hang és a dalszöveg megfelelő szótaga: `C bo`, `E ci`, …\n        - ha a szótag nem ismert (ha nincsen feltöltve dalszöveg, vagy van, de túl rövid), `???` kerül a helyére\n        - lejátszás közben is feltölthető dalszöveg, ez a következő lejátszott hangtól jelenjen is meg\n        - szünethez sosem tartozik szótag\n      - a dal végét `FIN` jelzi a kliens számára\n        - ha nem ismert a dal, rögtön `FIN`-t kap a kliens\n- `change \u003csorszám\u003e \u003ctempó\u003e \u003ctranszponálás\u003e`: a megadott sorszámú dal paramétereinek megváltoztatása; a következő hangtól módosítja a lejátszást\n  - a kliens akkor is kiadhatja ezt az utasítást, ha nem felé játssza le a szerver a dalt\n  - a transzponálás paraméter le is hagyható, ekkor `0`-nak tekintendő\n- `stop \u003csorszám\u003e`: a megadott sorszámú dalból nem játszódik le több hang a kliens felé; amint lehet, a kliens megkapja a `FIN` üzenetet\n\n## Kliens\n\nKészíts `MusicBoxClient` klienst, amely képes csatlakozni a portra, és a parancssorban megadott adatokkal `play` üzenetet küld a szervernek, majd fogadja a dal hangjait/szövegét, és lejátssza/megjeleníti őket.\n\n- Két lépést előre meg kell tenni.\n  - A lejátszáshoz először meg kell hívni a [`MidiSystem` osztály `getSynthesizer()` metódusát](\u003chttps://docs.oracle.com/en/java/javase/12/docs/api/java.desktop/javax/sound/midi/MidiSystem.html#getSynthesizer()\u003e).\n  - Ezután [meg kell nyitni](\u003chttps://docs.oracle.com/en/java/javase/12/docs/api/java.desktop/javax/sound/midi/MidiDevice.html#open()\u003e) a kapott `Synthesizer` objektumot, és ennek csatornái ([getChannels()](\u003chttps://docs.oracle.com/en/java/javase/12/docs/api/java.desktop/javax/sound/midi/Synthesizer.html#getChannels()\u003e)) közül ki kell választani egyet, pl. a legelső a zongora.\n- Hang képzéséhez a csatornán a megfelelő ütemben meg kell hívni a [noteOn()](\u003chttps://docs.oracle.com/en/java/javase/12/docs/api/java.desktop/javax/sound/midi/MidiChannel.html#noteOn(int,int)\u003e) és [noteOff()](\u003chttps://docs.oracle.com/en/java/javase/12/docs/api/java.desktop/javax/sound/midi/MidiChannel.html#noteOff(int)\u003e) metódusokat.\n  - A metódusok első paramétere adja meg, melyik hang szóljon. A `C` hang kódja `60`, innen minden lépés egy félhangnyi távolságra van: `C#` kódja `61`, `Bb/-1` kódja `58`, `Db/1` kódja `73`…\n\nÚj dal és dalszöveg feltöltése szokásos konzolos klienssel (PuTTY vagy telnet) tehető meg, de igény szerint szabad hozzá saját kliensprogramot készíteni.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnemeslaszlo%2Fmusicbox-and-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnemeslaszlo%2Fmusicbox-and-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnemeslaszlo%2Fmusicbox-and-client/lists"}