Pitch Shift с помощью веб-аудио-API? - PullRequest
0 голосов
/ 26 октября 2019

Pitch Shifter с использованием Node js

Привет, я новичок в веб-разработке!

soo Я пытаюсь создать онлайн аудиоплеер, для которого мне нужен переключатель высоты звука.

Я пытаюсь изучить API веб-аудио, который для меня непросто понять ...

Может ли кто-нибудь помочь в создании "Pitch Shifter" с использованием узла js ... Или предложитьресурсы для изучения веб-аудио API ...

почему этот код не работает в узле js?

var audioCtx = new (window.AudioContext || window.webkitAudioContext)();

1 Ответ

0 голосов
/ 27 октября 2019

К сожалению, API-интерфейс Web Audio недоступен на Node.js. Node.js - это просто среда выполнения JavaScript, а API Web Audio не является частью самого JavaScript. Это API, который добавляется браузером. В Node.js. даже нет window.

Чтобы еще больше запутать, есть некоторые браузерные API, которые также доступны в Node.js. Примером этого является глобально доступный URL. В эти годы JSConf.eu Джойи Чунг выступил с докладом , в котором объясняется стратегия привлечения большего количества браузерных API к Node.js . Однако Web Audio API не в списке.

1008 * Это спорно кастрированный баран имеет смысл иметь API Web Audio доступны в Node.js или нет, но это, конечно, возможно. По крайней мере, в определенной степени, как показано в проектах web-audio-api и web-audio-engine .

Если вы хотите реализовать PitchShifter вв браузере вы можете использовать PitchShift Effect , который поставляется с Tone.js . Вот минимальный пример:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <button id="start-stop">start</button>
        <button id="up">up</button>
        <button id="down">down</button>
        <script src="https://unpkg.com/tone@13.8.25/build/Tone.js"></script>
        <script>
            const $startStopButton = document.getElementById('start-stop');
            const $upButton = document.getElementById('up');
            const $downButton = document.getElementById('down');

            const oscillator = new Tone.Oscillator();
            const pitchShift = new Tone.PitchShift();

            oscillator.connect(pitchShift);
            pitchShift.toMaster();

            $startStopButton.onclick = () => {
                if ($startStopButton.textContent === 'start') {
                    $startStopButton.textContent = 'stop';
                    oscillator.start();
                } else {
                    $startStopButton.textContent = 'start';
                    oscillator.stop();
                }
            };

            $upButton.onclick = () => pitchShift.pitch += 1;
            $downButton.onclick = () => pitchShift.pitch -= 1;
        </script>
    </body>
</html>
...