MMF Audio File Signature Format Specification & Recovery Example

MMF Audio Signature Format: Specification & MMF Recovery Example

Synthetic-music Mobile Application Format (SMAF), is a music data format specified by Yamaha for portable electronic devices, such as cell phones and PDAs. The file extension for SMAF is .MMF and is common as ringtones for mobile phones with one of five sound chips.

Any SMAF container must have a signature (tag) MMMD (hex: 4D 4D 4D 44) at the beginning of the file followed by 4-byte data size in (big-endian order, high byte first). MMF files are organized into data segments (chunks). Each segment is prefixed with an 8 byte header: 4 byte signature (CNTI, OPDA, MSTR, MTR or ATR) and 4 byte data size (big-endian order, high byte first). Chunk size is data size plus 8 bytes. Summarizing size for all found chunks, we calculate total file size. If MMF file has not been damaged, summarized file size should be equal to file size calclulated from a primary header.

Let's examine the sample

When inspecting sample.mmf file's data using any Hex Viewer, like Active@ Disk Editor, which is included in Active@ File Recovery package, we can see it starts with a signature MMMD (hex: 4D, 4D, 4D, 44). At offset 4 there is a data size: 6,119 (hex: 00, 00, 17, E7) in big-endian order (high byte first). Adding header length to the data size, we calculate a total MMF file size: 6,119 + 8 = 6,127 bytes. The first data chunk starts with CNTI signature and has a length of 40 bytes (hex: 00 00 00 28). The following data chunk starts with MTR signature and has a length of 1,553 bytes (hex: 00 00 06 11).

SMAF-MMF - signature inspection

More info:

SMAF Files Header:

struct SMAF_Header
{
	uint32   SignatureMMMD;		// Signature: "MMMD"
	uint32   SizeSMAF;		// 4 byte data size, big-endian order
};

Synthetic music mobile application format

Yamaha SMAF full specification

Active@ File Recovery Custom Scripting Example

This example just determins wav start signature and calculates file size based on the size specified in SMAF header.
Syntax of the signature definition language you can read here.

[MMF_HEADER]
DESCRIPTION=MMF Audio File
EXTENSION=mmf
BEGIN=MMF_BEGIN
SCRIPT=MMF_SCRIPT

[MMF_BEGIN]
MMMD=0|0


[MMF_SCRIPT]
	size = read(dword, 4)
	size = sum(size, 8)