Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
yamaha-smaf-player — Un PLAYER C++ senza dipendenze per suonerie Yamaha SMAF (.mmf): il formato di suoneria polifonica dei chip per telefoni MA-3 / MA-5 degli anni 2000, ricostruito con il proprio motore FM senza ROM. Il player aperto che nessuno ha finito. Provato in FXChainPlayer. | Kitploit
Strumenti/GitHubGitHub/akustikrausch/yamaha-smaf-player
Sicurezza Sistemi EmbeddedReverse EngineeringSicurezza HardwareAnalisi del Firmware
GitHubakustikrausch/yamaha-smaf-player

yamaha-smaf-player

Un PLAYER C++ senza dipendenze per suonerie Yamaha SMAF (.mmf): il formato di suoneria polifonica dei chip per telefoni MA-3 / MA-5 degli anni 2000, ricostruito con il proprio motore FM senza ROM. Il player aperto che nessuno ha finito. Provato in FXChainPlayer.

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web
6211 mese faRevisionato da Kitploit

Yamaha SMAF Player (C++)

di Akustikrausch (Andreas Wendorf)

build license Apache 2.0 C++20 no dependencies Yamaha MA-3/MA-5 FM synthesis ROM-free proven in FXChainPlayer

un piccolo riproduttore (senza dipendenze) per suonerie Yamaha SMAF (.mmf) in c++. gli fornisci uno di quei file che facevano andare il tuo samsung, sharp o panasonic deedle-deedle-dee nel 2004, e lui ti restituisce audio stereo pulito. niente telefono, niente firmware, niente sample rom. solo il chip FM, ricostruito in software.

questo è il suono di un decennio intero che quasi nessuno si è preoccupato di preservare in codice aperto. ci sono milioni di questi file ancora in circolazione, e nessuno ha mai completato un player aperto per loro: i tentativi si sono arenati nel 2004 o aggirano completamente il sintetizzatore. quindi eccone uno in c++, scritto partendo dal formato, con il proprio core FM sintetizzatore.

🎧 questo codice è incluso in un prodotto reale: FXChainPlayer. un player audio nativo per Windows che riproduce le tue vecchie suonerie insieme ai tuoi FLAC, SID e moduli Amiga. è lì che questo motore gira ogni giorno, su un corpus di centinaia di suonerie reali di telefoni. scarica il player per ascoltare, oppure continua a leggere per sapere come funziona il chip.

perché esiste

la serie Yamaha MA (YMU762 = MA-3, YMU765 = MA-5) era il chip audio all'interno di una grandissima fetta dei telefoni dei primi anni 2000. è un vero sintetizzatore FM, un cugino stretto dei chip OPL/OPN dell'era AdLib e Sega Genesis, rimpicciolito per un telefono. i file che riproduceva, SMAF (.mmf), contengono una partitura FM più eventuali campioni ADPCM. la suoneria polifonica è nata qui.

poi arrivarono gli smartphone, le suonerie mp3 presero il sopravvento, e l'intero formato morì silenziosamente. yamaha ha tolto offline il suo sdk. e a differenza delle scene Amiga o C64, quasi nessuno ha scritto un emulatore. ciò che esiste:

  • MAME non ha un core MA-3 funzionante.
  • gli strumenti ufficiali di yamaha erano dll closed-source, ora scomparse.
  • mmfplay (c, 2004) è arrivato più lontano e poi si è fermato: mappa le partiture MA-3 su un emulatore OPL3 "come prova di concetto", si blocca con file convertiti da SMF, non ha licenza, e secondo il suo stesso readme "suona davvero male". ultima modifica due decenni fa.
  • umjammer/vavi-sound (java) analizza e riproduce smaf, ed è un ottimo riferimento comportamentale, ma non fa affatto sintesi FM: riconfeziona i suoni come general-midi e lascia che il synth di java li approssimi. ed è java.
  • ffmpeg analizza solo il lato adpcm e rifiuta completamente il sequencer FM.

quindi un player nativo, con licenza permissiva, senza rom del vero chip FM non esisteva. questo è quello. ogni byte del parser e ogni operatore del synth è stato scritto partendo dalla descrizione pubblica del formato SMAF più molta osservazione di file reali in un hex editor, mai copiando un altro player.

come funziona

il motore è composto da cinque piccoli pezzi, ciascuno testabile autonomamente:

root@kitploit:~
src/
  smaf_file      the MMMD container: big-endian TLV chunks (CNTI/OPDA/MTR/ATR),
                 two score generations (HandyPhone for MA-1/2, Mobile for MA-3/5)
  ma_player      the two event decoders (+ okumura huffman for the packed
                 variant), a scheduler that runs in milliseconds like the chip
                 did, and the render loop that drives a pool of FM voices
  ma_fm_core     the FM DSP: 2-op and 4-op operators, exponential ADSR envelopes,
                 the OPL-style connection algorithms, and its own general-midi
                 approximation patch bank
  smaf_voice     decodes the yamaha voice sysex blobs (VM35 for MA-3/5, VMA for
                 MA-1/2) into FM patches, including the MA-3 bit-packed form
  yamaha_adpcm   the YM2608-family 4-bit adpcm codec, for the sampled voices

il modello temporale è la bella sorpresa: SMAF non ha eventi di tempo, il tempo è puramente metrico (tempo evento = somma delle durate per una timebase, in millisecondi), quindi un tick corrisponde direttamente a un millisecondo e poi a campioni. il core FM gira direttamente alla tua frequenza di uscita, quindi non c'è ricampionamento sul percorso del synth.

la questione della rom (leggi questo)

i chip MA portavano anche una piccola rom di campioni general-midi così una suoneria poteva dire "riproduci programma 5" e ottenere un pianoforte preimpostato. quella rom è di yamaha, non è mai stata resa pubblica, e questo progetto non la include, non la vuole, e non la inserirà mai. questa è una linea dura.

invece, ma_fm_core porta la propria banca di patch FM costruita a mano che sostituisce la rom: un file che chiede "programma 5" ottiene una voce FM plausibile della famiglia giusta. non sarà identico bit a bit a un telefono del 2003, e questo è il compromesso onesto. ciò che ottieni è la vera partitura FM, la vera temporizzazione delle note, il vero ADSR, suonati da un sintetizzatore proprio. riconosciuto, e suona.

i file che portano le proprie voci personalizzate (molti lo fanno) suonano esattamente come composti, perché quelle voci vivono nel file, non nella rom.

avvio rapido

root@kitploit:~
cmake -B build && cmake --build build
./build/smaf-render your_ringtone.mmf out.wav 30

oppure collega la libreria al tuo codice:

root@kitploit:~
#include "smaf_file.h"
#include "ma_player.h"
using namespace fxchain::smaf;

SmafFile file;
file.parse(bytes.data(), bytes.size());       // MMMD container

MaPlayer player;
player.init(file, 44100);                      // build voices + decode the score

float buf[1024 * 2];                           // interleaved stereo
int frames = player.render(buf, 1024);         // pump the synth

stato

  • funziona oggi: il percorso FM (tutti gli 8 algoritmi di connessione MA/YMF825, il MULTI lineare, feedback per operatore, un indice di modulazione addomesticato e un filtro di uscita analogico-lite delicato per farlo suonare caldo come il chip, non stridulo), partiture HandyPhone (MA-1/2) e Mobile (MA-3/5), la variante compressa con Huffman, voci personalizzate, multi- traccia, pitch bend, volume, pan. più voci PCM incorporate: la banca di onde yamaha-adpcm viene decodificata e le voci di batteria/strumenti campionate suonano insieme alla FM.
  • prossimo: il blocco bulk voice-wave (43 79 06 7F 03) che alcuni file puramente drum-kit contengono i loro campioni; e le waveshapes più alte specifiche per SD-1. vedi ROADMAP.md.
  • fuori portata: i timbri della rom (vedi sopra), i chunk grafici, lo streaming MA-7, e il formato fratello MFi (.mld) (un cugino; vedi ROADMAP.md m3).

sicurezza

questo parser è pensato per processare file non fidati, quindi è scritto in modo difensivo: ogni lunghezza di chunk è limitata al buffer reale, la decompressione Huffman ha controlli su nodo + profondità e un tetto di output, e i decodificatori di eventi hanno limiti di iterazione + eventi totali. invece di crashare, degrada a "non un file SMAF valido". dettagli e segnalazione in SECURITY.md.

cosa contiene il pacchetto

src/ il motore (quattro piccole unità di traduzione più un codec header-only, nessuna dip.). example/smaf-render.cpp il CLI wav in meno di 100 righe. CMakeLists.txt costruisce una libreria statica smaf più l'esempio. tutto qui.

licenza

Licenza Apache 2.0 (vedi LICENSE). il parser e il synth sono lavoro originale; nessun codice di terze parti è incluso, e nessun materiale rom o sdk yamaha è incluso. la conoscenza del formato è derivata dalle specifiche pubbliche SMAF e dall'osservazione.

disclaimer

non affiliato, autorizzato o approvato da Yamaha. "SMAF" e i nomi dei chip MA sono di Yamaha. questo è un lavoro di interoperabilità: un player indipendente di un formato di file aperto, costruito senza alcun codice yamaha o la rom campione protetta.


saluti a tutti coloro che ricordano ancora il suono della propria suoneria.

Scarica lo strumento