kopia lustrzana https://github.com/jameshball/osci-render
				
				
				
			Merge develop
						commit
						a32634424c
					
				| 
						 | 
				
			
			@ -137,10 +137,14 @@ jobs:
 | 
			
		|||
        if: matrix.os == 'macos-latest'
 | 
			
		||||
        run: spctl -a -vvv -t install "bin/${{ matrix.project }}-${{ matrix.version }}.pkg"
 | 
			
		||||
 | 
			
		||||
      - name: List files
 | 
			
		||||
        run: Get-ChildItem -Recurse ${{ github.workspace }}
 | 
			
		||||
        shell: pwsh
 | 
			
		||||
 | 
			
		||||
      # Windows packaging (Inno Setup)
 | 
			
		||||
      - name: Compile .ISS to .EXE Installer
 | 
			
		||||
        if: matrix.os == 'windows-latest'
 | 
			
		||||
        uses: Minionguyjpro/Inno-Setup-Action@v1.2.2
 | 
			
		||||
        uses: Minionguyjpro/Inno-Setup-Action@v1.2.7
 | 
			
		||||
        with:
 | 
			
		||||
          path: "packaging/${{ matrix.project }}.iss"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Przed Szerokość: | Wysokość: | Rozmiar: 222 B Po Szerokość: | Wysokość: | Rozmiar: 222 B  | 
| 
						 | 
				
			
			@ -143,6 +143,36 @@ void EffectsComponent::resized() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void EffectsComponent::changeListenerCallback(juce::ChangeBroadcaster* source) {
 | 
			
		||||
    // Recompute whether any effects are currently selected in the new project
 | 
			
		||||
    bool anySelected = false;
 | 
			
		||||
    {
 | 
			
		||||
        juce::SpinLock::ScopedLockType lock(audioProcessor.effectsLock);
 | 
			
		||||
        for (const auto& eff : audioProcessor.toggleableEffects) {
 | 
			
		||||
            const bool isSelected = (eff->selected == nullptr) ? true : eff->selected->getBoolValue();
 | 
			
		||||
            if (isSelected) { anySelected = true; break; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Show the grid only when there are no selected effects in the project
 | 
			
		||||
    showingGrid = ! anySelected;
 | 
			
		||||
 | 
			
		||||
    if (showingGrid) {
 | 
			
		||||
        grid.setVisible(true);
 | 
			
		||||
        listBox.setVisible(false);
 | 
			
		||||
    } else {
 | 
			
		||||
        grid.setVisible(false);
 | 
			
		||||
        listBox.setVisible(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Always refresh disabled states so opened projects immediately reflect which
 | 
			
		||||
    // effects are already in use, and so the Cancel button visibility is correct.
 | 
			
		||||
    grid.refreshDisabledStates();
 | 
			
		||||
 | 
			
		||||
    // Refresh list contents to reflect newly loaded project data
 | 
			
		||||
    itemData.resetData();
 | 
			
		||||
    listBox.updateContent();
 | 
			
		||||
 | 
			
		||||
    // Ensure layout updates after visibility changes
 | 
			
		||||
    resized();
 | 
			
		||||
    repaint();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@
 | 
			
		|||
#include "audio/BitCrushEffect.h"
 | 
			
		||||
#include "audio/BulgeEffect.h"
 | 
			
		||||
#include "audio/TwistEffect.h"
 | 
			
		||||
#include "audio/PolygonBitCrushEffect.h"
 | 
			
		||||
#include "audio/PolygonizerEffect.h"
 | 
			
		||||
#include "audio/SpiralBitCrushEffect.h"
 | 
			
		||||
#include "audio/DistortEffect.h"
 | 
			
		||||
#include "audio/UnfoldEffect.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ OscirenderAudioProcessor::OscirenderAudioProcessor() : CommonAudioProcessor(Buse
 | 
			
		|||
    toggleableEffects.push_back(BounceEffect().build());
 | 
			
		||||
    toggleableEffects.push_back(TwistEffect().build());
 | 
			
		||||
    toggleableEffects.push_back(SkewEffect().build());
 | 
			
		||||
    toggleableEffects.push_back(PolygonBitCrushEffect().build());
 | 
			
		||||
    toggleableEffects.push_back(PolygonizerEffect().build());
 | 
			
		||||
    toggleableEffects.push_back(KaleidoscopeEffect(*this).build());
 | 
			
		||||
    toggleableEffects.push_back(VortexEffect().build());
 | 
			
		||||
    toggleableEffects.push_back(GodRayEffect().build());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,14 +64,16 @@ public:
 | 
			
		|||
    std::shared_ptr<osci::Effect> frequencyEffect = std::make_shared<osci::SimpleEffect>(
 | 
			
		||||
        [this](int index, osci::Point input, const std::vector<std::atomic<float>>& values, float sampleRate) {
 | 
			
		||||
            // TODO: Root cause why the epsilon is needed. This prevents a weird bug on mac.
 | 
			
		||||
            frequency = values[0].load() + 0.00001;
 | 
			
		||||
            frequency = values[0].load() + 0.000001;
 | 
			
		||||
            return input;
 | 
			
		||||
        },
 | 
			
		||||
        new osci::EffectParameter(
 | 
			
		||||
            "Frequency",
 | 
			
		||||
            "Controls how many times per second the image is drawn, thereby controlling the pitch of the sound. Lower frequencies result in more-accurately drawn images, but more flickering, and vice versa.",
 | 
			
		||||
            "frequency",
 | 
			
		||||
            VERSION_HINT, 220.0, 0.0, 4200.0));
 | 
			
		||||
            VERSION_HINT, 220.0, 0.0, 4200.0
 | 
			
		||||
        )
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    std::shared_ptr<DelayEffect> delayEffect = std::make_shared<DelayEffect>();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
#include "../MathUtil.h"
 | 
			
		||||
 | 
			
		||||
// Inspired by xenontesla122
 | 
			
		||||
class PolygonBitCrushEffect : public osci::EffectApplication {
 | 
			
		||||
class PolygonizerEffect : public osci::EffectApplication {
 | 
			
		||||
public:
 | 
			
		||||
    osci::Point apply(int index, osci::Point input, osci::Point externalInput, const std::vector<std::atomic<float>>&values, float sampleRate) override {
 | 
			
		||||
        const double pi = juce::MathConstants<double>::pi;
 | 
			
		||||
| 
						 | 
				
			
			@ -40,23 +40,23 @@ public:
 | 
			
		|||
 | 
			
		||||
    std::shared_ptr<osci::Effect> build() const override {
 | 
			
		||||
        auto eff = std::make_shared<osci::SimpleEffect>(
 | 
			
		||||
            std::make_shared<PolygonBitCrushEffect>(),
 | 
			
		||||
            std::make_shared<PolygonizerEffect>(),
 | 
			
		||||
            std::vector<osci::EffectParameter*>{
 | 
			
		||||
                new osci::EffectParameter("Polygon Bit Crush",
 | 
			
		||||
                new osci::EffectParameter("Polygonizer",
 | 
			
		||||
                                          "Constrains points to a polygon pattern.",
 | 
			
		||||
                                          "polygonBitCrush", VERSION_HINT, 1.0, 0.0, 1.0),
 | 
			
		||||
                                          "polygonizer", VERSION_HINT, 1.0, 0.0, 1.0),
 | 
			
		||||
                new osci::EffectParameter("Sides", "Controls the number of sides of the polygon pattern.",
 | 
			
		||||
                                          "polygonBitCrushSides", VERSION_HINT, 5.0, 3.0, 8.0),
 | 
			
		||||
                                          "polygonizerSides", VERSION_HINT, 5.0, 3.0, 8.0),
 | 
			
		||||
                new osci::EffectParameter("Stripe Size",
 | 
			
		||||
                                          "Controls the spacing between the stripes of the polygon pattern.",
 | 
			
		||||
                                          "polygonBCStripeSize", VERSION_HINT, 0.5, 0.0, 1.0),
 | 
			
		||||
                                          "polygonizerStripeSize", VERSION_HINT, 0.5, 0.0, 1.0),
 | 
			
		||||
                new osci::EffectParameter("Rotation", "Rotates the polygon pattern.",
 | 
			
		||||
                                          "polygonBCRotation", VERSION_HINT, 0.0, 0.0, 1.0, 0.0001, osci::LfoType::Sawtooth, 0.1),
 | 
			
		||||
                                          "polygonizerRotation", VERSION_HINT, 0.0, 0.0, 1.0, 0.0001, osci::LfoType::Sawtooth, 0.1),
 | 
			
		||||
                new osci::EffectParameter("Stripe Phase", "Offsets the stripes of the polygon pattern.",
 | 
			
		||||
                                          "polygonBCStripePhase", VERSION_HINT, 0.0, 0.0, 1.0, 0.0001, osci::LfoType::Sawtooth, 2.0)
 | 
			
		||||
                                          "polygonizerStripePhase", VERSION_HINT, 0.0, 0.0, 1.0, 0.0001, osci::LfoType::Sawtooth, 2.0)
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
        eff->setIcon(BinaryData::polygon_bitcrush_svg);
 | 
			
		||||
        eff->setIcon(BinaryData::polygonizer_svg);
 | 
			
		||||
        return eff;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -276,8 +276,9 @@ void DraggableListBox::itemDropped(const SourceDetails& details)
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (fromIndex >= 0 && insertIndex >= 0)
 | 
			
		||||
        if (fromIndex >= 0 && insertIndex >= 0) {
 | 
			
		||||
            m->moveByInsertIndex(fromIndex, insertIndex);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    clearDropIndicator();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,28 +107,15 @@ public:
 | 
			
		|||
    {
 | 
			
		||||
        const int count = modelData.getNumItems();
 | 
			
		||||
        if (count <= 0) return;
 | 
			
		||||
        insertIndex = juce::jlimit(0, count, insertIndex);
 | 
			
		||||
        // Dropping at the very end (after last item) should move the item to the end.
 | 
			
		||||
        if (insertIndex == count)
 | 
			
		||||
        {
 | 
			
		||||
            if (fromIndex != count - 1 && count > 1)
 | 
			
		||||
                modelData.moveAfter(fromIndex, count - 1);
 | 
			
		||||
            // Nothing to do if already last.
 | 
			
		||||
            listBox.updateContent();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        int toIndex = juce::jlimit(0, count, insertIndex);
 | 
			
		||||
 | 
			
		||||
        // No-op if user drops item back in place (before itself) or immediately after itself.
 | 
			
		||||
        if (insertIndex == fromIndex || insertIndex == fromIndex + 1)
 | 
			
		||||
        if (toIndex == fromIndex || toIndex == fromIndex + 1)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        int toIndex = insertIndex;
 | 
			
		||||
        if (toIndex > fromIndex)
 | 
			
		||||
            toIndex -= 1; // account for removal shifting indices when moving down
 | 
			
		||||
 | 
			
		||||
        if (toIndex <= 0)
 | 
			
		||||
            modelData.moveBefore(fromIndex, 0);
 | 
			
		||||
        else if (toIndex >= count - 1)
 | 
			
		||||
        else if (toIndex >= count)
 | 
			
		||||
            modelData.moveAfter(fromIndex, count - 1); // treat anything past last valid index as end
 | 
			
		||||
        else
 | 
			
		||||
            modelData.moveBefore(fromIndex, toIndex);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,8 +40,9 @@ void OsciMainMenuBarModel::resetMenuItems() {
 | 
			
		|||
                                                       "\n\n"
 | 
			
		||||
                                                       "A huge thank you to:\n"
 | 
			
		||||
                                                       "DJ_Level_3, for contributing several features to osci-render\n"
 | 
			
		||||
                                                       "Anthony Hall, for adding many new effects, and improving existing ones\n"
 | 
			
		||||
                                                       "BUS ERROR Collective, for providing the source code for the Hilligoss encoder\n"
 | 
			
		||||
                                                       "Jean Perbet (@jeanprbt) for the osci-render macOS icon\n"
 | 
			
		||||
                                                       "TheDumbDude, for contributing several example Lua files\n"
 | 
			
		||||
                                                       "All the community, for suggesting features and reporting issues!",
 | 
			
		||||
                                                   std::any_cast<int>(audioProcessor.getProperty("objectServerPort")));
 | 
			
		||||
        options.content.setOwned(about);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -166,7 +166,7 @@ public:
 | 
			
		|||
        setWantsKeyboardFocus (false);
 | 
			
		||||
 | 
			
		||||
    auto content = new juce::Component();
 | 
			
		||||
    setViewedComponent(content, false);
 | 
			
		||||
    setViewedComponent(content, true);
 | 
			
		||||
        content->setWantsKeyboardFocus (false);
 | 
			
		||||
 | 
			
		||||
    // Enable scroll fades for list views by default
 | 
			
		||||
| 
						 | 
				
			
			@ -1076,3 +1076,4 @@ juce::MouseCursor VListBoxModel::getMouseCursorForRow (int)
 | 
			
		|||
{
 | 
			
		||||
    return juce::MouseCursor::NormalCursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
              addUsingNamespaceToJuceHeader="0" jucerFormatVersion="1" pluginCharacteristicsValue="pluginWantsMidiIn"
 | 
			
		||||
              pluginManufacturer="jameshball" aaxIdentifier="sh.ball.oscirender"
 | 
			
		||||
              cppLanguageStandard="20" projectLineFeed="
" headerPath="./include"
 | 
			
		||||
              version="2.6.2.0" companyName="James H Ball" companyWebsite="https://osci-render.com"
 | 
			
		||||
              version="2.6.2.2" companyName="James H Ball" companyWebsite="https://osci-render.com"
 | 
			
		||||
              companyEmail="james@ball.sh" defines="NOMINMAX=1
INTERNET_FLAG_NO_AUTO_REDIRECT=0
OSCI_PREMIUM=1
JUCE_USE_CUSTOM_PLUGIN_STANDALONE_APP=1
JUCE_MODAL_LOOPS_PERMITTED=1"
 | 
			
		||||
              pluginAUMainType="'aumf'" postExportShellCommandPosix="echo "Building LuaJIT for $OSTYPE..." && DIR=%%1%% %%1%%/luajit_linux_macos.sh ">
 | 
			
		||||
  <MAINGROUP id="j5Ge2T" name="osci-render">
 | 
			
		||||
| 
						 | 
				
			
			@ -127,8 +127,7 @@
 | 
			
		|||
        <FILE id="zFdUYi" name="planet.svg" compile="0" resource="1" file="Resources/svg/planet.svg"/>
 | 
			
		||||
        <FILE id="sfWuFd" name="play.svg" compile="0" resource="1" file="Resources/svg/play.svg"/>
 | 
			
		||||
        <FILE id="FJG3Ht" name="plus.svg" compile="0" resource="1" file="Resources/svg/plus.svg"/>
 | 
			
		||||
        <FILE id="NVf72g" name="polygon_bitcrush.svg" compile="0" resource="1"
 | 
			
		||||
              file="Resources/svg/polygon_bitcrush.svg"/>
 | 
			
		||||
        <FILE id="iHiXPh" name="polygonizer.svg" compile="0" resource="1" file="Resources/svg/polygonizer.svg"/>
 | 
			
		||||
        <FILE id="f0yiwT" name="puzzle.svg" compile="0" resource="1" file="Resources/svg/puzzle.svg"/>
 | 
			
		||||
        <FILE id="ElMcEN" name="pyramid.svg" compile="0" resource="1" file="Resources/svg/pyramid.svg"/>
 | 
			
		||||
        <FILE id="PFc2q2" name="random.svg" compile="0" resource="1" file="Resources/svg/random.svg"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -174,6 +173,8 @@
 | 
			
		|||
    </GROUP>
 | 
			
		||||
    <GROUP id="{75439074-E50C-362F-1EDF-8B4BE9011259}" name="Source">
 | 
			
		||||
      <GROUP id="{85A33213-D880-BD92-70D8-1901DA6D23F0}" name="audio">
 | 
			
		||||
        <FILE id="EjkbRe" name="PolygonizerEffect.h" compile="0" resource="0"
 | 
			
		||||
              file="Source/audio/PolygonizerEffect.h"/>
 | 
			
		||||
        <FILE id="XSUjDz" name="KaleidoscopeEffect.h" compile="0" resource="0"
 | 
			
		||||
              file="Source/audio/KaleidoscopeEffect.h"/>
 | 
			
		||||
        <FILE id="mREEpc" name="UnfoldEffect.h" compile="0" resource="0" file="Source/audio/UnfoldEffect.h"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -182,8 +183,6 @@
 | 
			
		|||
        <FILE id="tU2pQl" name="SkewEffect.h" compile="0" resource="0" file="Source/audio/SkewEffect.h"/>
 | 
			
		||||
        <FILE id="yxWOsR" name="DuplicatorEffect.h" compile="0" resource="0"
 | 
			
		||||
              file="Source/audio/DuplicatorEffect.h"/>
 | 
			
		||||
        <FILE id="GJoA2i" name="PolygonBitCrushEffect.h" compile="0" resource="0"
 | 
			
		||||
              file="Source/audio/PolygonBitCrushEffect.h"/>
 | 
			
		||||
        <FILE id="GbAmhn" name="SpiralBitCrushEffect.h" compile="0" resource="0"
 | 
			
		||||
              file="Source/audio/SpiralBitCrushEffect.h"/>
 | 
			
		||||
        <FILE id="HE3dFE" name="AudioRecorder.h" compile="0" resource="0" file="Source/audio/AudioRecorder.h"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,10 +46,10 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
 | 
			
		|||
Name: "deletefiles"; Description: "Remove any existing settings (Clean installation)"; Flags: unchecked
 | 
			
		||||
 | 
			
		||||
[Files]
 | 
			
		||||
Source: "..\Builds\osci-render\VisualStudio2022\x64\Release\Standalone Plugin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
 | 
			
		||||
Source: "..\Builds\osci-render\VisualStudio2022\x64\Release\VST3\osci-render.vst3\Contents\x86_64-win\{#MyAppVstName}"; DestDir: "{cf}\VST3"; Flags: ignoreversion
 | 
			
		||||
Source: "..\External\spout\SpoutLibrary.dll"; DestDir: "{app}"; Flags: ignoreversion
 | 
			
		||||
Source: "..\External\spout\SpoutLibrary.dll"; DestDir: "{sys}"; Flags: ignoreversion
 | 
			
		||||
Source: "{#SourcePath}\..\Builds\osci-render\VisualStudio2022\x64\Release\Standalone Plugin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
 | 
			
		||||
Source: "{#SourcePath}\..\Builds\osci-render\VisualStudio2022\x64\Release\VST3\osci-render.vst3\Contents\x86_64-win\{#MyAppVstName}"; DestDir: "{cf}\VST3"; Flags: ignoreversion
 | 
			
		||||
Source: "{#SourcePath}\..\External\spout\SpoutLibrary.dll"; DestDir: "{app}"; Flags: ignoreversion
 | 
			
		||||
Source: "{#SourcePath}\..\External\spout\SpoutLibrary.dll"; DestDir: "{sys}"; Flags: ignoreversion
 | 
			
		||||
 | 
			
		||||
[InstallDelete]
 | 
			
		||||
Type: files; Name: {userappdata}\osci-render\osci-render.settings; Tasks: deletefiles
 | 
			
		||||
| 
						 | 
				
			
			@ -68,3 +68,4 @@ Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: de
 | 
			
		|||
[Run]
 | 
			
		||||
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue