From f5fb7ab51189ee8714b1f8986c300f86eb75a6ea Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sat, 12 Jan 2013 22:29:50 +0000 Subject: [PATCH] Overview: Add new slides, powered by dia. This replaces the skencil file by a dia source file which contains several overview slides. Makefile and .gitignore are adjusted accordingly. --- .gitignore | 2 +- Makefile.in | 7 +- skencil/overview.sk | 474 ------ web/dia/overview.dia | 3806 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 3809 insertions(+), 480 deletions(-) delete mode 100644 skencil/overview.sk create mode 100644 web/dia/overview.dia diff --git a/.gitignore b/.gitignore index 9091a9c2..d340f207 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,7 @@ TODO *_command_list.h *_command_list.man paraslash-git.tar.bz2 -skencil/overview.pdf +web/dia/overview.pdf *.swp error2.h web_sync diff --git a/Makefile.in b/Makefile.in index f3dfea00..299c38f1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -86,8 +86,7 @@ man_pages := $(patsubst %, $(man_dir)/%.1, @executables@) autocrap := config.h.in configure tarball_pfx := @PACKAGE_TARNAME@-$(PACKAGE_VERSION) tarball_delete := $(addprefix $(tarball_pfx)/,\ - web .changelog_before_cvs .changelog_cvs .gitignore\ - skencil) + web .changelog_before_cvs .changelog_cvs .gitignore) tarball := @PACKAGE_TARNAME@-$(PACKAGE_VERSION).tar.bz2 # To put more focus on warnings, be less verbose as default @@ -304,9 +303,7 @@ distclean: clean2 test-clean $(Q) rm -f GPATH GRTAGS GSYMS GTAGS maintainer-clean: distclean - rm -f *.tar.bz2 \ - config.h configure \ - config.h.in skencil/*.pdf skencil/*.ps + rm -f *.tar.bz2 config.h configure config.h.in rm -rf web_sync install: all man diff --git a/skencil/overview.sk b/skencil/overview.sk deleted file mode 100644 index 5ab648c8..00000000 --- a/skencil/overview.sk +++ /dev/null @@ -1,474 +0,0 @@ -##Sketch 1 2 -document() -layout('A4',0) -layer('Layer 1',1,1,0,0,(0,0,0)) -lw(1) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(184.297,654.341,0) -bs(184.297,732.403,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('open file',(1.19433e-15,1,-1,1.19433e-15,181.259,668.683)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('mp3 data',(-1.83691e-16,-1,1,-1.83691e-16,193.585,717.172)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(190.547,726.853,0) -bs(190.547,655.774,0) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(145.824,181.165,0) -bs(228.568,181.165,0) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(228.568,161.165,0) -bs(145.824,161.165,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('connect local socket',(1.19433e-15,1,-1,1.19433e-15,272.988,207.639)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(307.4,339.815,0) -bs(307.4,200,0) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(280,200,0) -bs(280,339.815,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('server & audiod status',(-1.83691e-16,-1,1,-1.83691e-16,310.438,332.705)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(99.2303,144.289,0) -bs(99.2303,73.1918,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('s&a status',(-1.83691e-16,-1,1,-1.83691e-16,102.268,137.713)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(61.1648,150.482,0) -bs(61.1647,71.2323,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('cmd output',(-1.83691e-16,-1,1,-1.83691e-16,64.2028,142.553)) -lw(0.992126) -ld((0.10000000000000001, 1.0)) -b() -bs(24.7094,792.443,0) -bs(310.724,792.443,0) -bs(310.421,640.011,0) -bs(561.98,639.817,0) -bs(561.98,538.528,0) -bs(24.7094,538.528,0) -bs(24.7094,792.443,0) -bC() -fp((0,0,0)) -le() -lw(1) -Fn('Times-Italic') -txt('server host',(252.845,779.314)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Italic') -txt('client host',(512.93,400.509)) -G() -lw(1) -r(119.09,0,0,-28.2587,39.0214,375.322) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('para_client',(45.2504,355.601)) -G_() -G() -lw(1) -r(143.312,0,0,-28.2587,408.597,189.57) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('sound_device',(414.265,169.849)) -G_() -G() -lw(1) -r(94.8684,0,0,-28.2587,34.9844,58.6731) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('terminal',(42.4226,38.9517)) -G_() -G() -lw(1) -r(131.201,0,0,-28.2587,237.937,189.4) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('para_audioc',(244.894,169.678)) -G_() -G() -lw(1) -r(94.8684,0,0,-28.2587,34.9844,189.4) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('para_gui',(40.4306,169.678)) -G_() -fp((0.9,0.9,0.9)) -lw(1) -r(177.037,0,0,-89.6831,384.699,788.574) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Bold') -Fs(36) -txt('paraslash',(399.201,755.055)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Bold') -Fs(36) -txt('0.4.0',(437.217,712.433)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('fork & exec',(153.764,182.009)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('s&a status',(158.223,162.009)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('fork & exec',(1.19433e-15,1,-1,1.19433e-15,70.3615,232.519)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(73.3994,201.263,0) -bs(73.3995,330.639,0) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(103.54,330.639,0) -bs(103.539,201.263,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('cmd output',(-1.83691e-16,-1,1,-1.83691e-16,106.577,297.647)) -lw(0.992126) -ld((0.10000000000000001, 1.0)) -b() -bs(29.1803,415.392,0) -bs(570.132,415.357,0) -bs(570.132,26.3198,0) -bs(27.1619,26.3198,0) -bs(27.1619,413.359,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt(' server cmd',(2.57235e-15,1,-1,2.57235e-15,359.444,441.487)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('result',(-1.83691e-16,-1,1,-1.83691e-16,380.89,496.536)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('connect tcp',(1.19433e-15,1,-1,1.19433e-15,420.523,446.644)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(426.278,433.194,0) -bs(426.278,524.243,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('server status',(-1.83691e-16,-1,1,-1.83691e-16,438.254,513.515)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(431.433,522.224,0) -bs(431.433,434.203,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('mp3 data ',(-1.83691e-16,-1,1,-1.83691e-16,513.965,505.064)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(506.551,520.71,0) -bs(506.551,433.193,0) -G() -lw(1) -r(301.847,0,0,-28.2587,220.095,375.322) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('para_audiod',(311.703,355.601)) -G_() -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(144.486,419.683,0) -bs(144.486,431.685,0) -bs(368.033,431.685,0) -bs(368.033,531.257,0) -lw(1) -la1(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(151.551,419.179,0) -bs(151.551,424.722,0) -bs(374.601,424.722,0) -bs(374.601,529.224,0) -lw(1) -ld((4, 4)) -r(156.432,0,0,-101.428,50.1221,646.762) -G() -lw(1) -r(41.883,0,0,-28.2587,160.634,643.23) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('afh',(166.229,623.509)) -G_() -fp((0,0,0)) -le() -lw(1) -Fn('Times-Italic') -txt('afs process',(106.135,651.24)) -lw(1) -r(0,0,0,-0.504639,125.815,629.1) -lw(1) -ld((5, 5)) -r(272.999,0,0,-67.6189,281.238,614.467) -lw(1) -r(78.2156,0,0,-28.2587,289.816,609.925) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('vss',(313.588,590.204)) -lw(1) -r(73.674,0,0,-59.5452,470.974,609.925) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('sender',(477.579,574.056)) -lw(1) -r(167.533,0,0,-28.2587,289.816,577.629) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('cmd',(0.886791,0,0,1,355.258,557.908)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Italic') -txt('server process',(286.284,618.44)) -G() -lw(1) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(216.351,599.242,0) -bs(272.871,599.242,0) -lw(1) -la1(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(216.351,603.697,0) -bs(272.87,603.697,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('open fd',(223.502,588.236)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('request fd',(217.951,607.917)) -G_() -G() -lw(1) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(216.688,555.341,0) -bs(273.208,555.341,0) -lw(1) -la1(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(216.688,559.796,0) -bs(273.207,559.796,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('result',(228.885,545.344)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('afs cmd',(222.83,563.006)) -G_() -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(79.9931,735.431,0) -bs(79.9931,652.573,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('osl result',(-1.83691e-16,-1,1,-1.83691e-16,83.0311,719.475)) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('osl query',(3.06152e-16,1,-1,3.06152e-16,68.1098,669.658)) -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(73.6709,653.078,0) -bs(73.6709,735.936,0) -G() -lw(1) -r(119.595,0,0,-46.425,75.8576,784.523) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -txt('file system',(108.732,771.908)) -G() -G() -lw(1) -r(48.4434,0,0,-21.1941,81.9131,764.929) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -txt('osl table',(85.9688,750.758)) -G_() -G() -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -txt('mp3 file',(143.495,750.295)) -lw(1) -r(48.4434,0,0,-21.1941,139.44,764.929) -G_() -G_() -G_() -lw(1) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(379.134,590.245,0) -bs(461.495,590.245,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -txt('mp3 data',(397.646,596.3)) -G() -lw(1) -r(120.099,0,0,-53.4896,68.2886,608.411) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('afs',(0.886791,0,0,1,115.93,576.074)) -G_() -G() -lw(1) -r(75.1101,0,0,-28.2587,56.6797,643.23) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(24) -txt('libosl',(67.5587,620.179)) -G_() -G() -lw(0.992126) -la2(([(-4.0, 3.0), (2.0, 0.0), (-4.0, -3.0), (-4.0, 3.0)], 1)) -b() -bs(466.036,335.949,0) -bs(466.036,203.05,0) -fp((0,0,0)) -le() -lw(1) -Fn('Times-Roman') -Fs(14) -txt('pcm data',(-1.83691e-16,-1,1,-1.83691e-16,476.076,294.966)) -G_() -guidelayer('Guide Lines',1,0,0,1,(0,0,1)) -guide(-307.905,0) -grid((0,0,20,20),0,(0,0,1),'Grid') diff --git a/web/dia/overview.dia b/web/dia/overview.dia new file mode 100644 index 00000000..d056dfd7 --- /dev/null +++ b/web/dia/overview.dia @@ -0,0 +1,3806 @@ + + + + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Overview# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_server# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Incoming connections arrive via TCP at the dispatcher which creates a command +handler process for each connection. + +After the connecting client has been authenticated, the command handler propagates +the incoming request either to the audio file selector (afs) or to the virtual streaming +system (vss). Results are sent back to the client. + +afs maintans the audio file database and is responsible for selecting and loading +audio files while vss controls the paraslash senders. When vss needs to stream an +audio file it requests an open file descriptor from afs and feeds small chunks of data +(e.g. mp3 frames) to the senders which send the chunks to all connected clients.# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #dispatcher# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #senders# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #vss# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #command +handler# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #afs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_server# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_audiod# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_audioc# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_gui# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_client# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #The two main applications of the paraslash suite (shaded green) are para_server +and para_audiod. Both run in the background usually. para_server maintains the +audio file database and acts as the streaming source, while para_audiod is the +streaming client. + +The two client programs, para_client and para_audioc communicate with para_server +and para_audiod, respectively. + +para_gui controls para_server/audiod by executing paraslash commands. Command +output is shown in a curses window. para_gui automatically executes para_audioc +to obtain the state of para_audiod and para_server and the metadata of the current +audio file. + +Network connections are shaded grey, local connections black.# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_audiod# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #The purpose of para_audiod is to download, decode and play an audio stream +received from para_server. It fetches the para_server status and starts a suitable +buffer tree (shaded blue) if an audio stream is available. + +The buffer tree usually consists of a receiver, any number of filters and a writer. The +receiver downloads the audio stream from para_server and the filters decode or +modify the received data. The writer plays the decoded stream. + +The dispatcher acts on (local) requests from para_audioc, for example to dump +information about the current audio file.# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #The audio file selector (afs) accepts two different kinds of incoming connections: +A bidirectional pipe shared with para_server is used for passing the file descriptor +of the current audio file to the server process. The local socket is used by command +handlers which query or update the database. + +To add a new file to the database, afs opens the file and locates an audio format +handler (afh) that recognizes the file. A new database entry with metadata obtained +from the afh is then added to the database.# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #The audio file selector# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #audio files# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_server# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #afh# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #osl db# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #command handler# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #afs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #The OSL database# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Metadata about all known audio files is stored in serveral tables of a database which +is driven by libosl, the object storage layer library. + +The "audio files" table is the main table of the database. It contains path, hash and +metadata of each known file. + +The "attributes" table maps each of the 64 possible attributes to a string. The +attribute value of the file's metadata is translated through this table. + +The tables shown shaded are blob tables which support add, rm, mv, cat, ls +commands. All of these are optional. + +The "score" table describes the subset of admissible files for the current playlist or +mood. This table is created on demand, resides only in memory and is discarded +on exit. + +When the next audio file is to be streamed, the audio file selector gets the entry with +the highest score from the "score" table, obtains path, hash, and metadata for this +entry from the "audio files" table, opens the path and verifies the hash.# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #audio files# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #playlists# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #images# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #attributes# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #lyrics# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #moods# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #score# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #dispatcher# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #status fetcher# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_server# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #receiver# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #filter1# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #filter 2# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #writer# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #para_audioc# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.30.2