Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Другие темы раздела
HTML, CSS Ширина с учетом margin https://www.cyberforum.ru/ html/ thread2751057.html
Добрый вечер, вопрос такого рода, как работает box-sizing понятно, но данная команда не включает в себя margin ни в каком виде. Существует ли какая то команда, которая рассчитывает ширину блока с...
HTML, CSS Border для видео
Имеется видео, нужно для него создать рамку, как на фото.
HTML, CSS Размеры блоков
Как выровнять блоки по средине до нормальных размеров. Сейчас они слишком сжаты <div class="data-cell" id = "data-cell"> <div class = "logo-cell"> <input value = "Play1" type="button"...
HTML, CSS Плавное изменение цвета в соответствии с RGB спектром в зависимости от времени перебывания В зависимости от времени пребывания на странице, реализовать плавное изменение цвета в соответствии с RGB спектром. В нулевой момент времени, цвет прямоугольника должен быть красным, через 30... https://www.cyberforum.ru/ html/ thread2750462.html
HTML, CSS Почему owl-carousel не выводит слайд по одиночке? https://www.cyberforum.ru/ html/ thread2750461.html
При ширине экрана до 999px owl-carousel выводит мне блоки в столбик, ая в настройках задал, чтобы отображалось по 3 item-а. В чем проблема? сайт http://norum1991.beget.tech/ код...
Codepen - как добиться чтобы просматривался длинный код? HTML, CSS
У меня создается главная страница сайта. Несколько секций с height:auto;. А как результат показывается только первая секция. Что нужно сделать что бы показывался весь код?
Codepen - Как добавить картинку в код html HTML, CSS
пишу в этом сервисе код с картинкой - и не отображается она как "результат." Есть ли какие-то особенности для добавления картинок в codepen?
HTML, CSS Как сделать так, чтобы гамбургер менял цвет при нахождении в разных секциях? Как сделать так, чтобы гамбургер менял цвет в зависимости от пролистывания секций? Сам гамбургер белого цвета, но лишь пару секций а сайте имеют яркий цвет и гамбургер белого цвета будет смотреться... https://www.cyberforum.ru/ html/ thread2750284.html
HTML, CSS Не работает clear https://www.cyberforum.ru/ html/ thread2750170.html
Добрый день! Такой вопрос, почему в данной ситуации не получается передвинуть текст с классом "test" вниз, что должна выполнить по сути команда clear. Никаких изменений не происходит при команде...
HTML, CSS Как сделать grid с разной шириной столбцов? Всем привет! Подскажите, как сделать такой grid. То что я криво нарисовал не обращайте внимания, главное расположение элементов. Лента длинная и это должно повторяться и дальше. Пока что я... https://www.cyberforum.ru/ html/ thread2750123.html
HTML, CSS Как сделать по данному примеру? https://www.cyberforum.ru/ html/ thread2750019.html
Хочу сделать по данному примеру , но не знаю как. Мне надо так во всех фото. Можете исправить код? Мой код: Css: .block2 { display: flex; flex-direction: column; background-color:white;...
HTML, CSS Почему появляется горизонтальный скролл? Не могу понять откуда у меня появляется горизонтальный скролл, что-то со второй секцией, но я не могу понять, что именно. сам сайт http://norum1991.beget.tech/ <!DOCTYPE html> <html lang="en">... https://www.cyberforum.ru/ html/ thread2749851.html
3 / 3 / 0
Регистрация: 29.06.2018
Сообщений: 1,137
24.12.2020, 19:46  [ТС] 0

Генератор звуковых частот.

24.12.2020, 19:46. Просмотров 1825. Ответов 14
Метки (Все метки)

Ответ


Из примера измерителя уровня
main.js
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
The MIT License (MIT)
 
Copyright (c) 2014 Chris Wilson
 
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
 
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
var audioContext = null;
var meter = null;
var canvasContext = null;
var WIDTH=500;
var HEIGHT=50;
var rafID = null;
 
window.onload = function() {
 
    // grab our canvas
    canvasContext = document.getElementById( "meter" ).getContext("2d");
    
    // monkeypatch Web Audio
    window.AudioContext = window.AudioContext || window.webkitAudioContext;
    
    // grab an audio context
    audioContext = new AudioContext();
 
    // Attempt to get audio input
    try {
        // monkeypatch getUserMedia
        navigator.getUserMedia = 
            navigator.getUserMedia ||
            navigator.webkitGetUserMedia ||
            navigator.mozGetUserMedia;
 
        // ask for an audio input
        navigator.getUserMedia(
        {
            "audio": {
                "mandatory": {
                    "googEchoCancellation": "false",
                    "googAutoGainControl": "false",
                    "googNoiseSuppression": "false",
                    "googHighpassFilter": "false"
                },
                "optional": []
            },
        }, gotStream, didntGetStream);
    } catch (e) {
        alert('getUserMedia threw exception :' + e);
    }
 
}
 
 
function didntGetStream() {
    alert('Stream generation failed.');
}
 
var mediaStreamSource = null;
 
function gotStream(stream) {
    // Create an AudioNode from the stream.
    mediaStreamSource = audioContext.createMediaStreamSource(stream);
 
    // Create a new volume meter and connect it.
    meter = createAudioMeter(audioContext);
    mediaStreamSource.connect(meter);
 
    // kick off the visual updating
    drawLoop();
}
 
function drawLoop( time ) {
    // clear the background
    canvasContext.clearRect(0,0,WIDTH,HEIGHT);
 
    // check if we're currently clipping
    if (meter.checkClipping())
        canvasContext.fillStyle = "red";
    else
        canvasContext.fillStyle = "green";
 
    // draw a bar based on the current volume
    canvasContext.fillRect(0, 0, meter.volume*WIDTH*1.4, HEIGHT);
 
    // set up the next visual callback
    rafID = window.requestAnimationFrame( drawLoop );
}
Добавлено через 42 секунды
volume-meter.js

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
The MIT License (MIT)
 
Copyright (c) 2014 Chris Wilson
 
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
 
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
 
/*
 
Usage:
audioNode = createAudioMeter(audioContext,clipLevel,averaging,clipLag);
 
audioContext: the AudioContext you're using.
clipLevel: the level (0 to 1) that you would consider "clipping".
   Defaults to 0.98.
averaging: how "smoothed" you would like the meter to be over time.
   Should be between 0 and less than 1.  Defaults to 0.95.
clipLag: how long you would like the "clipping" indicator to show
   after clipping has occured, in milliseconds.  Defaults to 750ms.
 
Access the clipping through node.checkClipping(); use node.shutdown to get rid of it.
*/
 
function createAudioMeter(audioContext,clipLevel,averaging,clipLag) {
    var processor = audioContext.createScriptProcessor(512);
    processor.onaudioprocess = volumeAudioProcess;
    processor.clipping = false;
    processor.lastClip = 0;
    processor.volume = 0;
    processor.clipLevel = clipLevel || 0.98;
    processor.averaging = averaging || 0.95;
    processor.clipLag = clipLag || 750;
 
    // this will have no effect, since we don't copy the input to the output,
    // but works around a current Chrome bug.
    processor.connect(audioContext.destination);
 
    processor.checkClipping =
        function(){
            if (!this.clipping)
                return false;
            if ((this.lastClip + this.clipLag) < window.performance.now())
                this.clipping = false;
            return this.clipping;
        };
 
    processor.shutdown =
        function(){
            this.disconnect();
            this.onaudioprocess = null;
        };
 
    return processor;
}
 
function volumeAudioProcess( event ) {
    var buf = event.inputBuffer.getChannelData(0);
    var bufLength = buf.length;
    var sum = 0;
    var x;
 
    // Do a root-mean-square on the samples: sum up the squares...
    for (var i=0; i<bufLength; i++) {
        x = buf[i];
        if (Math.abs(x)>=this.clipLevel) {
            this.clipping = true;
            this.lastClip = window.performance.now();
        }
        sum += x * x;
    }
 
    // ... then take the square root of the sum.
    var rms =  Math.sqrt(sum / bufLength);
 
    // Now smooth this out with the averaging factor applied
    // to the previous sample - take the max here because we
    // want "fast attack, slow release."
    this.volume = Math.max(rms, this.volume*this.averaging);
}
Добавлено через 56 секунд
index.html

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!doctype html>
<html>
    <head>
        <title>Volume Meter Sample</title>
        <style>
        </style>
        <!-- Include the volume meter component -->
        <script src="volume-meter.js"></script>
        <!-- Include the main app logic -->
        <script src="main.js"></script>
    </head>
    <body>
        <p>This sample shows how to implement a clip-indicating volume meter in Web Audio, using a ScriptProcessor.  It's necessary to use a ScriptProcessor in order to not miss any clipping samples - otherwise you could implement this using a RealtimeAnalyser to only grab samples when necessary.</p>
        <canvas id="meter" width="500" height="50"></canvas>
 
        <p>Check out the <a href="http://github.com/cwilso/volume-meter/">source on Github</a>.</p>
        <p>The usage is quite easy:
        <pre>var meter = createAudioMeter(audioContext,clipLevel,averaging,clipLag);
 
audioContext: the AudioContext you're using.
clipLevel: the level (0 to 1) that you would consider "clipping".  Defaults to 0.98.
averaging: how "smoothed" you would like the meter to be over time.  Should be between 0 and less than 1.  Defaults to 0.95.
clipLag: how long you would like the "clipping" indicator to show after clipping has occured, in milliseconds.  Defaults to 750ms.
 
meter.checkClipping();
 
returns true if the node has clipped in the last clipLag milliseconds.
 
meter.shutdown();
 
used to destroy the node (it's important to disconnect and remove the event handler for any ScriptProcessor).
</pre>
    </body>
</html>


Вернуться к обсуждению:
Генератор звуковых частот.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2020, 19:46
Готовые ответы и решения:

3D-аудиовизуализация. (Преобразование звуковых частот в графику)
Как реализовать дискретное преобразование вейвлет для аудиофайла? Какие вейвлет функции...

Меняю значение высоких и низких звуковых частот
Здравствуйте! Работаю над одним генератором звуковых частот, вернее над генератором шума. Нашёл...

Генератор звуковых волн
Есть статья, описывающая, как сделать генератор синуса, прямоугольного импульса, пилы и шума:...

Генератор звуковых сигналов
Всем доброго времени суток. Дали мне задание: сделать на ардуино генератор звуковых сигналов. Что...

14
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.