2015-04-13 3 views
0

Я пытаюсь сделать какой-то синтезатор javascript в браузере, и я наткнулся на riffwave.js. Из этого вопроса here ответ дает подсказку о том, как можно использовать riffwave.js.Что это (128 + 127 *) часть этих формул для riffwave.js?

Я немного поработал над этим, чтобы понять некоторые вещи, такие как несколько тонов, и я понимаю почти все это, но я не знаю, почему там 128 + 127 *.

На этой демонстрационной странице также отображается here.

Может ли кто-нибудь предложить объяснение или рассказать мне, как я могу использовать эту часть для изменения программы?

Спасибо.

ответ

2

В примерах, которые вы Реферировано показывают уравнение в виде:

A=128 + 127 * Sin(...) 

Поскольку функция Sin может изменяться от -1 до +1, то результат приведенного выше уравнения является 1-255. Таким образом, добавив константу 128 и умножив ее на коэффициент 127, это в основном функция sin, выход которой варьируется от 1 до 255, что удобно, поскольку оно может быть сохранено с использованием 8 бит (или 1 байт).

+1

И эта конкретная часть формулы должна * не корректироваться! Код ожидает значения в этом диапазоне - только без знака. Чтобы изменить примечание, измените формулу после нее (убедитесь, что результат равен -1.1). – usr2564301

+0

@Jongware спасибо за ввод. Я обнаружил, что часть после менялась между -1.1, когда я начал пытаться получить несколько тонов одновременно, и мое решение заключалось в том, чтобы добавить тоны и разделить на используемое число. – r12

1

Как и mti2935, это удобный способ сопоставления числа, которое может варьироваться от -1 до 1 до целого числа от 1 до 255, которое прекрасно вписывается в байты. В частности, кажется, что riffwave внутренне представляет звук в 8-битном формате .wav, поэтому он преобразует числа с плавающей запятой в 8-разрядный целочисленный формат, необходимый для воспроизведения звука.

+0

Спасибо за понимание. Знаете ли вы о других методах, которые делают что-то подобное, используя более 8 бит? Качество звука не совсем такое, как мне хотелось бы, и, может быть, более 8-битный звук улучшит его? Если нет, все в порядке; эта проблема больше на заднем плане. – r12

+1

Глядя на riffwave, вам придется либо модифицировать riffwave, использовать другую библиотеку, либо написать свой собственный. Фактическим звуковым механизмом, похоже, является тег HTML5 Audio ([wiki] (https://en.wikipedia.org/wiki/HTML5_Audio) [w3schools] (http://www.w3schools.com/html/html5_audio. asp)), который поддерживает другие форматы файлов, которые вы могли бы использовать. Я не очень разбираюсь в формате WAV-файла, поэтому вы можете использовать WAV с незначительными изменениями в riffwave, например, с изменением заголовка файла, позволяющим использовать 16-битный или более высокий звук или что-то в этом роде. Также может быть полезно ускорить выборку. – charliegreen

+1

Кажется, что вы хотите попробовать некоторые изменения в блоке формата; формат RIFFWAVE описан здесь (https://en.wikipedia.org/wiki/WAV#RIFF_WAVE). В частности, я попытаюсь изменить 128 + 127 * sinx на 32768 + 32767 * sinx и сделать 'wave.header.bitsPerSample = 16;' перед тем, как вы вызовете 'wave.Make (data)'. – charliegreen