Skip to main content

Why does this canvas content get cut off when oriented sideways?

I have an audio visualizer I've made and (I've increased the height cap of it so the problem is more clear) for some reason it just cuts off at a certain point and I haven't been able to figure it out. While the visualizer has this issue when oriented to the left like this, the problem does not exist when anchored normally to the bottom. Any help to figure this out would be greatly appreciated!

How it looks now \/

bad lookikng

How I want the height to look (but sideways so its extends to the end of the canvas horizontally) \/

normal looking

This is the code for it:

 <head>
      <meta charset="UTF-8"> 
      <script src="properties.js"></script>
      <script src="clockRefresh.js"></script>
     
      <link href='https://fonts.googleapis.com/css?family=DM Mono' rel='stylesheet'>
      <link href='https://fonts.googleapis.com/css?family=Share Tech Mono' rel='stylesheet'>
  
      <style>
           #time-panel {   
                position: absolute;    
                background-color: rgba(0, 0, 0, 0.3);  
                border-radius: 20px; 
                
           }
           #hour, #min, #sec {
                font-family: 'dm mono';
                font-weight: 1000;                 
           }
           #clock {
                display: table;
                margin: 0 auto;
           }
           #audioCanvas {
                border-radius: 20px; 
                background-color: rgba(0, 0, 0, 0.3); 
                position: absolute;
           }
      </style>
      
 </head>
 <body onload="clock()"  > 
      <div id="time-panel">
           <canvas id="canvas"></canvas>
           <span id="clock">
                <span id="hour"></span>
                <span id="min"></span>
                <span id="sec"></span>
           </span>
      </div>

      <!-- Canvas where visualizer is drawn -->
      <canvas id="audioCanvas"></canvas>
     
    
      <!-- Script that creates said visualizer -->
      <script>
           // Get the audio canvas once the page has loaded
           let audioCanvas = document.getElementById('audioCanvas');

           // Get the 2D context of the canvas to draw on it in wallpaperAudioListener
           let audioCanvasCtx = audioCanvas.getContext('2d');

           // Setting internal canvas resolution to user screen resolution
           // (CSS canvas size differs from internal canvas size)
           audioCanvas.height = window.innerHeight;
           audioCanvas.width = window.innerWidth;

           function wallpaperAudioListener(audioArray) {
                audioCanvasCtx.clearRect(0, 0, audioCanvas.width, audioCanvas.height);

                if (sessionStorage.getItem("audio-orientation") == "left" ||
                     sessionStorage.getItem("audio-orientation") == "right") {

                

                     // Render bars along the full height of the canvas
                     var barWidth = Math.round(1.0 / 128.0 * audioCanvas.height);
                     var halfCount = audioArray.length / 2;
                }
                else {
                     // Render bars along the full width of the canvas
                     var barWidth = Math.round(1.0 / 128.0 * audioCanvas.width);
                     var halfCount = audioArray.length / 2;
                }
                // Begin with the left channel in red
                audioCanvasCtx.fillStyle = 'rgb(255,0,0)';
                // Iterate over the first 64 array elements (0 - 63) for the left channel audio data
                for (var i = 0; i < halfCount; i += parseInt(sessionStorage.getItem("bar-amount"))) {
                     // Create an audio bar with its hight depending on the audio volume level of the current frequency
                     var height = audioCanvas.height * Math.min(audioArray[i], 1) * sessionStorage.getItem("bar-height");
                     audioCanvasCtx.fillRect(barWidth * i, audioCanvas.height - height * sessionStorage.getItem("bar-distortion"), barWidth, height);
                }

                // Now draw the right channel in blue
                audioCanvasCtx.fillStyle = 'rgb(0,0,255)';
                // Iterate over the last 64 array elements (64 - 127) for the right channel audio data
                for (var i = halfCount; i < audioArray.length; i += parseInt(sessionStorage.getItem("bar-amount"))) {
                     // Create an audio bar with its hight depending on the audio volume level
                     // Using audioArray[191 - i] here to inverse the right channel for aesthetics
                     var height = audioCanvas.height * Math.min(audioArray[191 - i], 1) * sessionStorage.getItem("bar-height");;
                     audioCanvasCtx.fillRect(barWidth * i, audioCanvas.height - height * sessionStorage.getItem("bar-distortion"), barWidth, height);
                }

                if (sessionStorage.getItem("audio-orientation") == "left") {
                     //temp canvas to store rotation data
                     var tempCanvas = document.createElement("canvas"),
                     tempCtx = tempCanvas.getContext("2d");

                     tempCanvas.width = audioCanvas.width;
                     tempCanvas.height = audioCanvas.height;
                     tempCtx.drawImage(audioCanvas, 0, 0, audioCanvas.width, audioCanvas.height);

                     // Now clear the portion to rotate.
                     audioCanvasCtx.clearRect(0, 0, audioCanvas.width, audioCanvas.height);

                     audioCanvasCtx.save();
                     // Translate (190/2 is half of the box we drew)
                     audioCanvasCtx.translate(audioCanvas.width / 2, 0);

                     // Rotate it
                     audioCanvasCtx.rotate(90 * Math.PI/180);

                     // Finally draw the image data from the temp canvas.
                     audioCanvasCtx.translate(audioCanvas.height / 45, -audioCanvas.width / 16);
                     audioCanvasCtx.width = audioCanvasCtx.width * 10;
                     audioCanvasCtx.drawImage(tempCanvas, 0, 0, audioCanvas.width, audioCanvas.height * 2, 0, 0, audioCanvas.width, audioCanvas.height * 2);
                     audioCanvasCtx.restore();
                }
           }


           // Register the audio listener provided by Wallpaper Engine.
           window.wallpaperRegisterAudioListener(wallpaperAudioListener);
      </script>
 </body>

The code is based on this which gives a bit more detail on how the code works. The bar-values are coming from another script that store settings changes.

Via Active questions tagged javascript - Stack Overflow https://ift.tt/Lsq4CA9

Comments

Popular posts from this blog

ValueError: X has 10 features, but LinearRegression is expecting 1 features as input

So, I am trying to predict the model but its throwing error like it has 10 features but it expacts only 1. So I am confused can anyone help me with it? more importantly its not working for me when my friend runs it. It works perfectly fine dose anyone know the reason about it? cv = KFold(n_splits = 10) all_loss = [] for i in range(9): # 1st for loop over polynomial orders poly_order = i X_train = make_polynomial(x, poly_order) loss_at_order = [] # initiate a set to collect loss for CV for train_index, test_index in cv.split(X_train): print('TRAIN:', train_index, 'TEST:', test_index) X_train_cv, X_test_cv = X_train[train_index], X_test[test_index] t_train_cv, t_test_cv = t[train_index], t[test_index] reg.fit(X_train_cv, t_train_cv) loss_at_order.append(np.mean((t_test_cv - reg.predict(X_test_cv))**2)) # collect loss at fold all_loss.append(np.mean(loss_at_order)) # collect loss at order plt.plot(np.log(al...

Sorting large arrays of big numeric stings

I was solving bigSorting() problem from hackerrank: Consider an array of numeric strings where each string is a positive number with anywhere from to digits. Sort the array's elements in non-decreasing, or ascending order of their integer values and return the sorted array. I know it works as follows: def bigSorting(unsorted): return sorted(unsorted, key=int) But I didnt guess this approach earlier. Initially I tried below: def bigSorting(unsorted): int_unsorted = [int(i) for i in unsorted] int_sorted = sorted(int_unsorted) return [str(i) for i in int_sorted] However, for some of the test cases, it was showing time limit exceeded. Why is it so? PS: I dont know exactly what those test cases were as hacker rank does not reveal all test cases. source https://stackoverflow.com/questions/73007397/sorting-large-arrays-of-big-numeric-stings

How to load Javascript with imported modules?

I am trying to import modules from tensorflowjs, and below is my code. test.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title </head> <body> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script> <script type="module" src="./test.js"></script> </body> </html> test.js import * as tf from "./node_modules/@tensorflow/tfjs"; import {loadGraphModel} from "./node_modules/@tensorflow/tfjs-converter"; const MODEL_URL = './model.json'; const model = await loadGraphModel(MODEL_URL); const cat = document.getElementById('cat'); model.execute(tf.browser.fromPixels(cat)); Besides, I run the server using python -m http.server in my command prompt(Windows 10), and this is the error prompt in the console log of my browser: Failed to loa...