The Siemens Gigaset Polyphonic Ringtone PSF File Format

by Danny Sullivan on March 31, 2006

in Gadgets

Way back in July, I wrote my Siemens Gigasets & Inability To Create Ringtones post. I know I’m not the only one still upset that it’s so hard to convert ringtones into the mystery Siemens format, because I can see from my query logs how people are coming to the page, entering things like “psf ringtones siements.” In a bit of good news, I heard from an anonymous reader who passed along the specs. They want the info out in public in hopes that someone can use it to make a converter. So here you go — and if anyone does make a converter, please let me know! Here’s what he sent:

Notes

  • This format was extracted from five known PSF files from Siemens and tested on S44 model
  • The MIDI families used is the device seem to be standard (for example: 0xA – drums)

General Issues

  • Any PSF file is a set of 16-bit words. These words must be written to the file in reversed bytes order. For example, if one has 0xDCBA, then the file contains 0xBADC. In the description I shall use notation 0xDCBA.
  • I shall use the following notation for 16-bit fields FEDCBA9876543210 where 0 stands for less significant bit and F stands for most significant bit.
  • PSF file consists of the header and the body. The body follows the header immediately.

Header Structure

  • 0xF010: 1 word (signature)
  • Tracks_number: 1 word. (not more then 512)
  • Tempo: 1 word.
  • Instruments used : Tracks_number words. Each word has format 0×00YZ, where Y stands for a family, and Z stands for the device inside the family. Thus, not more than 16 families each containing 16 devices can be used. Each family or device can be used several times in any order.
  • Tracks_offsets: Tracks_number words. Offsets must be calculated from the end of the header. Thus, the first offset always equals 0×0000.

Body Stucture

  • The body contains Tracks_number records, following each other immediately. Zero word must be written after the last record, i.e. 0×0000 : word (End_Of_File).

Record Structure

  • Start_record: 1 word. This is a bit field. Bits FEDCBA987 contain the record subsequent number (from 0). Bits 3210 (i.e. the lowest tetrade) contain track volume. Zero value corresponds to the highest volume. All other bits must be zero.
  • Sounds and pauses: arbitrary number of words. Each word is a bit field. The sound word has the following structure. Bits 3210 (i.e. the lowest tetrade) contain note. The following coding scheme is used:C_PSF=0×0F, CIS_PSF=0×01, D_PSF=0×02, DIS_PSF=0×03, E_PSF=0×05, F_PSF=0×06, FIS_PSF=0×07, G_PSF=0×09, GIS_PSF=0×0A, A_PSF=0×0B, AIS_PSF=0×0D, H_PSF=0×0E
    • Bits 987654 contain sound duration. Thus, it is measured in 1/64
    • Bits CBA contain octave number. The following coding scheme is usedBIG_OCTAVE=2, SMALL_OCTAVE=3, FIRST_OCTAVE=4, SECOND_OCTAVE=5, THIRD_OCTAVE=6, FOURTH_OCTAVE=7
    • Bits FED must be zero
    • The pause word has the following structure
      • Bits 3210 (i.e. the lowest tetrade) contain 0×0C.
      • Bits 987654 contain pause duration
    • All other bits must be zero
  • 0×4000 : word (End_record).

Significant Note

  • Each track has to start with some pause, at least 1/64 (i.e. word 0×001C)
  • Google Buzz

  • Share/Bookmark

Leave a Comment

Thinking of dropping your link spam? Consider this. Seriously, STOP & READ. The guy who runs Google's spam fighting team? I know him pretty well. In fact, it's sort of a joke between us to see what's the latest absurd link drop I can share. So if you want your site to be a poster child on his idiots wall -- and probably to encounter a Google penalty -- go ahead, drop your link. It's nofollow anyway, plus I do have built-in spam fighting and what gets past that usually gets nabbed in a few minutes to a few hours. So you got to ask yourself. Are you feeling lucky?

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Previous post:

Next post: