Resource Interchange File Format Services
[De functie die is gekoppeld aan deze pagina, multimediabestand I/O-, is een verouderde functie. Het is vervangen door bronlezer. Bronlezer is geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan dat nieuwe code bronlezer gebruikt in plaats van multimediabestand-I/O-, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]
De voorkeursindeling voor multimediabestanden is resource interchange-bestandsindeling (RIFF). De I/O-functies van het RIFF-bestand werken met de basisbuffered en niet-buffered bestands-I/O-services. U kunt RIFF-bestanden op dezelfde manier openen, lezen en schrijven als andere bestandstypen. Zie AVIFile Functions en Macro'svoor gedetailleerde informatie over RIFF.
RIFF-bestanden gebruiken vier tekens om bestandselementen te identificeren. Deze codes zijn 32-bits hoeveelheden die een reeks van één tot vier ASCII-alfanumerieke tekens vertegenwoordigen, die aan de rechterkant zijn opgevuld met spatietekens. Het gegevenstype voor codes met vier tekens is FOURCC-. Gebruik de macro mmioFOURCC om vier tekens te converteren naar een code van vier tekens. Als u een door null beëindigde tekenreeks wilt converteren naar een code van vier tekens, gebruikt u de functie mmioStringToFOURCC.
De basisbouwsteen van een RIFF-bestand is een chunk. Een segment is een logische eenheid van multimediagegevens, zoals één frame in een videoclip. Elk segment bevat de volgende velden:
- Een code met vier tekens waarmee de segment-id wordt opgegeven
- Een dubbele woordwaarde die de grootte van het gegevenslid in het segment aangeeft
- Een gegevensveld
In de volgende afbeelding ziet u een segment 'RIFF' dat twee subsegmenten bevat.
Een segment in een ander segment is een subsegment. De enige segmenten die subsegmenten mogen bevatten, zijn segmenten met een segment-id van 'RIFF' of 'LIST'. Een segment dat een ander segment bevat, wordt een bovenliggende segment genoemd. Het eerste segment in een RIFF-bestand moet een 'RIFF'-segment zijn. Alle andere segmenten in het bestand zijn subchunks van het segment 'RIFF'.
'RIFF'-segmenten bevatten een extra veld in de eerste vier bytes van het gegevensveld. Dit extra veld bevat het formuliertype van het veld. Het formuliertype is een code van vier tekens waarmee de indeling wordt aangegeven van de gegevens die in het bestand zijn opgeslagen. Microsoft waveform-audiobestanden hebben bijvoorbeeld een formuliertype 'WAVE'.
'LIST'-segmenten bevatten ook een extra veld in de eerste vier bytes van het gegevensveld. Dit extra veld bevat het lijsttype van het veld. Het lijsttype is een code van vier tekens waarmee de inhoud van de lijst wordt geïdentificeerd. Een segment 'LIST' met een lijsttype 'INFO' kan bijvoorbeeld segmenten 'ICOP' en 'ICRD' bevatten die informatie over copyright en aanmaakdatum bieden. In de volgende afbeelding ziet u een segment 'RIFF' dat een segment 'LIST' bevat en een ander subsegment (het segment LIJST bevat twee subsegmenten).
I/O-services voor multimediabestanden bevatten twee functies die u kunt gebruiken om tussen segmenten in een RIFF-bestand te navigeren: mmioAscend en mmioDescend. U kunt deze functies gebruiken als zoekfuncties op hoog niveau. Wanneer u afdaalt in een segment, wordt de bestandspositie ingesteld op het gegevensveld van het segment (8 bytes vanaf het begin van het segment). Voor segmenten 'RIFF' en 'LIST' wordt de bestandspositie ingesteld op de locatie na het formuliertype of lijsttype (12 bytes vanaf het begin van het segment). Wanneer u uit een segment gaat, wordt de bestandspositie ingesteld op de locatie na het einde van het segment.
Als u een nieuw segment wilt maken, gebruikt u de functie mmioCreateChunk om een segmentkop te schrijven op de huidige positie in een geopend bestand. De mmioAscend, mmioDescenden mmioCreateChunk functies gebruiken de MMCKINFO structuur om informatie over "RIFF"-segmenten op te geven en op te halen.