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:
- 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)
- 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.
- 0xF010: 1 word (signature)
- Tracks_number: 1 word. (not more then 512)
- Tempo: 1 word.
- Instruments used : Tracks_number words. Each word has format 0x00YZ, 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.
- 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).
- 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=0x0F, 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=0x0A, A_PSF=0x0B, AIS_PSF=0x0D, H_PSF=0x0E
- 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 0x0C.
- Bits 987654 contain pause duration
- All other bits must be zero
- 0×4000 : word (End_record).
- Each track has to start with some pause, at least 1/64 (i.e. word 0x001C)