diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 1be9c772225c32d319fbad273d37b7a693960a77..16eeaebe382863cea0220d2262e58af2799aa914 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,22 +1,34 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="BookmarkManager"> - <bookmark url="file://$PROJECT_DIR$/guru.py" line="135" mnemonic="8" /> + <bookmark url="file://$PROJECT_DIR$/guru.py" line="137" mnemonic="8" /> <bookmark url="file://$PROJECT_DIR$/modules/scheduling/scheduler.py" line="258" mnemonic="1" /> </component> <component name="ChangeListManager"> <list default="true" id="c58ca86a-4167-4474-accb-41439a535514" name="Default" comment=""> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> - <change beforePath="$PROJECT_DIR$/aura.py" afterPath="$PROJECT_DIR$/aura.py" /> + <change beforePath="$PROJECT_DIR$/configuration/aura.ini" afterPath="$PROJECT_DIR$/configuration/aura.ini" /> <change beforePath="$PROJECT_DIR$/guru.py" afterPath="$PROJECT_DIR$/guru.py" /> - <change beforePath="$PROJECT_DIR$/libraries/base/calendar.py" afterPath="$PROJECT_DIR$/libraries/base/calendar.py" /> <change beforePath="$PROJECT_DIR$/libraries/database/broadcasts.py" afterPath="$PROJECT_DIR$/libraries/database/broadcasts.py" /> <change beforePath="$PROJECT_DIR$/modules/communication/liquidsoap/communicator.py" afterPath="$PROJECT_DIR$/modules/communication/liquidsoap/communicator.py" /> - <change beforePath="$PROJECT_DIR$/modules/communication/liquidsoap/initthread.py" afterPath="$PROJECT_DIR$/modules/communication/liquidsoap/initthread.py" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/alsa.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.alsa.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/dynamicsources.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.dynamicsources.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/inToOut.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.inToOut.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/inputToOutput.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.inputToOutput.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/library.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.library.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/playd.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.playd.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/playlist.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.playlist.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/pulse.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.pulse.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/record.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.record.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/simpleplayer.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.simpleplayer.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/simplestmixer.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/simplestmixer.liq" /> <change beforePath="$PROJECT_DIR$/modules/liquidsoap/simplestmixer.log" afterPath="$PROJECT_DIR$/modules/liquidsoap/simplestmixer.log" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/stream.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.stream.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/test.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.test.liq" /> + <change beforePath="$PROJECT_DIR$/modules/liquidsoap/tester.liq" afterPath="$PROJECT_DIR$/modules/liquidsoap/unused.tester.liq" /> <change beforePath="$PROJECT_DIR$/modules/scheduling/scheduler.py" afterPath="$PROJECT_DIR$/modules/scheduling/scheduler.py" /> + <change beforePath="$PROJECT_DIR$/modules/tools/padavan.py" afterPath="$PROJECT_DIR$/modules/tools/padavan.py" /> <change beforePath="$PROJECT_DIR$/modules/web/routes.py" afterPath="$PROJECT_DIR$/modules/web/routes.py" /> - <change beforePath="$PROJECT_DIR$/test.py" afterPath="$PROJECT_DIR$/test.py" /> </list> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="TRACKING_ENABLED" value="true" /> @@ -27,104 +39,103 @@ </component> <component name="FileEditorManager"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> - <file leaf-file-name="broadcasts.py" pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/libraries/database/broadcasts.py"> + <file leaf-file-name="guru.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/guru.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-9"> - <caret line="56" column="1" lean-forward="false" selection-start-line="56" selection-start-column="1" selection-end-line="56" selection-end-column="1" /> + <state relative-caret-position="204"> + <caret line="72" column="67" lean-forward="false" selection-start-line="72" selection-start-column="67" selection-end-line="72" selection-end-column="67" /> <folding> - <element signature="e#43#75#0" expanded="true" /> + <element signature="e#20#31#0" expanded="true" /> </folding> </state> </provider> </entry> </file> - <file leaf-file-name="initthread.py" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/modules/communication/liquidsoap/initthread.py"> + <file leaf-file-name="padavan.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/modules/tools/padavan.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="340"> - <caret line="42" column="25" lean-forward="false" selection-start-line="42" selection-start-column="25" selection-end-line="42" selection-end-column="25" /> + <state relative-caret-position="304"> + <caret line="68" column="51" lean-forward="false" selection-start-line="68" selection-start-column="51" selection-end-line="68" selection-end-column="51" /> <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="communicator.py" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/modules/communication/liquidsoap/communicator.py"> + <file leaf-file-name="simplestmixer.log" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/simplestmixer.log"> + <provider selected="true" editor-type-id="LogFileEditorProvider"> + <state relative-caret-position="-6273"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="simplestmixer.liq" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/simplestmixer.liq"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="467"> - <caret line="146" column="54" lean-forward="false" selection-start-line="146" selection-start-column="54" selection-end-line="146" selection-end-column="54" /> + <state relative-caret-position="204"> + <caret line="12" column="33" lean-forward="false" selection-start-line="12" selection-start-column="33" selection-end-line="12" selection-end-column="33" /> <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="scheduler.py" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/modules/scheduling/scheduler.py"> + <file leaf-file-name="settings.liq" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/settings.liq"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="155"> - <caret line="223" column="45" lean-forward="false" selection-start-line="223" selection-start-column="45" selection-end-line="223" selection-end-column="45" /> - <folding> - <element signature="e#1093#1106#0" expanded="true" /> - </folding> + <state relative-caret-position="150"> + <caret line="19" column="0" lean-forward="false" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" /> + <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="guru.py" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/guru.py"> + <file leaf-file-name="aura.ini" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/configuration/aura.ini"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="527"> - <caret line="58" column="130" lean-forward="false" selection-start-line="58" selection-start-column="111" selection-end-line="58" selection-end-column="130" /> - <folding> - <element signature="e#20#31#0" expanded="true" /> - </folding> + <state relative-caret-position="391"> + <caret line="32" column="20" lean-forward="false" selection-start-line="32" selection-start-column="20" selection-end-line="32" selection-end-column="20" /> + <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="aura.py" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/aura.py"> + <file leaf-file-name="communicator.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/modules/communication/liquidsoap/communicator.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="391"> - <caret line="23" column="53" lean-forward="false" selection-start-line="23" selection-start-column="53" selection-end-line="23" selection-end-column="53" /> - <folding> - <element signature="e#0#13#0" expanded="true" /> - </folding> + <state relative-caret-position="202"> + <caret line="964" column="26" lean-forward="false" selection-start-line="964" selection-start-column="26" selection-end-line="964" selection-end-column="26" /> + <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="test.py" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/test.py"> + <file leaf-file-name="playerclient.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/modules/communication/liquidsoap/playerclient.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="340"> - <caret line="22" column="25" lean-forward="false" selection-start-line="22" selection-start-column="25" selection-end-line="22" selection-end-column="25" /> + <state relative-caret-position="-4362"> + <caret line="11" column="37" lean-forward="false" selection-start-line="11" selection-start-column="37" selection-end-line="11" selection-end-column="37" /> <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="routes.py" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/modules/web/routes.py"> + <file leaf-file-name="fallback.liq" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/fallback.liq"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="442"> - <caret line="26" column="20" lean-forward="false" selection-start-line="26" selection-start-column="20" selection-end-line="26" selection-end-column="20" /> - <folding> - <element signature="e#0#25#0" expanded="true" /> - </folding> + <state relative-caret-position="1615"> + <caret line="95" column="0" lean-forward="false" selection-start-line="95" selection-start-column="0" selection-end-line="95" selection-end-column="0" /> + <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="calendar.py" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/libraries/base/calendar.py"> + <file leaf-file-name="serverfunctions.liq" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/serverfunctions.liq"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="416"> - <caret line="220" column="55" lean-forward="false" selection-start-line="220" selection-start-column="55" selection-end-line="220" selection-end-column="55" /> - <folding> - <element signature="e#805#818#0" expanded="true" /> - </folding> + <state relative-caret-position="85"> + <caret line="5" column="30" lean-forward="false" selection-start-line="5" selection-start-column="30" selection-end-line="5" selection-end-column="30" /> + <folding /> </state> </provider> </entry> @@ -140,14 +151,6 @@ </component> <component name="FindInProjectRecents"> <findStrings> - <find>schedule is</find> - <find>alchemyenc</find> - <find>asd</find> - <find>warning(</find> - <find>alchemyen</find> - <find>simplejson</find> - <find>json.</find> - <find>alchemyencoder</find> <find>import json</find> <find>encod</find> <find>printing i</find> @@ -169,7 +172,15 @@ <find>__fetch_schedule_entries__</find> <find>__fetch_schedule_entry_data__</find> <find>store_schedule_entry</find> + <find>i am the</find> + <find>/10</find> <find>load_</find> + <find>get_f</find> + <find>func</find> + <find>current</find> + <find>playlist</find> + <find>acti</find> + <find>send</find> </findStrings> <replaceStrings> <replace>"</replace> @@ -212,8 +223,6 @@ <option value="$PROJECT_DIR$/modules/liquidsoap/problem.liq" /> <option value="$PROJECT_DIR$/libraries/enum/consolecolor.py" /> <option value="$PROJECT_DIR$/libraries/database/combadb.py" /> - <option value="$PROJECT_DIR$/modules/liquidsoap/fallback.liq" /> - <option value="$PROJECT_DIR$/modules/liquidsoap/simplestmixer.liq" /> <option value="$PROJECT_DIR$/README.md" /> <option value="$PROJECT_DIR$/modules/communication/liquidsoap/client.py" /> <option value="$PROJECT_DIR$/libraries/enum/redischannels.py" /> @@ -221,20 +230,22 @@ <option value="$PROJECT_DIR$/modules/communication/redis/adapter.py" /> <option value="$PROJECT_DIR$/libraries/database/trackservice.py" /> <option value="$PROJECT_DIR$/modules/controller/controller.py" /> - <option value="$PROJECT_DIR$/configuration/aura.ini" /> <option value="$PROJECT_DIR$/libraries/exceptions/exception_logger.py" /> <option value="$PROJECT_DIR$/libraries/database/statestore.py" /> - <option value="$PROJECT_DIR$/modules/tools/padavan.py" /> <option value="$PROJECT_DIR$/libraries/database/database.py" /> <option value="$PROJECT_DIR$/aura.py" /> - <option value="$PROJECT_DIR$/guru.py" /> - <option value="$PROJECT_DIR$/modules/web/routes.py" /> <option value="$PROJECT_DIR$/modules/communication/liquidsoap/initthread.py" /> - <option value="$PROJECT_DIR$/modules/scheduling/scheduler.py" /> <option value="$PROJECT_DIR$/test.py" /> <option value="$PROJECT_DIR$/libraries/base/calendar.py" /> - <option value="$PROJECT_DIR$/modules/communication/liquidsoap/communicator.py" /> + <option value="$PROJECT_DIR$/modules/web/routes.py" /> <option value="$PROJECT_DIR$/libraries/database/broadcasts.py" /> + <option value="$PROJECT_DIR$/modules/scheduling/scheduler.py" /> + <option value="$PROJECT_DIR$/guru.py" /> + <option value="$PROJECT_DIR$/modules/tools/padavan.py" /> + <option value="$PROJECT_DIR$/modules/liquidsoap/fallback.liq" /> + <option value="$PROJECT_DIR$/modules/communication/liquidsoap/communicator.py" /> + <option value="$PROJECT_DIR$/modules/liquidsoap/simplestmixer.liq" /> + <option value="$PROJECT_DIR$/configuration/aura.ini" /> </list> </option> </component> @@ -282,6 +293,11 @@ <item name="engine" type="b2602c69:ProjectViewProjectNode" /> <item name="engine" type="462c0819:PsiDirectoryNode" /> </path> + <path> + <item name="engine" type="b2602c69:ProjectViewProjectNode" /> + <item name="engine" type="462c0819:PsiDirectoryNode" /> + <item name="configuration" type="462c0819:PsiDirectoryNode" /> + </path> <path> <item name="engine" type="b2602c69:ProjectViewProjectNode" /> <item name="engine" type="462c0819:PsiDirectoryNode" /> @@ -298,18 +314,43 @@ <item name="engine" type="462c0819:PsiDirectoryNode" /> <item name="modules" type="462c0819:PsiDirectoryNode" /> </path> + <path> + <item name="engine" type="b2602c69:ProjectViewProjectNode" /> + <item name="engine" type="462c0819:PsiDirectoryNode" /> + <item name="modules" type="462c0819:PsiDirectoryNode" /> + <item name="communication" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="engine" type="b2602c69:ProjectViewProjectNode" /> + <item name="engine" type="462c0819:PsiDirectoryNode" /> + <item name="modules" type="462c0819:PsiDirectoryNode" /> + <item name="communication" type="462c0819:PsiDirectoryNode" /> + <item name="liquidsoap" type="462c0819:PsiDirectoryNode" /> + </path> <path> <item name="engine" type="b2602c69:ProjectViewProjectNode" /> <item name="engine" type="462c0819:PsiDirectoryNode" /> <item name="modules" type="462c0819:PsiDirectoryNode" /> <item name="controller" type="462c0819:PsiDirectoryNode" /> </path> + <path> + <item name="engine" type="b2602c69:ProjectViewProjectNode" /> + <item name="engine" type="462c0819:PsiDirectoryNode" /> + <item name="modules" type="462c0819:PsiDirectoryNode" /> + <item name="liquidsoap" type="462c0819:PsiDirectoryNode" /> + </path> <path> <item name="engine" type="b2602c69:ProjectViewProjectNode" /> <item name="engine" type="462c0819:PsiDirectoryNode" /> <item name="modules" type="462c0819:PsiDirectoryNode" /> <item name="scheduling" type="462c0819:PsiDirectoryNode" /> </path> + <path> + <item name="engine" type="b2602c69:ProjectViewProjectNode" /> + <item name="engine" type="462c0819:PsiDirectoryNode" /> + <item name="modules" type="462c0819:PsiDirectoryNode" /> + <item name="tools" type="462c0819:PsiDirectoryNode" /> + </path> <path> <item name="engine" type="b2602c69:ProjectViewProjectNode" /> <item name="engine" type="462c0819:PsiDirectoryNode" /> @@ -464,7 +505,7 @@ <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.43275487" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32936078" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> - <window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.30802602" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.30802602" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.329718" sideWeight="0.5" order="13" side_tool="false" content_ui="tabs" /> <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> @@ -531,58 +572,16 @@ </properties> </breakpoint> </default-breakpoints> - <option name="time" value="50" /> + <option name="time" value="51" /> </breakpoint-manager> <watches-manager /> </component> <component name="editorHistoryManager"> - <entry file="file://$PROJECT_DIR$/modules/liquidsoap/pulse.liq"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/modules/liquidsoap/playd.liq"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="3281"> - <caret line="193" column="0" lean-forward="false" selection-start-line="193" selection-start-column="0" selection-end-line="198" selection-end-column="1" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/modules/liquidsoap/serverfunctions.liq"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="85"> - <caret line="5" column="1" lean-forward="false" selection-start-line="5" selection-start-column="1" selection-end-line="5" selection-end-column="1" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/modules/communication/zmq/adapter.py"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-150"> - <caret line="255" column="8" lean-forward="false" selection-start-line="255" selection-start-column="8" selection-end-line="255" selection-end-column="8" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/modules/liquidsoap/simpleplayer.liq"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="290"> - <caret line="24" column="78" lean-forward="false" selection-start-line="24" selection-start-column="78" selection-end-line="24" selection-end-column="78" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/modules/liquidsoap/settings.liq"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="323"> - <caret line="19" column="0" lean-forward="false" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" /> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/libraries/exceptions/auraexceptions.py" /> <entry file="file://$PROJECT_DIR$/libraries/color/terminal.py" /> <entry file="file://$PROJECT_DIR$/libraries/base/config.py" /> <entry file="file://$PROJECT_DIR$/libraries/client/auraclient.py" /> - <entry file="file://$PROJECT_DIR$/modules/liquidsoap/test.liq"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/unused.test.liq"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="0"> <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> @@ -606,13 +605,6 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/modules/liquidsoap/fallback.liq"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="2040"> - <caret line="120" column="119" lean-forward="false" selection-start-line="120" selection-start-column="119" selection-end-line="120" selection-end-column="119" /> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/modules/liquidsoap/helpers/message.py"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="884"> @@ -620,20 +612,6 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/modules/liquidsoap/simplestmixer.liq"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="119"> - <caret line="7" column="20" lean-forward="false" selection-start-line="7" selection-start-column="20" selection-end-line="7" selection-end-column="20" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/modules/communication/liquidsoap/playerclient.py"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="4998"> - <caret line="294" column="40" lean-forward="false" selection-start-line="294" selection-start-column="40" selection-end-line="294" selection-end-column="40" /> - </state> - </provider> - </entry> <entry file="file:///usr/local/lib/python3.5/dist-packages/sqlalchemy/__init__.py"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="0"> @@ -698,13 +676,6 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/configuration/aura.ini"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="151"> - <caret line="69" column="19" lean-forward="false" selection-start-line="69" selection-start-column="16" selection-end-line="69" selection-end-column="19" /> - </state> - </provider> - </entry> <entry file="file:///usr/lib/python3.5/json/__init__.py"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="-2652"> @@ -737,15 +708,8 @@ <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="4777"> <caret line="286" column="0" lean-forward="false" selection-start-line="286" selection-start-column="0" selection-end-line="286" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/modules/tools/padavan.py"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="2074"> - <caret line="125" column="12" lean-forward="false" selection-start-line="125" selection-start-column="12" selection-end-line="125" selection-end-column="12" /> <folding> - <element signature="e#0#17#0" expanded="false" /> + <element signature="e#25#37#0" expanded="false" /> </folding> </state> </provider> @@ -787,27 +751,41 @@ <state relative-caret-position="391"> <caret line="23" column="53" lean-forward="false" selection-start-line="23" selection-start-column="53" selection-end-line="23" selection-end-column="53" /> <folding> - <element signature="e#0#13#0" expanded="true" /> + <element signature="e#0#13#0" expanded="false" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/guru.py"> + <entry file="file:///usr/lib/python3/dist-packages/MySQLdb/connections.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="527"> - <caret line="58" column="130" lean-forward="false" selection-start-line="58" selection-start-column="111" selection-end-line="58" selection-end-column="130" /> - <folding> - <element signature="e#20#31#0" expanded="true" /> - </folding> + <state relative-caret-position="87"> + <caret line="275" column="34" lean-forward="true" selection-start-line="275" selection-start-column="34" selection-end-line="275" selection-end-column="34" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/test.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="340"> + <caret line="22" column="25" lean-forward="false" selection-start-line="22" selection-start-column="25" selection-end-line="22" selection-end-column="25" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file:///usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/relationships.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="203"> + <caret line="2090" column="0" lean-forward="false" selection-start-line="2090" selection-start-column="0" selection-end-line="2090" selection-end-column="0" /> + <folding /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/modules/web/routes.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="442"> - <caret line="26" column="20" lean-forward="false" selection-start-line="26" selection-start-column="20" selection-end-line="26" selection-end-column="20" /> + <state relative-caret-position="85"> + <caret line="5" column="0" lean-forward="false" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" /> <folding> - <element signature="e#0#25#0" expanded="true" /> + <element signature="e#0#25#0" expanded="false" /> </folding> </state> </provider> @@ -820,65 +798,138 @@ </state> </provider> </entry> + <entry file="file://$PROJECT_DIR$/libraries/database/broadcasts.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="272"> + <caret line="211" column="45" lean-forward="false" selection-start-line="211" selection-start-column="45" selection-end-line="211" selection-end-column="45" /> + <folding> + <element signature="e#43#75#0" expanded="false" /> + </folding> + </state> + </provider> + </entry> <entry file="file://$PROJECT_DIR$/modules/scheduling/scheduler.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="155"> - <caret line="223" column="45" lean-forward="false" selection-start-line="223" selection-start-column="45" selection-end-line="223" selection-end-column="45" /> + <state relative-caret-position="219"> + <caret line="323" column="15" lean-forward="false" selection-start-line="323" selection-start-column="15" selection-end-line="323" selection-end-column="15" /> <folding> - <element signature="e#1093#1106#0" expanded="true" /> + <element signature="e#1093#1106#0" expanded="false" /> </folding> </state> </provider> </entry> - <entry file="file:///usr/lib/python3/dist-packages/MySQLdb/connections.py"> + <entry file="file://$PROJECT_DIR$/libraries/base/calendar.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="87"> - <caret line="275" column="34" lean-forward="true" selection-start-line="275" selection-start-column="34" selection-end-line="275" selection-end-column="34" /> + <state relative-caret-position="416"> + <caret line="220" column="55" lean-forward="false" selection-start-line="220" selection-start-column="55" selection-end-line="220" selection-end-column="55" /> + <folding> + <element signature="e#805#818#0" expanded="false" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/guru.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="204"> + <caret line="72" column="67" lean-forward="false" selection-start-line="72" selection-start-column="67" selection-end-line="72" selection-end-column="67" /> + <folding> + <element signature="e#20#31#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/modules/tools/padavan.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="304"> + <caret line="68" column="51" lean-forward="false" selection-start-line="68" selection-start-column="51" selection-end-line="68" selection-end-column="51" /> <folding /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/test.py"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/simplestmixer.log"> + <provider selected="true" editor-type-id="LogFileEditorProvider"> + <state relative-caret-position="-6273"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/unused.library.liq"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="340"> - <caret line="22" column="25" lean-forward="false" selection-start-line="22" selection-start-column="25" selection-end-line="22" selection-end-column="25" /> + <state relative-caret-position="-102"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <folding /> </state> </provider> </entry> - <entry file="file:///usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/relationships.py"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/serverfunctions.liq"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="203"> - <caret line="2090" column="0" lean-forward="false" selection-start-line="2090" selection-start-column="0" selection-end-line="2090" selection-end-column="0" /> + <state relative-caret-position="85"> + <caret line="5" column="30" lean-forward="false" selection-start-line="5" selection-start-column="30" selection-end-line="5" selection-end-column="30" /> <folding /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/libraries/base/calendar.py"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/unused.playlist.liq"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="416"> - <caret line="220" column="55" lean-forward="false" selection-start-line="220" selection-start-column="55" selection-end-line="220" selection-end-column="55" /> - <folding> - <element signature="e#805#818#0" expanded="true" /> - </folding> + <state relative-caret-position="1377"> + <caret line="162" column="23" lean-forward="false" selection-start-line="162" selection-start-column="23" selection-end-line="162" selection-end-column="23" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/fallback.liq"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="1615"> + <caret line="95" column="0" lean-forward="false" selection-start-line="95" selection-start-column="0" selection-end-line="95" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/unused.playd.liq"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="193"> + <caret line="71" column="13" lean-forward="false" selection-start-line="71" selection-start-column="5" selection-end-line="71" selection-end-column="13" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/modules/communication/liquidsoap/playerclient.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="-4362"> + <caret line="11" column="37" lean-forward="false" selection-start-line="11" selection-start-column="37" selection-end-line="11" selection-end-column="37" /> + <folding /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/modules/communication/liquidsoap/communicator.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="467"> - <caret line="146" column="54" lean-forward="false" selection-start-line="146" selection-start-column="54" selection-end-line="146" selection-end-column="54" /> + <state relative-caret-position="202"> + <caret line="964" column="26" lean-forward="false" selection-start-line="964" selection-start-column="26" selection-end-line="964" selection-end-column="26" /> <folding /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/libraries/database/broadcasts.py"> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/simplestmixer.liq"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-9"> - <caret line="56" column="1" lean-forward="false" selection-start-line="56" selection-start-column="1" selection-end-line="56" selection-end-column="1" /> - <folding> - <element signature="e#43#75#0" expanded="true" /> - </folding> + <state relative-caret-position="204"> + <caret line="12" column="33" lean-forward="false" selection-start-line="12" selection-start-column="33" selection-end-line="12" selection-end-column="33" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/modules/liquidsoap/settings.liq"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="150"> + <caret line="19" column="0" lean-forward="false" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/configuration/aura.ini"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="391"> + <caret line="32" column="20" lean-forward="false" selection-start-line="32" selection-start-column="20" selection-end-line="32" selection-end-column="20" /> + <folding /> </state> </provider> </entry> diff --git a/configuration/aura.ini b/configuration/aura.ini index dfbf1c4832293123f78cd2758966d1f6312f451a..a0253f41e23458a9c23c26dcf9749cca2be7135e 100644 --- a/configuration/aura.ini +++ b/configuration/aura.ini @@ -24,13 +24,13 @@ db_host="localhost" # if you have no idea what to do here => set use_alsa to "n", then pulseaudio is used use_alsa="y" # alsa_buffer => int -alsa_buffer="16000" +#alsa_buffer="16000" # alsa_buffer_length => int alsa_buffer_length="5" # alsa_periods => int alsa_periods="0" # frame_duration => double -frame_duration="0.4" +frame_duration="0.35" # frame_size => int frame_size="" diff --git a/guru.py b/guru.py index 18cf14bba179c6bf89bc3069c284ce51292bbb89..f4b4121f6621d56d14f151b8362e386006c89699 100755 --- a/guru.py +++ b/guru.py @@ -69,6 +69,8 @@ class Guru: help="For which type you wanna GET a next audio file?") parser.add_argument("-snf", "--set-next-fallback-file-for", action="store", dest="set_fallback_for", default=False, metavar=("FALLBACKTYPE", "FILE"), nargs=2, help="For which type you wanna SET a next audio file?") + parser.add_argument("-np", "--now-playing", action="store", dest="now_playing", default=False, metavar="NOWPLAYINGSOURCE", + help="Which source is now playing") parser.add_argument("-ip", "--init-player", action="store_true", dest="init_player", default=False, help="Reset liquidsoap volume and mixer activations?") diff --git a/libraries/database/broadcasts.py b/libraries/database/broadcasts.py index 4ab4d237cee34c5037c6f5021193d3f0d311a91a..cbafb39fc206db56dca246966a73e10acf3677df 100644 --- a/libraries/database/broadcasts.py +++ b/libraries/database/broadcasts.py @@ -5,7 +5,7 @@ import datetime, os, urllib, sys import time import decimal -from sqlalchemy import orm, Boolean, Column, Date, DateTime, Float, Integer, String, Text, Time, ForeignKey, ForeignKeyConstraint +from sqlalchemy import orm, func, Boolean, Column, Date, DateTime, Float, Integer, String, Text, Time, ForeignKey, ForeignKeyConstraint from sqlalchemy.orm import relationship from sqlalchemy.sql.expression import false from libraries.database.database import db @@ -167,12 +167,6 @@ class ScheduleEntry(db.Model, AuraDatabaseModel): @staticmethod def select_next_manual_entry_num(): - from sqlalchemy import func - # damn BAND-AID - #db.session.commit() - - #subqry = db.session.query(func.max(ScheduleEntry.entry_num)).filter(ScheduleEntry.schedule_id = 0) - #qry = db.session.query(Data).filter(Data.user_id == user_id, Data.counter == subqry) max_manual_entry_num = db.session.query(func.max(ScheduleEntry.entry_num)).filter(ScheduleEntry.schedule_id == 0).first() print(max_manual_entry_num) @@ -211,20 +205,23 @@ class TrackService(db.Model, AuraDatabaseModel): __tablename__ = 'trackservice' trackservice_id = Column(Integer, primary_key=True, autoincrement=True) - schedule_id = Column(Integer, ForeignKey("schedule.schedule_id")) playlist_id = Column(Integer, nullable=False) entry_num = Column(Integer, nullable=False) source = Column(String(255), nullable=False) + start = Column(DateTime, nullable=False, default=func.now()) __table_args__ = ( ForeignKeyConstraint(['playlist_id', 'entry_num'], ['schedule_entry.playlist_id', 'schedule_entry.entry_num']), ) - schedule = relationship("Schedule", foreign_keys=[schedule_id], lazy="joined") + #schedule = relationship("Schedule", foreign_keys=[schedule_id], lazy="joined") # trackservice_entry = relationship("ScheduleEntry", foreign_keys=[playlist_id, entry_num], lazy="joined") schedule_entry = relationship("ScheduleEntry", primaryjoin="and_(TrackService.playlist_id==ScheduleEntry.playlist_id, TrackService.entry_num==ScheduleEntry.entry_num)", lazy="joined") + @staticmethod + def select_one(trackservice_id): + return db.session.query(TrackService).filter(TrackService.trackservice_id == trackservice_id).first() # ------------------------------------------------------------------------------------------ # # class TrackServiceSchedule(db.Model, AuraDatabaseModel): @@ -277,4 +274,4 @@ class TrackService(db.Model, AuraDatabaseModel): # def select_all(): # return db.session.query(TrackServiceScheduleEntry).filter().all() -AuraDatabaseModel.recreate_db(True) +#AuraDatabaseModel.recreate_db(True) diff --git a/modules/communication/liquidsoap/communicator.py b/modules/communication/liquidsoap/communicator.py index 5f1b0eebfd87df0567bab58facbbb8a9f3ebd199..201af47114403fe7a815e85e23dfc36286edd263 100644 --- a/modules/communication/liquidsoap/communicator.py +++ b/modules/communication/liquidsoap/communicator.py @@ -12,7 +12,7 @@ from modules.communication.liquidsoap.recorderclient import LiquidSoapRecorderCl from modules.communication.liquidsoap.initthread import LiquidSoapInitThread from libraries.enum.consolecolor import TerminalColors from libraries.exceptions.auraexceptions import LQConnectionError -from libraries.database.broadcasts import TrackServiceSchedule, TrackServiceScheduleEntry +from libraries.database.broadcasts import TrackService from libraries.exceptions.exception_logger import ExceptionLogger @@ -89,7 +89,6 @@ class LiquidSoapCommunicator(ExceptionLogger): if active_source == "": return "" return self.channels.index(active_source) - #return active_source # ------------------------------------------------------------------------------------------ # def get_mixer_status(self): @@ -125,26 +124,16 @@ class LiquidSoapCommunicator(ExceptionLogger): self.channel_volume(input_type, entry.volume) self.disable_transaction(True) self.insert_track_service_entry(entry) + self.playlist_insert() # ------------------------------------------------------------------------------------------ # def insert_track_service_entry(self, schedule_entry): - ts_schedule = TrackServiceSchedule.select_one(schedule_entry.schedule.schedule_id) - havetoadd = False + trackservice_entry = TrackService() + trackservice_entry.playlist_id = schedule_entry.playlist_id + trackservice_entry.entry_num = schedule_entry.entry_num + trackservice_entry.source = schedule_entry.source - if not ts_schedule: - if self.debug: - print("no TrackServiceSchedule with id " + str(schedule_entry.schedule.schedule_id) + " in database => creating a new one") - ts_schedule = TrackServiceSchedule() - ts_schedule.schedule_id = schedule_entry.schedule.schedule_id - havetoadd = True - - ts_schedule_entry = TrackServiceScheduleEntry() - ts_schedule_entry.ts_schedule_id = schedule_entry.schedule.schedule_id - ts_schedule_entry.playlist_id = schedule_entry.playlist_id - ts_schedule_entry.entry_num = schedule_entry.entry_num - - ts_schedule.store(havetoadd, commit=True) - ts_schedule_entry.store(add=True, commit=True) + trackservice_entry.store(add=True, commit=True) # ------------------------------------------------------------------------------------------ # def all_inputs_but(self, input_type): @@ -525,7 +514,6 @@ class LiquidSoapCommunicator(ExceptionLogger): else: message = self.__send_lqc_command__(self.lqc, "mixer", "select", index, activate) - #message = self.__send_lqc_command__(self.lqc, 'mixer', 'volume', str(index), str(int(volume))) return message diff --git a/modules/liquidsoap/alsa.liq b/modules/liquidsoap/alsa.liq deleted file mode 100644 index 20c18621d07c9ecd647e8fe3ab99e757232d1f7e..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/alsa.liq +++ /dev/null @@ -1,6 +0,0 @@ - -input_fs = single(id="fs", "/var/audio/fallback/output.flac") -input_http = input.http(id="http", "http://stream.fro.at/fro128.mp3") -linein_alsa_1 = input.alsa(id="linein", device = input_device_0, bufferize = false) -mixer = mix(id="mixer", [input_fs, input_http, linein_alsa_1]) -output.alsa(id="lineout", device = output_device_0, bufferize = false, mixer) diff --git a/modules/liquidsoap/dynamicsources.liq b/modules/liquidsoap/dynamicsources.liq deleted file mode 100644 index 6ae441c432ec0e8bf5c19bef607a1846ee2e8abf..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/dynamicsources.liq +++ /dev/null @@ -1,150 +0,0 @@ -%include "readini.liq" - -inifile = '/etc/aura/aura.ini' -ini = read_ini(inifile) - -set("log.file.path", "./<script>.log") - -set("server.telnet", true) -set("server.telnet.bind_addr", "0.0.0.0") -set("server.telnet.port", 1234) - -use_alsa = list.assoc("use_alsa", ini) == "y" -frame_duration = float_of_string(list.assoc("frame_duration", ini)) -frame_size = int_of_string(list.assoc("frame_size", ini)) -alsa_buffer = int_of_string(list.assoc("alsa_buffer", ini)) -alsa_buffer_length = int_of_string(list.assoc("alsa_buffer_length", ini)) -alsa_periods = int_of_string(list.assoc("alsa_periods", ini)) - -if use_alsa then - if frame_duration > 0.0 then - print("setting frame.duration to #{frame_duration}") - set("frame.duration", frame_duration) - end - if frame_size > 0 then - print("setting frame.size to #{frame_size}") - set("frame.size", frame_size) - end - if alsa_buffer > 0 then - print("setting alsa.buffer to #{alsa_buffer}") - set("alsa.alsa_buffer", alsa_buffer) - end - if alsa_buffer > 0 then - print("setting alsa.buffer_length to #{alsa_buffer_length}") - set("alsa.buffer_length", alsa_buffer_length) - end - if alsa_periods > 0 then - print("setting alsa.periods to #{alsa_periods}") - set("alsa.periods", alsa_periods) # assertion error when setting periods other than 0 => alsa default - end -end - -# First, we create a list referencing the dynamic sources: -dyn_sources = ref [] - -# This is our icecast output. -# It is a partial application: the source needs to be given! -out = output.icecast(%mp3, - host="test", - password="hackme", - fallible=true) - - - -# Now we write a function to create -# a playlist source and output it. -def create_playlist(uri) = - # The playlist source - s = playlist(uri) - - # The output - output = out(s) - - # We register both source and output - # in the list of sources - dyn_sources := - list.append( [(uri,s),(uri,output)], - !dyn_sources ) - "Done!" -end - -# And a function to destroy a dynamic source -def destroy_playlist(uri) = - # We need to find the source in the list, - # remove it and destroy it. Currently, the language - # lacks some nice operators for that so we do it - # the functional way - - # This function is executed on every item in the list - # of dynamic sources - def parse_list(ret, current_element) = - # ret is of the form: (matching_sources, remaining_sources) - # We extract those two: - matching_sources = fst(ret) - remaining_sources = snd(ret) - - # current_element is of the form: ("uri", source) so - # we check the first element - current_uri = fst(current_element) - if current_uri == uri then - # In this case, we add the source to the list of - # matched sources - (list.append( [snd(current_element)], - matching_sources), - remaining_sources) - else - # In this case, we put the element in the list of remaining - # sources - (matching_sources, - list.append([current_element], - remaining_sources)) - end - end - - # Now we execute the function: - result = list.fold(parse_list, ([], []), !dyn_sources) - matching_sources = fst(result) - remaining_sources = snd(result) - - # We store the remaining sources in dyn_sources - dyn_sources := remaining_sources - - # If no source matched, we return an error - if list.length(matching_sources) == 0 then - "Error: no matching sources!" - else - # We stop all sources - list.iter(source.shutdown, matching_sources) - # And return - "Done!" - end -end - -def backup_pool () = - result = get_process_lines("python ./helpers/next_song_from_pool.py") - log("next song: #{result}") - request.create(list.hd(result)) -end - -backup_pool = request.dynamic(backup_pool) - - -# Now we register the telnet commands: -server.register(namespace="dynamic_playlist", - description="Start a new dynamic playlist.", - usage="start <uri>", - "start", - create_playlist) -server.register(namespace="dynamic_playlist", - description="Stop a dynamic playlist.", - usage="stop <uri>", - "stop", - destroy_playlist) -server.register(namespace="dyn", - description="load next song from pool", - usage="next <folder>", - "next", - - - -output.dummy(blank()) diff --git a/modules/liquidsoap/inToOut.liq b/modules/liquidsoap/inToOut.liq deleted file mode 100644 index 5543c2799b95a263f859a0505ec2ec09a83bd745..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/inToOut.liq +++ /dev/null @@ -1,48 +0,0 @@ -set("frame.size", 1881) -#set("decoding.buffer_length", 20.) -#set("frame.channels", 2) -#set("frame.samplerate", 44100) - -set("server.telnet", true) -set("server.telnet.port", 1234) - -set("alsa.alsa_buffer", 2048) -#set("alsa.periods", 8) -#set("alsa.buffer_length", 4096) - -# works, but every now and then buffer overruns in alsa.in on node -# more or less the same with or w/o clock_safe set. maybe a bit better with clock_safe=false -input_alsa = input.alsa(bufferize=false, clock_safe=false) -output.alsa(bufferize=false, clock_safe=false, input_alsa) - -#output.alsa(bufferize = false, input.alsa(bufferize = false)) - -# works -#url = "http://stream.fro.at/fro64.mp3" -#i = strip_blank(input.http(id="stream", url)) -#input_http = mksafe(i) -#output.alsa(bufferize=false, input_http) - -# works -#input_fs = fallback(track_sensitive=false, -# [ single("/var/audio/fallback/music.flac"), playlist.safe("/var/audio/fallback/NightmaresOnWax/Smokers Delight") ] ) -#ignore(input_fs) -#output.alsa(bufferize=false, input_fs) - -#output.alsa(device="hw:1,0", bufferize=false, input_alsa) -#output.alsa(device="hw:1,0", bufferize=false, input_http) -#output.pulseaudio(input_http) -#output.alsa(device="hw:0,0", bufferize=false, input_alsa) -#output.pulseaudio(input_fs) - -#mixer = mix(id = "mixer", [input_alsa]) -#final_stream = fallback(id="station_fallback", [mixer, playlist.safe("/var/audio/fallback/NightmaresOnWax/Smokers Delight")]) -#output.alsa(device="hw:1,0", bufferize=false, final_stream) - -#ignore(mixer) -#ignore(input_fs) -#ignore(input_http) -#ignore(input_alsa) - - - diff --git a/modules/liquidsoap/inputToOutput.liq b/modules/liquidsoap/inputToOutput.liq deleted file mode 100644 index fe5d30609d702859d566c409538c40bf91f44b6e..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/inputToOutput.liq +++ /dev/null @@ -1,42 +0,0 @@ -#set("frame.size", 3763) -#set("decoding.buffer_length", 20.) -#set("frame.channels", 2) -#set("frame.samplerate", 44100) - -set("server.telnet", true) -set("server.telnet.port", 1234) - -input_alsa = input.alsa(bufferize=false) -#output.alsa(device="hw:0,0", bufferize=false, input_alsa) - -#output.alsa(bufferize = false, input.alsa(bufferize = false)) - -url = "http://stream.fro.at/fro64.mp3" -#url = "http://mp3stream1.apasf.apa.at:8000/listen.pls" -input_http = strip_blank(id="http_strip", input.http(id="stream", url)) -#input_http = mksafe(i) -ignore(input_http) - - -input_fs = strip_blank(id="fs_strip", single("/var/audio/fallback/music.flac")) -#fallback(track_sensitive=false, -# [ single("/var/audio/fallback/music.flac"), playlist.safe("/var/audio/fallback/NightmaresOnWax/Smokers Delight") ] ) -ignore(input_fs) - -#output.alsa(device="hw:0,0", bufferize=false, input_alsa) -#output.alsa(device="hw:0,0", bufferize=false, input_http) -#output.pulseaudio(input_http) -#output.alsa(device="hw:0,0", bufferize=false, input_fs) -#output.pulseaudio(input_fs) - -mixer = mix(id = "mixer", [input_fs, input_http, input_alsa]) -#final_stream = fallback(id="station_fallback", [mixer, playlist.safe("/var/audio/fallback/NightmaresOnWax/Smokers Delight")]) -output.alsa(bufferize=false, mixer) - -ignore(mixer) -#ignore(input_fs) -#ignore(input_http) -#ignore(input_alsa) - - - diff --git a/modules/liquidsoap/library.liq b/modules/liquidsoap/library.liq deleted file mode 100644 index a0bacf9410172ab9e9431fc0099cf9e0747b51ad..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/library.liq +++ /dev/null @@ -1,139 +0,0 @@ -%include "readini.liq" - -inifile = '/etc/aura/aura.ini' -ini = read_ini(inifile) - -def get_task_number (taskname) = - tasks = [ - ('seek_track', '10'), - ('load', '11'), - ('move', '12'), - ('insert', '13'), - ('remove', '14'), - ('push', '15'), - ('data', '16'), - ('skip', '17'), - ('pause', '19'), - ('play', '18'), - ('flush', '16'), - ] - if list.mem_assoc(taskname, tasks) then - tasks[taskname] - else - log("Warning: task #{taskname} does not exist") - "00" - end -end - -def get_namespace_number(namespace) = - channelnames = ref string.split(separator=',', list.assoc("channels", ini)) - - namespaces = [ - ('player', '10'), - ('common', '11'), - ('playlist', '11'), - ('request', '12'), - ('mixer', '13'), - ] - def addNamespace (ret, el) - number = string_of((list.length(ret) + 10)) - list.append(ret,[("ch#{el}", "#{number}")]) - end - namespaces = list.fold(addNamespace, namespaces, !channelnames) - - if list.mem_assoc(namespace, namespaces) then - namespaces[namespace] - else - log("Warning: namespace #{namespace} does not exist") - log(json_of(namespaces)) - "00" - end -end - -def create_protocol () = - #pwd = list.hd(get_process_lines('pwd')) - #def getdirname() = - - # if dirname(argv(0)) == "." then - # "" - # else - # '/'^dirname(argv(0)) - # end - #end - #cur = getdirname() - add_protocol(temporary=true, "silence", fun(arg,delay)-> begin system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/silence.sh 0.01 > /var/tmp/quiet.wav; qwavheaderdump -q -F /var/tmp/quiet.wav > /dev/null' ) ['/var/tmp/quiet.wav'] end) -end - -#create_protocol() - -def message (~value="", namespace, success, message, code, error, ~level="error", ~type='internal') = - - level = if success then 'success' else level end - namespace = if namespace == 'common' then - 'playlist' - else - namespace - end - namespace_number = get_namespace_number(namespace) - code = "10#{namespace_number}#{code}" - result = [('section', '#{namespace}'), - ('success', '#{success}'), - ('message', '#{message}'), - ('value', '#{value}'), - ('code', '#{code}#{error}'), - ('level', '#{level}'), - ('type', '#{type}'), - ] - json_of(compact=true,result) - -end - -##Sorgt für unterbrechungsfreien Wechsel zwischen den Tracks -def crossfade(a,b) - add(normalize=false, - [ fade.initial(duration=2., b), - sequence(merge=true, - [ blank(duration=0.), fallback([]) ]), - fade.final(duration=2.,a) ]) -end - -def foldplaylist(l, el)= - # fold metadata to list - def tolist (ret, el) = - tmp = string.split(separator='=',el) - if list.length(tmp) > 1 then # found the separator in current el - # get the key -> value pair - key = list.nth(tmp,0) - value = list.nth(tmp,1) - # append to list - list.append(ret,[(key,value)]) - else - # nothing to do - ret - end - end - # extract metadata part from annotation - extracted = string.extract(pattern="annotate:[,](.*):/",string.replace(pattern='"',(fun (s) -> ""),el)) - # split extracted string by comma separator and create a list - list.append(l,[list.fold(tolist, [], string.split(separator=',',extracted["1"]))]) -end -# The server seeking function -def seek_track(source, t) = - - t = float_of_string(default=0.,t) - ret = source.seek(source,t) - log("Seeked #{ret} seconds.") - success = ret > 0. - error = if success then '00' else '01' end - errors = [('00', 'Seeked #{ret} seconds on #{source.id(source)}'), ('01', 'Seek failed')] - message(value=string_of(ret), source.id(source), success, errors[error], get_task_number ('seek_track'), error, level="warning", type='unknown') - #"Seeked #{ret} seconds." -end - -def reload_recorded(~skip, ~uri) = - print('param skip: #{skip} +++ param uri: #{uri}') - print("reload_recorded not implemented") - "nana" -end - - diff --git a/modules/liquidsoap/playd.liq b/modules/liquidsoap/playd.liq deleted file mode 100644 index 42466444241f59c5e625756943af8480b998688c..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/playd.liq +++ /dev/null @@ -1,310 +0,0 @@ -#!/usr/bin/liquidsoap - -#set("log.stdout", true) - -inst = if argv(1) != "" then string_of(argv(1)) else 'playd' end -instance = ref inst - -%include "readini.liq" - -inifile = '/etc/aura/aura.ini' -ini = read_ini(inifile) - -# send alive -ignore(system('#{list.assoc("install_dir", ini)}/modules/liquidsoap/helpers/message.py -c #{!instance} -t sayAlive')) -# send alive frequently -exec_at(freq=20., pred={true}, {ignore(system('#{list.assoc("install_dir", ini)}/modules/liquidsoap/helpers/message.py -c #{!instance} -t sayAlive'))}) - -# set current playlist -ignore(system('#{list.assoc("install_dir", ini)}/modules/liquidsoap/helpers/message.py -c #{!instance} --task=setState -n playlistcurrent -v ""')) - -# load data from ini file -#daemongroup = list.assoc("daemongroup", ini) -#daemonuser = list.assoc("daemonuser", ini) - - -socketdir = list.assoc("socketdir", ini) - -# ALSA settings -use_alsa = list.assoc("use_alsa", ini) -alsa_buffer = int_of_string(list.assoc("alsa_buffer", ini)) -alsa_periods = int_of_string(list.assoc("alsa_periods", ini)) - -# set player i/o devices -player_input = list.assoc("input_device", ini) -#player_second_input = list.assoc("player_second") -player_output = list.assoc("output_device", ini) - -# fallback settings -fallback_audio_folder = list.assoc("fallback_audio_folder", ini) -fallback_max_blank = float_of_string(list.assoc("fallback_max_blank", ini)) -fallback_min_noise = float_of_string(list.assoc("fallback_min_noise", ini)) -fallback_threshold = float_of_string(list.assoc("fallback_threshold", ini)) - -# channel names from config -channelnames = ref string.split(separator=',', list.assoc("channels", ini)) - -# alsa settings -# buffer - decrease latency: eg. alsa_buffer="2024" -set("alsa.alsa_buffer", alsa_buffer) -set("alsa.periods", alsa_periods) - -# enable socketserver -set("server.socket", true) -set("server.socket.path", socketdir^"/<script>.sock") -set("server.telnet", true) -set("server.telnet.port", 1234) - -# enable daemon -#set("init.daemon", true) -#set("init.daemon.change_user.group", daemongroup) -#set("init.daemon.change_user.user", daemonuser) -#set("init.daemon.pidfile.path", socketdir^"/<script>.pid") -#set("init.daemon.pidfile.perms", 0o666) - -# set logging -set("log.file",true) -set("log.file.path", list.assoc("logdir", ini)^"/<script>.log") -set("log.file.perms",0o640) -set("log.level", 10) - -# allowed mime types -set("playlists.mime_types.xml",["text/xml","application/xml","application/xspf+xml"]) - -# load functions -# dir = list.assoc("install_dir", ini) - -%include "library.liq" -%include "playlist.liq" - -# Der input wie oben definiert -def get_input() - def get_input() - if use_alsa == "y" then - if player_input == "soundcard" then - print("autodetect device") - input.alsa(id="sound_input", fallible=true, clock_safe=false) - else - print("manual set device: "^player_input) - input.alsa(id="sound_input", fallible=true, clock_safe=false, device=player_input) - end - else - input.pulseaudio(id="sound_input") - end - end - def get_fallback() - if fallback_audio_folder != "" then - print("fallbackfolder chosen: "^fallback_audio_folder) - playlist.safe("/var/audio/fallback/music.flac") - #playlist.safe(fallback_audio_folder) - else - blank(duration=20.0) - end - end - - if player_input == "" then - blank(duration=0.1) # wait... - else - # start silence detector on input alsa and set a fallback - fallback(track_sensitive=false, - [ strip_blank(max_blank=fallback_max_blank, min_noise=fallback_min_noise, threshold=fallback_threshold, get_input()), - get_fallback() ] - ) - end -end - -playlistrunning = ref false - -playlist_recorded = playlist.xml(id='playlist', on_done=fun() -> begin ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n playlistcurrent -v ""')) ignore(server.execute('mixer.select 0 false')) end, 'none') -# Die Source aus der Playlist -recorded = snd(playlist_recorded) - -# Skippen erlauben -add_skip_command(recorded) - -# Funktion zum laden einer neuen Playlist -playlist_funcs = fst(playlist_recorded) - -# Flush functions -flush_recorded = snd(fst(playlist_funcs)) - -# Reload function -reload_recorded = fst(fst(playlist_funcs)) - -#up funtction -move_recorded = fst(fst(snd(playlist_funcs))) - -#insert funtction -insert_recorded = fst(snd(fst(snd(playlist_funcs)))) - -# remove function -remove_recorded = snd(snd(fst(snd(playlist_funcs)))) - -#push function -push_recorded = snd(snd(snd(playlist_funcs))) - -#show playlist function -data_recorded = fst(snd(snd(playlist_funcs))) - -# create playlist source with smart crossfade -playlist = fallback(id="common", track_sensitive=false, [ - switch(transitions = - [crossfade,crossfade], - [ - ( {!playlistrunning == true}, recorded ), # play the playlist - ( {!playlistrunning == false}, get_input() ) - ] - ), - if fallback_audio_folder != "" then - playlist.safe(fallback_audio_folder) - else - blank(duration=20.0) - end -]) - -# method to dynamicaly create a channel -def addChannel (ret, el, ~base="ch") - equeue = request.equeue(id = base^el) # create the equeue request - # add a seek function to the channel - server.register(namespace="ch"^el, - description="Seek to a relative position", - usage="seek <duration>", - "seek",fun (x) -> begin seek_track(equeue, x) end) - # append and return the list - list.append(ret,[equeue]) -end - -channels = addChannel([], '1', base='auto') -channels = addChannel(channels, '2', base='auto') -channels = list.fold(addChannel, channels, !channelnames) - -mixer = mix(id = "mixer", list.append([playlist], channels)) -#ignore(s) # testing - - -# User may load a XML-Playlist -#server.register(namespace='playlist', -# description="Load Playlist", -# usage="load <uri>", -# "load",fun (p) -> begin -# reload_recorded(skip=0, uri=p) -# end -#) - -# Register the seek function -server.register(namespace='playlist', - description="Seek to a relative position", - usage="seek <duration>", - "seek",fun (x) -> begin seek_track(recorded, x) end -) - -# The play function -server.register(namespace='playlist', - description="Play recorded files", - usage="play", - "play",fun (x) -> if !playlistrunning == true then - message('playlist', false, 'Playlist already playing', get_task_number ('play'), '01', level="info", type="user") - else - ignore(server.execute('mixer.select 0 true')) - playlistrunning := true - message('playlist', true, 'Start playing' , get_task_number ('play'), '00') - end -) - -# Flush current playlist -server.register(namespace='playlist', - description="Flush recorded playlist", - usage="flush", - "flush",fun (s) -> begin flush_recorded() end) - -# The remove function -server.register(namespace='playlist', - description="Remove item from playlist", - usage="remove <pos>", - "remove",fun (p) -> begin remove_recorded(int_of_string(p)) end) - -# Let the user move up or down a track -server.register(namespace='playlist', - description="Move an item up or down", - usage="move <from> <to>", - "move",fun (p) -> begin - params=string.split(separator=" ",p) - src=if list.length(params)>0 then (int_of_string(list.nth(params,0))+0) else 0 end - target=if list.length(params)>1 then (int_of_string(list.nth(params,1))+0) else 0 end - move_recorded(src, target) - end -) - -# Insert an entry -server.register(namespace='playlist', - description="Add an entry", - usage="insert <pos> <uri> [<title> <time>]", - "insert",fun (p) -> begin - params=string.split(separator=" ",p) - pos=if list.length(params)>0 then list.nth(params,0) else '' end - uri=if list.length(params)>1 then list.nth(params,1) else '' end - title=if list.length(params)>2 then list.nth(params,2) else '' end - time=if list.length(params)>3 then list.nth(params,3) else '' end - insert_recorded(pos=pos, title=title,time=time,uri) - end -) - -# Insert a track on top of playlist -server.register(namespace='playlist', - description="Push an item to top and play immediately", - usage="push <pos>", - "push",fun (p) -> begin - params=string.split(separator=" ",p) - pos=if list.length(params)>0 then int_of_string(list.nth(params,0)) else 0 end - push_recorded(pos) - end -) - -# Show metadata -server.register(namespace='playlist', - description="Show remaining playlist data in json format", - usage="data", - "data",fun (s) -> begin - playlist = data_recorded() - json_of(compact=true, playlist) - end -) - -# Pause/stop playlist -server.register(namespace='playlist', - description="Pause playing recorded files", - usage="pause", - "pause", fun (x) -> if !playlistrunning == false then - message('playlist', false, 'Playlist already stopped', get_task_number ('pause'), '01', level="info", type="user") - else - playlistrunning := false - ignore(server.execute('playlist.skip')) - ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n playlistcurrent -v ""')) - message('playlist', true, 'Playlist stopped', get_task_number ('pause'), '00') - end -) - -# get remaining time -server.register(namespace='playlist', - description="Remaining time", - usage = "remaining", - "remaining", fun(x) -> string_of(source.remaining(recorded)) -) - -#streamm = single("/var/audio/fallback/music.flac") -#ignore(streamm) # testing - -# Alsa output -if use_alsa == "y" then - if player_output == 'soundcard' then - output.alsa(id="player", fallible=true, mixer) - else - output.alsa(id="player", fallible=true, device=player_output, mixer) - end -else - output.pulseaudio(id="player", mixer) -end - - -# %include "stream.liq" - diff --git a/modules/liquidsoap/playlist.liq b/modules/liquidsoap/playlist.liq deleted file mode 100644 index dcc724f39e05886163d3f505a43036a85f7dd3bf..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/playlist.liq +++ /dev/null @@ -1,202 +0,0 @@ - -# Liest Playlist im XML-Format (XSPF) -%include "readini.liq" -%include "library.liq" - -inst = if argv(1) != "" then string_of(argv(1)) else 'playd' end -instance = ref inst - -error_message = ref "" - -def playlist.xml(~id="",~skip=0,~on_done={()},uri) - # A reference to the playlist - - playlist = ref [] - - # A reference to the uri - playlist_uri = ref uri - # A reference to know if the source - # has been stopped - has_stopped = ref false - # The next function - see request.dynamic - def next () = - file = - if list.length(!playlist) > 0 then - ret = list.hd(!playlist) # get first entry - playlist := list.tl(!playlist) # remove first entry from playlist - ret - else - # Playlist finished? - if not !has_stopped then - on_done () # call on_done method - end - has_stopped := true - "" - end - if file == '' then - request.create("silence:waiting") # - else - track = file - extracted = string.extract(pattern="annotate:.*:(/.*)",string.replace(pattern='"',(fun (s) -> ""), track)) - wavfile = extracted["1"] - - ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n playlistcurrent -v "#{wavfile}"')) - request.create(track) - end - end - # Instanciate the source - source = request.dynamic(id=id,next) - - # flush function - def flush () = - log(label=id,"Flush "^string_of(list.length(!playlist))^" Items") - playlist := [] # playlist is empty now - ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n playlistcurrent -v ""')) - message(value=json_of(!playlist), 'playlist', true, "Playlist flushed", get_task_number ('flush'), "00", type='internal') - end - - # Get its id. - id = source.id(source) - # The load function - def load_playlist (~skip=1) = - - playlist_tmp = request.create.raw(!playlist_uri) # temporary try to create the playlist - - result = - if file.exists(!playlist_uri) and request.resolve(playlist_tmp) then # playlist should exist and be resolvable - playlist_tmp = request.filename(playlist_tmp) # create a temporary request - entries = playlist.parse(playlist_tmp) # parse the playlist request - - # create a annotation from playlist track - def annotate_track(el) = - meta = fst(el) - # remove protocol from filepath - filepath = string.replace(pattern='"',(fun (s) -> ""),string.replace(pattern='file://',(fun (s) -> ""),string.escape(snd(el)))) - # fold metadata - s = list.fold(fun (cur, el) -> begin "#{cur},#{fst(el)}=#{string.escape(snd(el))}" end, "", meta) - # return annotation - "annotate:#{s}:#{filepath}" - end - # map entries - error_message := if list.length(entries) > 0 then "OK" else "empty" end - list.map(annotate_track,entries) - else - error_message := if file.exists(!playlist_uri) then "!resolve" else "!exist" end - log(label=id,"Couldn't read playlist: request resolution failed.") - # return an empty list - [] - end - request.destroy(playlist_tmp) # destroy the temporary request - playlist := result - end - - # Move function - def move (fromPos, toPos) = - countx = ref -1 # counter - fromx = ref (fromPos - 1) # position of item - tox = ref (toPos - 1) # position to move - msg = ref "" - msg := message('playlist', true, "Item #{fromPos} moved to #{toPos} in Playlist", get_task_number ('move'), "00", type='internal') - # check if we can move - if (toPos) > list.length(!playlist) - or (fromPos) > list.length(!playlist) - or toPos < 1 - or fromPos < 1 then - msg := message('playlist', false, "Moving item #{fromPos} to position #{toPos} is impossible.", get_task_number ('move'), "01", type='user', level="warning") - elsif toPos != fromPos then - # get the item to move - itemToMove = ref list.nth(!playlist, !fromx) - - # returns the resorted list - def resort (ret, el) = - countx := !countx + 1 - if !countx == !fromx then # das ist das Item, das verschoben wird - es wird uebersprungen - ret - elsif !countx == !tox then # Wir haben die Position erreicht, an der das zu verschiebende Item platziert wird - if !fromx < !tox then # aber entry wurde bereits uebersprungen - list.append(ret,[el, !itemToMove]) # also muss hinter dem aktuellen Element eingefuegt werden - else - list.append(ret,[!itemToMove, el]) # ...andernfalls davor - end - - else - list.append(ret,[el]) #Liste um den aktuellen Eintrag erweitern - end - end - playlist := list.fold(resort, [], !playlist) - end - !msg - end - - # method to delete an item from the list - def remove (index) = - countx = ref 0 - delx = ref (index - 1) - - def delete (ret, el) = - countx := !countx + 1 - if !countx == (!delx +1) then - ret # the position to be removed - else - list.append(ret,[el]) # append evereything else - end - end - - playlist := list.fold(delete, [], !playlist) - message(value=json_of(!playlist), 'playlist', true, "Item #{index} removed from Playlist", get_task_number ('remove'), "00", type='internal') - end - - # method to insert an item - def insert (~title='Unknown', ~time='00:00', ~pos='', uri) = - el = 'annotate:title="#{title}",time="#{time}",location="#{uri}":#{uri}' - playlist := list.append(!playlist,[el]) #Item erst mal an die Playlist anhaengen - if int_of_string(pos) > 0 then # Eine Position ist angegeben - result = move(list.length(!playlist), int_of_string(pos)) # Item dorthin verschieben - result_list = of_json(default=[('success','false')], result) # Die Ausgabe von "move" als assoziatives Array - if list.assoc('success', result_list) != "true" then # War move nicht erfolgreich? - result # ... dann geben wir die Ausgabe von move zurueck - else # ... andernfalls Erfolgsmeldung - message(value=json_of(!playlist), 'playlist', true, "#{title} item inserted into #{pos} in Playlist", get_task_number ('insert'), "00", type='internal') - end - elsif int_of_string(uri) > 0 then # uri ist ein int? Da hat der User was falsch gemacht... - message('playlist', true, "Syntax error: playlist.insert <pos> <uri> [<title> <time>]", get_task_number ('insert'), "01", type='user', level="info") - else # da auch, da ist pos 0 oder negativ - message('playlist', true, "Cannot insert #{title} at position #{pos}. Put it on the end.", get_task_number ('insert'), "02", type='user', level="info") - end - end - - # returns the remaining list - def getplaylist () = - - list.fold(foldplaylist, [], !playlist) - end - - def push (index) = - "Not implemented yet" - end - - # The reload function - def reload(~blank=false, ~skip=0, ~uri="") = - if uri != "" then - playlist_uri := uri - end - log(label=id,"Reloading playlist with URI #{!playlist_uri}") - has_stopped := false - load_playlist(skip=skip) - #if !error_message == 'OK' then - # message('playlist', true, 'Playlist #{!playlist_uri} loaded', get_task_number ('load'), '00', level="success") - #elsif !error_message == '!exist' then - # message('playlist', false, "Playlist #{!playlist_uri} does not exist", get_task_number ('load'), '01', level="warning", type="external") - #elsif !error_message == 'empty' then - # message('playlist', false, "Playlist #{!playlist_uri} is empty or wrong format", get_task_number ('load'), '02', level="warning", type="external") - #else - # message('playlist', false, "Playlist #{!playlist_uri} doesn't resolve.", get_task_number ('load'), '03', level="warning", type="external") - #end - end - log(label=id,"Loading playlist with URI #{!playlist_uri}") - # Load the playlist - load_playlist(skip=skip) - # Return - (((reload,flush),((move,(insert,remove)),(getplaylist,push))),source) -end - diff --git a/modules/liquidsoap/pulse.liq b/modules/liquidsoap/pulse.liq deleted file mode 100644 index f1a018955e0c107f094a84eeb7f8348b62a510fe..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/pulse.liq +++ /dev/null @@ -1,6 +0,0 @@ - -input_fs = single(id="fs", "/var/audio/fallback/output.flac") -input_http = input.http(id="http", "http://stream.fro.at/fro128.mp3") -linein_pulse_1 = input.pulseaudio(id="linein", device = input_device_0) -mixer = mix(id="mixer", [input_fs, input_http, linein_pulse_1]) -out := output.pulseaudio(id="lineout", mixer) diff --git a/modules/liquidsoap/record.liq b/modules/liquidsoap/record.liq deleted file mode 100644 index b2952201fb920e11f2f916dcbfd7283464a69356..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/record.liq +++ /dev/null @@ -1,159 +0,0 @@ -inst = if argv(1) != "" then string_of(argv(1)) else 'record' end -instance = ref inst - -%include "readini.liq" - -ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} -t sayAlive')) -exec_at(freq=20., pred={true}, {ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} -t sayAlive'))}) - -audiobase= if !instance == 'record' then list.assoc("audiobase", ini) else list.assoc("altaudiobase", ini) end -filenamepattern = ref audiobase^"/%Y-%m-%d/%Y-%m-%d-%H-%M.wav" -daemongroup = list.assoc("daemongroup", ini) -daemonuser = list.assoc("daemonuser", ini) -socketdir = list.assoc("socketdir", ini) -recinput = if !instance == 'record' then list.assoc("recinput", ini) else list.assoc("altrecinput", ini) end -recorder_device = if !instance == 'record' then list.assoc("recorder_device", ini) else list.assoc("altrecorder_device", ini) end -set("init.daemon",true) -set("init.daemon.change_user.group",daemongroup) -set("init.daemon.change_user.user",daemonuser) -set("server.socket",true) -set("server.socket.path",socketdir^"/"^!instance^".sock") -set("init.daemon.pidfile.path",socketdir^"/"^!instance^".pid") -set("init.daemon",true) -set("log.file",true) -set("log.file.path",list.assoc("logdir", ini)^"/"^!instance^".log") -set("log.file.perms",0o660) -set("log.level",4) - -# Der aktuelle Dateiname für die Aufnahme -recordingfile = ref "" -#wir definieren eine Referenz für die Stop-Funktion, die aber bisher noch nichts tun kann -stop_f = ref (fun () -> ()) -#bewahre uns davor, dass zweimal gleichzeitig die gleiche Date aufgenommen wird -block_dump = ref false - -# Stop dump - wir definieren die Funktion, die stop_f ausführt -def stop_dump() = - f = !stop_f - f () -end - -#Der input wie oben definiert -def get_input() - if recinput == 'soundcard' then - ## input ist Alsa - if recorder_device != '' then - input.alsa(device=recorder_device) - else - input.alsa() - end - - elsif recinput == 'nosound' then - mksafe(empty()) - else - ## input ein via config definierter Stream - mksafe(input.http(recinput)) - end -end - -#Wav header fixen und ggf. die Aufzeichnung beenden -def on_close(filename) - # es darf wieder aufgenommen werden - block_dump := false - # Korrekten WAV-Header schreiben - system("qwavheaderdump -F #{filename}") - # event dumpend feuern - ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n dumpend -v #{filename}')) - log('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n dumpend -v #{filename}') - # Naechsten Dateinamen vormerken - recordingfile := list.hd(get_process_lines("date +#{!filenamepattern}")) - ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n dumpfile -v #{!recordingfile}')) -end - -#Funktion gibt Auskunft welches File aktuell ist und wieviel Prozent bereits aufgenommen werden -def currecording() - curfile = !recordingfile - if curfile != "" then - procent_done = list.hd(get_process_lines("echo $(($(stat -c%s "^curfile^")/3174777))")) - "#{curfile},#{procent_done}" - else - "" - end -end - -#Funktion zum Start der Aufzeichnung -def start_dump() = - log('start dump') - # don't record twice - if !block_dump == false then - block_dump := true - # Der Input - Alsa oder Stream - input=get_input() - record = output.file( - id="recorder", - # Wav Stereo erzeugen - %wav(stereo=true), - perm = 0o664, - # die aktuell aufnehmende Datei in 'recordingfile' festhalten - on_start={ begin - recordingfile := list.hd(get_process_lines("date +#{!filenamepattern}")) - log('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n dumpfile -v #{!recordingfile}') - ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n dumpfile -v #{!recordingfile}')) - end}, - # Beim Stoppen den Status zurücksetzen - on_stop={ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n dumpfile -v ""'))}, - # Dateipfad - !filenamepattern, - # Funktion die beim Schließen der Datei aufgerufen wird - on_close=on_close, - # Alle 30 Minuten eine neue Datei - reopen_when={ if !instance == 'record' then int_of_float(gettimeofday()/60.) mod 30 == 0 else false end }, - # Der Input - input - ) - # Die Stopfunkton zeigt nun auf die Shutdown-Funktion der aktuellen Source - stop_f := fun () -> begin - log('stop recording') - # Aufnahme sauber beenden - ignore(server.execute('recorder.stop')) - # Source zerstören - source.shutdown(record) - # Variable zurücksetzen - recordingfile := "" - end - end -end - - -# Der Server wird durch 3 Funktionen bereichert -# Der User darf die Aufzeichnung manuell starten -server.register(namespace="record", - description="Start recording.", - usage="start", - "start", - fun (s) -> begin start_dump() "OK" end) - -# Der User darf die Aufzeichnung manuell stoppen -server.register(namespace="record", - description="Stop recording.", - usage="stop", - "stop", - fun (s) -> begin stop_dump() "OK" end) - -if !instance != 'record' then - # Der User darf einen Dateinamen für die Aufnahme definieren - server.register(namespace="record", - description="Define filename for output.", - usage="setfilename", - "setfilename", - fun (s) -> begin filenamepattern := audiobase^"/"^string_of(s) "OK" end) -end - -# Der USer kann sich über den Fortschritt der Aufnahme informieren -server.register(namespace="record", - description="Show current file.", - usage="curfile", - "curfile", - fun (s) -> currecording() ) - -output.dummy(blank(id="serve")) diff --git a/modules/liquidsoap/simpleplayer.liq b/modules/liquidsoap/simpleplayer.liq deleted file mode 100644 index c5dc9f1dec7a1f9086836b2033fca6d397b8f1ab..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/simpleplayer.liq +++ /dev/null @@ -1,30 +0,0 @@ -%include "/home/gg/PycharmProjects/aura/modules/liquidsoap/readini.liq" - -ini = read_ini("/etc/aura/aura.ini") - -set("log.file",true) -set("log.file.path",list.assoc("logdir", ini)^"/<script>.log") -#set("log.file.path", "<script>.log") -set("log.file.perms",0o660) -set("log.level",3) - -#fallback_audio_folder = list.assoc("fallback_audio_folder", ini) -#fallback_audio_folder = "/var/audio/fallback" - -# track_sensitive => fallback_folder track sensitivity -# max_blank => maximum time of blank from source -# min_noise => minimum duration of noise on source to switch back over -# threshold => power in dB under which the stream is considered silent - -#stream = fallback(track_sensitive=false, -# [ strip_blank(id="", max_blank=10., min_noise=10., threshold=0., once(input.alsa(id="sound_input", fallible=true, clock_safe=false))), -# playlist.safe(fallback_audio_folder) ]) - -stream = fallback(track_sensitive=false, - [ strip_blank(id="defaultstripper", max_blank=10., min_noise=10., threshold=0., single("/var/audio/fallback/music.flac")), - playlist.safe("/var/audio/fallback/NightmaresOnWax/Smokers Delight") ] ) - -#stream = single("/var/audio/fallback/music.flac") -output.alsa(id="player", device="hw:0,0", stream) - -#output.alsa(fallible=true, input.alsa(id="sound_input", fallible=true, clock_safe=false)) diff --git a/modules/liquidsoap/stream.liq b/modules/liquidsoap/stream.liq deleted file mode 100644 index 041ee83d99391ee618972b1eca79574497cb7969..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/stream.liq +++ /dev/null @@ -1,103 +0,0 @@ -#Create stream? -stream = list.assoc("stream", ini) -stream_type = list.assoc("stream_type", ini) -stream_bitrate = int_of_string(list.assoc("stream_bitrate", ini)) -stream_port = int_of_string(list.assoc("stream_port", ini)) -stream_mountpoint = list.assoc("stream_mountpoint", ini) -stream_user = list.assoc("stream_user", ini) -stream_password = list.assoc("stream_password", ini) -stream_host = list.assoc("stream_host", ini) -stream_url = list.assoc("stream_url", ini) -stream_name = list.assoc("stream_name", ini) -stream_genre = list.assoc("stream_genre", ini) -stream_description = list.assoc("stream_description", ini) - - -if stream != "" then - if stream_type == "icecast" then - - if stream_bitrate == 24 then - ignore(output.icecast(%mp3(bitrate = 24, samplerate = 22050), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 32 then - ignore(output.icecast(%mp3(bitrate = 32, samplerate = 22050), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 48 then - ignore(output.icecast(%mp3(bitrate = 48, samplerate = 22050), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 64 then - ignore(output.icecast(%mp3(bitrate = 64, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 80 then - ignore(output.icecast(%mp3(bitrate = 80, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 96 then - ignore(output.icecast(%mp3(bitrate = 96, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 112 then - ignore(output.icecast(%mp3(bitrate = 112, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 128 then - ignore(output.icecast(%mp3(bitrate = 128, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 160 then - ignore(output.icecast(%mp3(bitrate = 160, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 192 then - ignore(output.icecast(%mp3(bitrate = 192, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 224 then - ignore(output.icecast(%mp3(bitrate = 224, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 256 then - ignore(output.icecast(%mp3(bitrate = 256, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 320 then - ignore(output.icecast(%mp3(bitrate = 320, samplerate = 44100), mount=stream_mountpoint, host=stream_host, port=stream_port, name=stream_name, url=stream_url, genre=stream_genre, description=stream_description, user=stream_user, password=stream_password, icy_metadata="true", fallible=true, s)) - - end - - elsif stream_type == "harbor" then - - if stream_bitrate == 24 then - ignore(output.harbor(%mp3(bitrate = 24, samplerate = 22050), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 32 then - ignore(output.harbor(%mp3(bitrate = 32, samplerate = 22050), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 48 then - ignore(output.harbor(%mp3(bitrate = 48, samplerate = 22050), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 64 then - ignore(output.harbor(%mp3(bitrate = 64, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 80 then - ignore(output.harbor(%mp3(bitrate = 80, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 96 then - ignore(output.harbor(%mp3(bitrate = 96, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 112 then - ignore(output.harbor(%mp3(bitrate = 112, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 128 then - ignore(output.harbor(%mp3(bitrate = 128, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 160 then - ignore(output.harbor(%mp3(bitrate = 160, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 192 then - ignore(output.harbor(%mp3(bitrate = 192, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 224 then - ignore(output.harbor(%mp3(bitrate = 224, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 256 then - ignore(output.harbor(%mp3(bitrate = 256, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - elsif stream_bitrate == 320 then - ignore(output.harbor(%mp3(bitrate = 320, samplerate = 44100), user=stream_user, password=stream_password, id="stream", port=stream_port, url=stream_url, mount=stream_mountpoint, icy_metadata="true", fallible=true, s)) - - end - end -end \ No newline at end of file diff --git a/modules/liquidsoap/test.liq b/modules/liquidsoap/test.liq deleted file mode 100644 index e5c2c61e30d6c03201d023a5adcf17339193463b..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/test.liq +++ /dev/null @@ -1,8 +0,0 @@ -set("log.file.path", "./test.log") - -#input_alsa = input.alsa(bufferize=false) #, clock_safe=false) -#output.alsa(bufferize=false, input_alsa) - -input_pulse = input.pulseaudio() #, clock_safe=false) -output.pulseaudio(input_pulse) - diff --git a/modules/liquidsoap/tester.liq b/modules/liquidsoap/tester.liq deleted file mode 100644 index f6e3f384aa4d9cabaf7d5b43650efbad90349430..0000000000000000000000000000000000000000 --- a/modules/liquidsoap/tester.liq +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/liquidsoap - -%include "/etc/aura/readini.liq" -%include "/etc/aura/library.liq" -%include "/etc/aura/playlist.liq" - -inifile = '/etc/aura/aura.ini' -ini = read_ini(inifile) - -socketdir = list.assoc("socketdir", ini) - -# set player i/o devices -live_input_device = list.assoc("live_input_device", ini) -output_device = list.assoc("output_device", ini) - -# fallback settings -station_fallback_pool = list.assoc("station_fallback_pool", ini) -ignore(station_fallback_pool) -fallback_audio_folder = list.assoc("fallback_audio_folder", ini) -fallback_max_blank = float_of_string(list.assoc("fallback_max_blank", ini)) -fallback_min_noise = float_of_string(list.assoc("fallback_min_noise", ini)) -fallback_threshold = float_of_string(list.assoc("fallback_threshold", ini)) - -# channel names from config -channelnames = ref string.split(separator=',', list.assoc("channels", ini)) - -set("server.socket", true) -set("server.socket.path", socketdir^"/<script>.sock") -set("server.telnet", true) -set("server.telnet.port", 1234) - -# alsa settings -#set("alsa.alsa_buffer", 2048) -#set("alsa.periods", 0) -#set("alsa.buffer_length", 1) - -playlistrunning = ref false -# dynamic list of sources -sources = ref [] - -playlist_recorded = playlist.xml( - id='playlist', on_done=fun() -> begin ignore(system('#{list.assoc("install_dir", ini)}/modules/soundengine/helpers/message.py -c #{!instance} --task=setState -n playlistcurrent -v ""')) ignore(server.execute('mixer.select 0 false')) end, 'none') -# Die Source aus der Playlist -recorded = snd(playlist_recorded) - -# Skippen erlauben -add_skip_command(recorded) - -# User may load a XML-Playlist -server.register(namespace='playlist', - description="Load Playlist", - usage="load <uri>", - "load",fun (p) -> begin - reload_recorded(skip=0, uri=p) - end -) - -def get_station_fallback_pool() - #playlist.safe("/var/audio/fallback/NightmaresOnWax/Smokers Delight") - playlist.safe(station_fallback_pool) - #if station_fallback_pool != "" then - # print("fallbackfolder chosen: "^station_fallback_pool) - # playlist.safe(station_fallback_pool) - #else - # print("no fallbackfolder chosen. blanking 20s.") - # blank(duration=20.0) - #end -end - -def get_live_input() - if live_input_device == "soundcard" then - print("autodetect input device") - #strip_blank(id="input_alsa_strip", max_blank=fallback_max_blank, min_noise=fallback_min_noise, threshold=fallback_threshold, - input.alsa(id="input_alsa", bufferize=false) #) - else - print("manually set device: "^live_input_device) - #strip_blank(id="input_alsa_strip", max_blank=fallback_max_blank, min_noise=fallback_min_noise, threshold=fallback_threshold, - input.alsa(id="input_alsa", bufferize=false, device=live_input_device) #) - end -end - -def get_input_fs() - fallback(track_sensitive=false, - [ single("/var/audio/fallback/music.flac"), get_station_fallback_pool() ] ) -end - -def get_input_stream() - url = "http://stream.fro.at/fro128.mp3" - #url = "http://mp3stream1.apasf.apa.at:8000/listen.pls" - mksafe(strip_blank(id="stream_strip", input.http(id="stream", url))) -end - -# create playlist source with smart crossfade -#filesystem_input = fallback(id="filesystem_input", track_sensitive=false, [ -# get_input(), -# get_fallback()]) - -# filesystem_input -#fs_input = get_input_fs() -fs_input = fallback(track_sensitive=false, - [ single("/var/audio/fallback/music.flac"), get_station_fallback_pool() ] ) - -# create a source for stream overtakes -stream_input = get_input_stream() -#url = "http://stream.fro.at/fro64.mp3" -#url = "http://mp3stream1.apasf.apa.at:8000/listen.pls" -#stream_input = strip_blank(id="httpsttrip", input.http(id="stream", url)) - -# and the studio input -#live_input = get_live_input() -live_input = input.alsa(id="input_alsa", bufferize=false) - -# API HOWTO: -# mixer.inputs -# stream.stop -# stream.url [url] -# stream.start -# mixer.select [streamovertake] true - -def addChannel(source) - sources := list.append([source], !sources) -end - -addChannel(fs_input) -addChannel(stream_input) -addChannel(live_input) - -mixer = mix(id = "mixer", !sources) - -#final_stream = fallback(id="station_fallback", [mixer, playlist.safe("/var/audio/fallback/NightmaresOnWax/Smokers Delight")] - -#server.register(namespace='mixer', -# description="Load Playlist", -# usage="select <num>", -# "load",fun (p) -> begin -# reload_recorded(skip=0, uri=p) -# end -#) - -ignore(mixer) -ignore(fs_input) -ignore(live_input) -ignore(addChannel) -ignore(stream_input) -ignore(channelnames) -ignore(output_device) -ignore(playlistrunning) -ignore(fallback_max_blank) -ignore(fallback_min_noise) -ignore(fallback_threshold) -ignore(fallback_audio_folder) - -print("output_device: "^output_device) -output.alsa(id="alsaout", bufferize=false, device=output_device, mixer) - -#ret = server.execute('help') -#print(ret) diff --git a/modules/scheduling/scheduler.py b/modules/scheduling/scheduler.py index 570fd60ca0a2e2ae032925fff44d978308f5c209..95e3754a47157700cd46ef1e28575f24987bfa08 100644 --- a/modules/scheduling/scheduler.py +++ b/modules/scheduling/scheduler.py @@ -238,7 +238,7 @@ class AuraScheduler(ExceptionLogger): # when do we have to start? diff = entry.entry_start_unix - now_unix - diff = diff/100 # testing purpose + diff = diff/1000 # testing purpose # create the activation threads and run them after <diff> seconds if entry.source.startswith("linein"): diff --git a/modules/tools/padavan.py b/modules/tools/padavan.py index 627c9bc049405b3bb1e4d166889b01a2c504a686..cabcce0c7aa965766fc508bc1ad6425c3a488ae6 100644 --- a/modules/tools/padavan.py +++ b/modules/tools/padavan.py @@ -65,6 +65,9 @@ class Padavan: elif self.args.set_fallback_for: self.set_next_fallback_file(self.args.set_fallback_for[0], self.args.set_fallback_for[1]) + elif self.args.now_playing: + self.now_playing(self.args.now_playing) + elif self.args.init_player: self.init_player() diff --git a/modules/web/routes.py b/modules/web/routes.py index 3277a12b24869fce2f0de994f42543603f2e4722..e3e9e1db7539d6cf9bec392811e9229d56c048ec 100644 --- a/modules/web/routes.py +++ b/modules/web/routes.py @@ -1,7 +1,8 @@ from flask import request from libraries.database.database import app -from libraries.database.broadcasts import TrackServiceScheduleEntry +from libraries.database.broadcasts import TrackService + class Routes: @@ -24,7 +25,7 @@ class Routes: now = request.args.get("now") if now == "": - entry = TrackServiceScheduleEntry.now_playing() + entry = TrackService.now_playing() #response[""]