HISE Logo Forum
    • Categories
    • Register
    • Login

    Audio Render not working as expected

    Scheduled Pinned Locked Moved Unsolved General Questions
    5 Posts 2 Posters 204 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      johnmike
      last edited by

      Messing around with the audio render snippet example in the snippet browser....works fine in the example...but when I bring it into my project...it doesn't render anything but dead space...and then the audio in HISE becomes completely disabled and I have to restart to get it back working....im trying to get it to render a preloaded midi file instead of the one that's created by the example...here's the code ive added in the attempt to make it work....

      Content.makeFrontInterface(510, 160);
      
      const var DELETE_TEMP_FILE = false;
      
      const var SeqView = Content.addPanel("SeqView", 0, 90);
      SeqView.set("width", 210);
      
      const var AudioDragger = Content.addPanel("Dragger", 0, 32);
      AudioDragger.set("width", 210);
      
      AudioDragger.set("allowCallbacks", "Clicks & Hover");
      
      const var MidiPlayer = Synth.getMidiPlayer("MIDI Player1");
      
      AudioDragger.setMouseCallback(function(event) {
          this.data.hover = event.hover;
          this.repaint();
      
          if (event.clicked) {
              if (isDefined(this.data.tempFile)) {
                  var fToDelete = this.data.tempFile;
      
                  this.startExternalFileDrag(this.data.tempFile, true, function [fToDelete]() {
                      if (DELETE_TEMP_FILE) {
                          Console.print("DELETE " + fToDelete.toString(0));
                          fToDelete.deleteFileOrDirectory();
                      }
                  });
              } else {
                  Console.print("! You need to click on render first.");
              }
          }
      });
      
      // Button to Begin Rendering
      const var Button1 = Content.addButton("Button1", 0, 0);
      Button1.set("text", "Render");
      Button1.set("isMomentary", true);
      Button1.set("saveInPreset", false);
      Button1.set("width", 210);
      
      Button1.setControlCallback(onButton1Control);
      inline function onButton1Control(component, value) {
          if (value) {
              if (!MidiPlayer.isEmpty()) {
                  Console.print("MIDI Player has a sequence loaded.");
                  local eventList = MidiPlayer.getEventList();
                  Console.print("Event list size: " + eventList.length);
      
                  if (eventList.length == 0) {
                      Console.print("! Event list is empty. Cannot render.");
                      return;
                  }
      
                  // Add a stop event at the end
                  local timeSig = MidiPlayer.getTimeSignature();
                  local length = timeSig.NumBars * timeSig.Nominator * (timeSig.Denominator / 4.0) * timeSig.LoopEnd;
                  local ts = Engine.getSamplesForQuarterBeats(length);
      
                  local stopEvent = Engine.createMessageHolder();
                  stopEvent.setType(3);
                  stopEvent.setChannel(1);
                  stopEvent.setControllerNumber(1);
                  stopEvent.setControllerValue(0);
                  stopEvent.setTimestamp(ts);
      
                  eventList.push(stopEvent);
                  Console.print("Added stop event at timestamp: " + ts);
      
                  // Render the audio
                  Console.print("Rendering audio...");
                  Engine.renderAudio(eventList, COMPOSER_RenderAudioCallback);
              } else {
                  Console.print("! No MIDI file is loaded in the MIDI Player.");
              }
          }
      }
      
      inline function COMPOSER_RenderAudioCallback(obj) {
          local isFinished = obj.finished;
          local progressPoint = obj.progress;
      
          if (isFinished) {
              Console.print("Rendering complete.");
              local bufferDataToWrite = obj.channels;
              local audioFilesDirectory = FileSystem.getFolder(FileSystem.Temp);
              local fileToExport = audioFilesDirectory.getChildFile("export_temp.wav");
      
              if (!isDefined(bufferDataToWrite[0].length)) {
                  fileToExport.writeAudioFile([bufferDataToWrite], Engine.getSampleRate(), 24);
              } else {
                  fileToExport.writeAudioFile(bufferDataToWrite, Engine.getSampleRate(), 24);
              }
      
              Console.print("Audio file exported to: " + fileToExport.toString(0));
              AudioDragger.data.tempFile = fileToExport;
              enableBroadcaster.sendAsyncMessage([true]);
          } else {
              Console.print("Progress: " + progressPoint);
          }
      }
      
      // Visualize MIDI Sequence
      SeqView.setPaintRoutine(function(g) {
          g.fillAll(0x11FFFFFF);
      
          var displayArea = this.getLocalBounds(0);
          var noteRectangleList = MidiPlayer.getNoteRectangleList(displayArea);
      
          g.setColour(Colours.white);
      
          for (noteRectangle in noteRectangleList) {
              g.fillRect(noteRectangle);
          }
      });
      
      // Broadcaster definition
      const var enableBroadcaster = Engine.createBroadcaster({
          "id": "enableBroadcaster",
          "args": ["shouldBeEnabled"],
          "tags": []
      });
      
      enableBroadcaster.addComponentPropertyListener(["Dragger"], ["enabled"], "set the enabled state for the dragger", 
      function(index, shouldBeEnabled) {
          return shouldBeEnabled;
      });
      
      enableBroadcaster.addComponentPropertyListener(["Dragger"], ["text"], "update the text", 
      function(index, shouldBeEnabled) {
          return shouldBeEnabled ? "Drag to waveform or external target" : "Press render";
      });
      
      enableBroadcaster.addComponentRefreshListener(["Dragger"], "repaint", "repaint");
      enableBroadcaster.sendAsyncMessage([false]);
      
      inline function drawDragPanel(g) {
          g.fillAll(0x22FFFFFF);
          g.setColour(this.data.hover ? Colours.white : 0xBBFFFFFF);
      
          if (!this.get("enabled"))
              g.setColour(0x44FFFFFF);
      
          g.setFont("Default", 14.0);
          g.drawAlignedText(this.get("text"), this.getLocalBounds(0), "centred");
      }
      
      AudioDragger.setPaintRoutine(drawDragPanel);
      
      
      1 Reply Last reply Reply Quote 1
      • J johnmike marked this topic as a question on
      • J
        johnmike
        last edited by

        @clevername27 any thoughts?

        clevername27C 2 Replies Last reply Reply Quote 0
        • clevername27C
          clevername27 @johnmike
          last edited by

          @johnmike Hi John, this is an excellent question - I'm on deadline for a massive project, and will get back with you later in the week with my code. Cheers.

          1 Reply Last reply Reply Quote 0
          • clevername27C
            clevername27 @johnmike
            last edited by

            @johnmike I'm refactoring my code now, and will post soon.

            J 1 Reply Last reply Reply Quote 0
            • J
              johnmike @clevername27
              last edited by

              @clevername27 awesome!

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              46

              Online

              1.7k

              Users

              11.7k

              Topics

              101.8k

              Posts