&arts; programmeringsgränssnittÖversiktaRts är inte enbart ett program, den tillhandahåller också ett antal olika programmeringsgränssnitt (API) för olika syften. I det här avsnittet, försöker jag beskriva "helhetsbilden", en snabb överblick av vad de här gränssnitten är tänkta att användas till, och hur de hänger samman. Det finns en viktig distinktion som måste göras: De flesta gränssnitten är språk- och platsoberoende eftersom de är specificerade som mcopidl. Det här betyder att man egentligen kan använda den service som de tillhandahåller från vilket språk som helst, implementera dem i vilket språk som helst, och man behöver inte bry sig om ifall man pratar med lokala eller fjärrobjekt. Här är först en lista på dem: core.idlGrundläggande definitioner som bildar grunden i MCOP-funktionen, som själva protokollet, definitioner av objekt, handlaren, flödessystemet och så vidare. artsflow.idlDe här innehåller flödessystemet som man använder för att ansluta ljudflöden, definitionen av Arts::SynthModule som är grunden för alla gränssnitt som har strömmar, och till slut några användbara ljudobjekt kmedia2.idlHär definieras Arts::PlayObject, ett objekt som kan spela upp en mediatyp. Mediaspelare som KDE:s mediaspelare noatun kommer att kunna spela upp vilka media som helst som har PlayObject. Därför är det vettigt att implementera PlayObject för olika format (som mp3, mpg video, midi, wav, ...) med det här som grund, och det finns redan många. soundserver.idlHär definieras ett gränssnitt för systemets ljudserver artsd. Gränssnittet benämns Arts::SoundServer, och implementerar funktioner som att ta emot strömmar från nätverket, spela samplingar, skapa andra egna aRts-objekt och så vidare. Nätverkstransparens är underförstådd eftersom MCOP används (som för allt övrigt här). artsbuilder.idlDen här modulen definierar grundläggande flödesfunktioner, dvs. kombinera enklare objekt till mer komplexa genom att definiera en graf som binder samman dem. Den definierar det grundläggande gränssnitten Arts::StructureDesc, Arts::ModuleDesc och Arts::PortDesc som innehåller en beskrivning av en struktur, modul och port. Det finns också ett sätt att skapa ett "levande nätverk av objekt" från de här förbindelserna och värdebeskrivningarna med användning av en fabrik. artsmidi.idlDen här modulen definierar grundläggande midi-funktioner, som objekt som skapar midi-händelser, vad en midi-händelse är, och Arts::MidiManager för att förbinda producenter och konsumenter av midi-händelser, och så vidare. Som alltid är nätverkstransparens underförstådd. artsmodules.idlHär finns diverse ytterligare filter, oscillatorer, ljudeffekter, fördröjningar och så vidare, allt som behövs för riktigt användbar signalbehandling, och för att bygga komplexa instrument och effekter från de här grundläggande byggblocken. artsgui.idlDet här tar hand om synliga objekt. Det definierar den grundläggande typen Arts::Widget som alla moduler med ett grafiskt gränssnitt utgår från. Det här åstadkommer oberoende av verktygslåda, och ... visuell redigering av det grafiska gränssnittet, och möjlighet att serialisera grafiska gränssnitt. Dessutom, eftersom de grafiska komponenterna har normala egenskaper, kan deras värden på ett rättframt sätt anslutas till vissa signalbehandlingsmoduler. (dvs. värdet av ett skjutreglage till klippning för ett filter). Som alltid, nätverkstransparent. Där det är möjligt implementeras aRts själv med IDL. Å andra sidan finns det några språkspecifika programmeringsgränssnitt, som antingen använder enkel C++ eller C. Det är ofta förnuftigt att använda IDL-gränssnitt om möjligt, och de övriga gränssnitten när det är nödvändigt. Här är en lista på språkspecifika programmeringsgränssnitt: KNotify, KAudioPlayer (ingår i libtdecore)De här är KDE:s programmeringsgränssnitt för bekvämlighet med de enkla och väldigt vanliga fall, när man bara vill spela upp en sampling. Gränssnitten är enkel C++, Qt/KDE-optimerade, och så enkla som de kan vara. libartscEnkelt C-gränssnitt för ljudservern. Mycket användbart för att anpassa gamla program. libmcopHär sker all magi som har med MCOP att göra. Biblioteket innehåller de grundläggande saker som behövs för att skriva ett enkelt MCOP-program, avsändaren, tidtagning, I/O-hantering, men också de interna funktioner som behövs för att själva MCOP-protokollet ska fungera. libartsflowFörutom implementeringen av artsflow.idl, några användbara verktyg för konvertering av samplingsfrekvens. libqiomanagerIntegration av MCOP i Qt:s händelsesnurra, när man skriver Qt-program som använder MCOP. knotifyÄnnu inte skrivet. kaudioplayerÄnnu inte skrivet. libkmidÄnnu inte skrivet. kmedia2Ännu inte skrivet. ljudserverÄnnu inte skrivet. artsflowÄnnu inte skrivet. C APIInledningC-gränssnittet för &arts; skapades för att göra det lätt att skriva och anpassa enkla C-program till &arts; ljudserver. Det tillhandahåller flödesfunktioner (att skicka samplingsströmmar till artsd), antingen med eller utan blockering. För de flesta program tar man helt enkelt bort de få systemanrop som hanterar ljudenheten och byter ut dem mot lämpliga anrop till &arts;.Jag gjorde två anpassningar för att verifiera idén: mpg123 och quake. Du kan skaffa programfixarna härifrån. Bidra gärna med dina egna programfixar till underhållaren av &arts; eller till programvarupaket för multimedia så att de kan integrera stöd för &arts; i sin kod.SnabbturAtt skicka ljud till ljudservern med gränssnittet är mycket enkelt:infoga deklarationsfilen med #include <artsc.h>initiera gränssnittet med arts_init()skapa en ström med arts_play_stream()anpassa särskilda parametrar med arts_stream_set()skriva samplingsdata till strömmen med arts_write()stänga strömmen med arts_close_stream()frigöra gränssnittet med arts_free()Här är ett exempel på ett litet program som visar det här:#include <stdio.h>
#include <artsc.h>
int main()
{
arts_stream_t stream;
char buffer[8192];
int bytes;
int errorcode;
errorcode = arts_init();
if (errorcode < 0)
{
fprintf(stderr, "arts_init fel: %s\n", arts_error_text(errorcode));
return 1;
}
stream = arts_play_stream(44100, 16, 2, "artsctest");
while((bytes = fread(buffer, 1, 8192, stdin)) > 0)
{
errorcode = arts_write(stream, buffer, bytes);
if(errorcode < 0)
{
fprintf(stderr, "arts_write fel: %s\n", arts_error_text(errorcode));
return 1;
}
}
arts_close_stream(stream);
arts_free();
return 0;
}
Att kompilera och länka: artsc-configFör att lätt kunna kompilera och länka program med &arts; C-gränssnitt, finns verktyget artsc-config som känner till vilka bibliotek som man måste länka med och var deklarationsfilerna finns. Det anropas medartsc-configför att ta reda på biblioteken och artsc-configför att ta reda på ytterligare C-kompilatorväljare. Exemplet ovan skulle ha kunnat kompileras med kommandoraden:ccccBiblioteksreferens[ATT GÖRA: skapa dokumentation för artsc.h med kdoc]