Форум программистов, компьютерный форум, киберфорум
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
0

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

14.12.2020, 01:32. Просмотров 1825. Ответов 14
Метки (Все метки)


Генератор ЗЧ на основе HTML, JS( на основе https://onlinetonegenerator.com/dtmf.html ):
file.html
PHP/HTML
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
<!DOCTYPE html>
 
<html>
 
<div id="SoundGen">
 
 <script src="generator.js"></script>
                                 
 <p class="tagline"><strong>The Sound  generator </strong></p>
 
<form id="generatorForm"   >
 <div class="input-group">
<p>Input frequency</p>
<input type="text" class="beginGen" id="freq" name="freq" value="432" autocomplete="off">
<label for="freq">Hz</label>
<p id="units">Input frequency</p>
</div>
 
<div class="generatorbuttons">
    <button  type="button"  id="Start" class="beginGen"   onclick="doStart()" >Start</button>
    <button  type="button"  id="Stop"  class="beginGen"   onclick="stop()"     >Stop</button>
</div>
</form>
 
 
<script type="text/javascript">
document.getElementById("freq").value =1000;
</script>
</html>
generator.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
      var contextClass = (window.AudioContext ||
        window.webkitAudioContext ||
        window.mozAudioContext ||
        window.oAudioContext ||
        window.msAudioContext);
 
      if (contextClass) {
        // Web Audio API is available.
        var context = new contextClass();
      }
 
      var oscillator1 ;
      var  Tone = function(freq1 )
     {
        // merger = context.createChannelMerger(2);
        oscillator1 = context.createOscillator();
        oscillator1.type = 0;
        oscillator1.frequency.value = freq1;
        gainNode = context.createGain ? context.createGain() : context.createGainNode();
        oscillator1.connect(gainNode,0,0);
        gainNode.connect(context.destination);
        gainNode.gain.value = .1;
        oscillator1.start ? oscillator1.start(0) : oscillator1.noteOn(0)
        // merger.connect(context.destination);
      };
 
      function start() {
        if (typeof oscillator1 != 'undefined') oscillator1.disconnect();
        oscOn(parseFloat(document.getElementById("freq").value) );
      }
 
 
function doStart()
{
Tone( freq.value);
document.getElementById('units').innerHTML =document.getElementById("freq").value+' Hz';
}
 
      function stop() {
        oscillator1.disconnect();
      }
Добавлено через 3 минуты
Вариант с DTMF (пример двухчастотного , более оффлайновая редакция на основе https://onlinetonegenerator.com/dtmf.html ):
file.html
PHP/HTML
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
<!DOCTYPE html>
 
<html>
 
<div id="tuningNotes">
 
      <script src="DTMFgenerator.js"></script>
 
 
<table class="dialpad">
    <tbody><tr>
        <td></td>
        <td>1209Hz</td>
        <td>1336Hz</td>
        <td>1477Hz</td>
        <td>1633Hz</td>
    </tr>
    <tr>
        <td>697Hz</td>
        <td><button id="one" class="beginDial" onmousedown="dialTone(697.0, 1209.0)" onmouseup="stop()" data-freq="697.0, 1209.0">1</button></td>
        <td><button id="two" class="beginDial" onmousedown="dialTone(697.0, 1336.0)" onmouseup="stop()" data-freq="697.0, 1336.0">2</button></td>
        <td><button id="three" class="beginDial" onmousedown="dialTone(697.0, 1477.0)" onmouseup="stop()" data-freq="697.0, 1477.0">3</button></td>
        <td><button id="dtmf-a" class="beginDial" onmousedown="dialTone(697.0, 1633.0)" onmouseup="stop()" data-freq="697.0, 1633.0">A</button></td>
    </tr>
    <tr>
        <td>770Hz</td>
        <td><button id="four" class="beginDial" onmousedown="dialTone(770.0, 1209.0)" onmouseup="stop()" data-freq="770.0, 1209.0">4</button></td>
        <td><button id="five" class="beginDial" onmousedown="dialTone(770.0, 1336.0)" onmouseup="stop()" data-freq="770.0, 1336.0">5</button></td>
        <td><button id="six" class="beginDial" onmousedown="dialTone(770.0, 1477.0)" onmouseup="stop()" data-freq="770.0, 1477.0">6</button></td>
        <td><button id="dtmf-b" class="beginDial" onmousedown="dialTone(770.0, 1633.0)" onmouseup="stop()" data-freq="770.0, 1633.0">B</button></td>
    </tr>
    <tr>
        <td>852Hz</td>
        <td><button id="seven" class="beginDial" onmousedown="dialTone(852.0, 1209.0)" onmouseup="stop()" data-freq="852.0, 1209.0">7</button></td>
        <td><button id="eight" class="beginDial" onmousedown="dialTone(852.0, 1336.0)" onmouseup="stop()" data-freq="852.0, 1336.0">8</button></td>
        <td><button id="nine" class="beginDial" onmousedown="dialTone(852.0, 1477.0)" onmouseup="stop()" data-freq="852.0, 1477.0">9</button></td>
        <td><button id="dtmf-c" class="beginDial" onmousedown="dialTone(852.0, 1633.0)" onmouseup="stop()" data-freq="852.0, 1633.0">C</button></td>
 
    </tr>
    <tr>
        <td>941Hz</td>
        <td><button class="beginDial" onmousedown="dialTone(941.0, 1209.0)" onmouseup="stop()" data-freq="941.0, 1209.0">*</button></td>
        <td><button id="zero" class="beginDial" onmousedown="dialTone(941.0, 1336.0)" onmouseup="stop()" data-freq="941.0, 1336.0">0</button></td>
        <td><button class="beginDial" onmousedown="dialTone(941.0, 1477.0)" onmouseup="stop()" data-freq="941.0, 1477.0">#</button></td>
        <td><button id="dtmf-d" class="beginDial" onmousedown="dialTone(941.0, 1633.0)" onmouseup="stop()" data-freq="941.0, 1633.0">D</button></td>
 
    </tr>
</tbody></table>
 
<script type="text/javascript">
 
$('.dialpad button').on("touchstart", function(e){
    e.preventDefault();
    freqs = $(this).data("freq").split(",");
    dialTone(parseInt(freqs[0]), parseInt(freqs[1]));
});
 
 
$('body').on("touchend", function(e){
    e.preventDefault();
    stop();
});
 
$('body').on("mouseup", function(e){
    // e.preventDefault();
    stop();
});
 
</script>
 
 
 
</html>

DTMFgenerator.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
      var contextClass = (window.AudioContext ||
        window.webkitAudioContext ||
        window.mozAudioContext ||
        window.oAudioContext ||
        window.msAudioContext);
 
      if (contextClass) {
        // Web Audio API is available.
        var context = new contextClass();
      }
 
      var oscillator1, oscillator2;
 
      var dialTone = function(freq1, freq2){
 
        // merger = context.createChannelMerger(2);
 
        oscillator1 = context.createOscillator();
        oscillator1.type = 0;
        oscillator1.frequency.value = freq1;
        gainNode = context.createGain ? context.createGain() : context.createGainNode();
        oscillator1.connect(gainNode,0,0);
        gainNode.connect(context.destination);
        gainNode.gain.value = .1;
        oscillator1.start ? oscillator1.start(0) : oscillator1.noteOn(0)
 
        // gainNode.connect(merger,0,1);
 
        oscillator2 = context.createOscillator();
        oscillator2.type = 0;
        oscillator2.frequency.value = freq2;
        gainNode = context.createGain ? context.createGain() : context.createGainNode();
        oscillator2.connect(gainNode);
        gainNode.connect(context.destination);
        // gainNode.connect(merger,0,0);
 
 
        gainNode.gain.value = .1;
        oscillator2.start ? oscillator2.start(0) : oscillator2.noteOn(0)
 
        // merger.connect(context.destination);
 
 
      };
 
      function start() {
        if (typeof oscillator1 != 'undefined') oscillator1.disconnect();
        if (typeof oscillator2 != 'undefined') oscillator2.disconnect();
        oscOn(parseFloat(document.getElementById("freq").value),parseFloat(document.getElementById("freq2").value));
      }
 
 
      function stop() {
        oscillator1.disconnect();
        oscillator2.disconnect();
      }
Добавлено через 7 минут
В Chrome,Windows 10 работало оффлайново.

Добавлено через 1 час 18 минут
Как на основе этого скрипта и https://ourcodeworld.com/artic... javascript сделать программу измерения АЧХ и свип-генератор?

Добавлено через 1 час 53 минуты
некоторые скрипты для свип-генератора (немного глючит перестройка и ограничение, не имплементовано переключение формы(может не использоваться, для Chrome ,Edge))
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
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
104
105
106
107
108
109
<!DOCTYPE html>
 
<html><head>
 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
    
 <meta name="viewport" content="initial-scale=1">
 
<div id="mainContent" style="height: auto !important;">
<p class="tagline"><strong> frequency sweep generator.</strong></p>
 
         
<div class="generator-ad-wrapper">
<div class="frequency-sweeper">
 
        <div class="frequency-options-wrapper">
        <div class="input-group">
            <p>Start frequency<br>(in Hz)<br>
            <input type="text" class="input--frequency-start" id="freq-start" name="freq-start" value="100">
            </p>
        </div>
 
        <div class="input-group">
            <p>End frequency<br>(in Hz)<br>
            <input type="text" class="input--frequency-end" id="freq-end" name="freq-end" value="1000">
            </p>
        </div>
 
        <div class="input-group">
            <p>Duration<br>(in seconds)<br>
            <input type="text" class="input--duration" id="duration" name="duration" value="10">
            </p>
        </div>
        </div>
 
        <div class="advanced-options">
            <div class="waveform-wrapper">
                <input type="radio" name="waveform" value="sine" id="sine" checked="">
                <label for="sine">Sine</label>
                <div class="waveform-image waveform-image--sine"></div>
            </div>
            <div class="waveform-wrapper">
                <input type="radio" name="waveform" value="square" id="square">
                <label for="square">Square</label>
                <div class="waveform-image waveform-image--square"></div>
            </div>
            <div class="waveform-wrapper">
                <input type="radio" name="waveform" value="sawtooth" id="sawtooth">
                <label for="sawtooth">Sawtooth</label>
                <div class="waveform-image waveform-image--sawtooth"></div>
            </div>
            <div class="waveform-wrapper">
                <input type="radio" name="waveform" value="triangle" id="triangle">
                <label for="triangle">Triangle</label>
                <div class="waveform-image waveform-image--triangle"></div>
            </div>
        </div>
 
        <div class="clear"></div>
 
    <p>
    <label for="ramp-type-linear">
        Linear sweep
        <input id="ramp-type-linear" type="radio" checked="" name="ramp" value="linear">
    </label>
    <label for="ramp-type-exponential">
        Exponential sweep
        <input id="ramp-type-exponential" type="radio" name="ramp" value="exp">
    </label>
    <br>
    <label for="maintain-tone">Continue playing tone after sweep has finished? <input id="maintain-tone" type="checkbox" checked="" value="1"></label>
    </p>
    <p>
        <label for="start-volume">
            Start Volume:
            <input id="start-volume" type="text" value="40">
        </label><br>
        <label for="end-volume">
            End Volume:
            <input id="end-volume" type="text" value="40">
        </label>
    </p>
 
    <p>
        Current Frequency: <span id="current-frequency">128</span>Hz<br>
        Current Time: <span id="current-time">1.3</span>s<br>
        Current Volume: <span id="current-volume">40.0</span>%<br>
    </p>
 
 
    <div class="generator-buttons">
        <button type="button" class="beginTuning generatorButton"onclick="start1()">Play</button>
        <button type="button" class="stopTuning generatorButton" onclick="stop()">Stop</button>
                 </div>
 
        </div>  
 
 
</div>
 
<script src="frequency-sweeper.js"></script>
 
 
 
 
 
 
     </html>
frequency-sweeper.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
var contextClass = (window.AudioContext ||
  window.webkitAudioContext ||
  window.mozAudioContext ||
  window.oAudioContext ||
  window.msAudioContext);
 
var messageDisplayed = false;
 
if (contextClass) {
  // Web Audio API is available.
  var context = new contextClass();
    var gainValue = 0.1;
    var gainNode;
    var oscillator;
} else {
    $(".beginTuning").click(function(e){
        e.stopImmediatePropagation();
        ga('send', 'event', 'Error caught', "No context available");
        
    });
}
 
var oscs = {sine:0, square:1, sawtooth:2, triangle:3 };
 
 
function createSource(buffer) {
  var source = context.createBufferSource();
  var gainNode = context.createGainNode();
  source.buffer = buffer;
  // Connect source to gain.
  source.connect(gainNode);
  // Connect gain to destination.
  gainNode.connect(context.destination);
 
  return {
    source: source,
    gainNode: gainNode
  };
}
 
 
var freq1,freq2,duration;
 
//var animationID;
 var currTime;
 
 
 
 
function sweeplinear(freq1, freq2, duration){
 
    //clearInterval(animationID);
      currTime = context.currentTime;
                // var currTime;
 
    oscillator = context.createOscillator();
    gainNode = context.createGain ? context.createGain() : context.createGainNode();
 
    // oscillator.type = 0;
    oscillator.frequency.value = freq1;
    oscillator.connect(gainNode);
    gainNode.connect(context.destination);
    //gainNode.gain.value = 0.15;
                  oscillator.type = "sine"; //sine , square , sawtooth , triangle  
    oscillator.start ? oscillator.start(0) : oscillator.noteOn(0);
    vol1 =0.25; 
    vol2 =0.25; 
    vol1 = Math.min(vol1, 0.5);
    vol2 = Math.min(vol2, 0.5);
    gainNode.gain.value = vol1;
     
        oscillator.frequency.linearRampToValueAtTime(freq1, currTime);
        gainNode.gain.linearRampToValueAtTime(vol1, currTime);
        oscillator.frequency.linearRampToValueAtTime(freq2, currTime + duration*1);
        gainNode.gain.linearRampToValueAtTime(vol2, currTime + duration*1);
 
         oscillator.stop ? oscillator.stop(currTime + duration*1) : oscillator.noteOff(currTime + duration*1);
    // newTime =  context.currentTime;  
    // oscillator.start(0);
};
 
 
function sweepexp(freq1, freq2, duration){
 
    //clearInterval(animationID);
                  //var currTime;
 
     currTime = context.currentTime;
    oscillator = context.createOscillator();
    gainNode = context.createGain ? context.createGain() : context.createGainNode();
 
    // oscillator.type = 0;
    oscillator.frequency.value = freq1;
    oscillator.connect(gainNode);
    gainNode.connect(context.destination);
    //gainNode.gain.value = 0.15;
                  oscillator.type = "sine"; //sine , square , sawtooth , triangle  
    oscillator.start ? oscillator.start(0) : oscillator.noteOn(0);
    vol1 =0.25; 
    vol2 =0.25; 
    vol1 = Math.min(vol1, 0.5);
    vol2 = Math.min(vol2, 0.5);
    gainNode.gain.value = vol1;
     
     
        oscillator.frequency.exponentialRampToValueAtTime(freq1, currTime);
        gainNode.gain.exponentialRampToValueAtTime(vol1, currTime);
        oscillator.frequency.exponentialRampToValueAtTime(freq2, currTime + duration*1);
        gainNode.gain.exponentialRampToValueAtTime(vol2, currTime + duration*1);
     
     
         oscillator.stop ? oscillator.stop(currTime + duration*1) : oscillator.noteOff(currTime + duration*1);  
    //  newTime =  context.currentTime;
    // oscillator.start(0);
};
 
 
 
 
 
 
 
 
function start1()
{
freq1 =200; //исправить 
freq2 =500;
duration =10;//исправить
sweeplinear(freq1, freq2, duration);
//sweepexp(freq1, freq2, duration);
 
}
function stop() {
    oscillator.disconnect();
     $(".frequency-sweeper .beginTuning").removeClass("active");
    //clearInterval(animationID);
 
}

https://developer.mozilla.org/... Node/start

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

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

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

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

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

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