Я пытаюсь создать и воспроизвести звук в эмуляторе, используя API AudioStream от Raylib и его функцию обратного вызова. Мой эмулятор создает квадрат, треугольник, пилу и шум. Все формы сигналов звучат корректно, за исключением шума, который звучит как жужжание, жуткая статика, стрекотание и сбитый вместе счетчик Гейгера — ничего похожего на старый добрый шум, который использовался для перкуссии, пламени, взрывов и всего, что между ними. Это соответствующие методы из класса блока обработки звука моего эмулятора:
private float GenerateSample(int channel)
{
var baseAddr = Memory.AudioRamStart + (channel * 4);
var freq = _mobo.ReadWord(baseAddr);
var control = _mobo.ReadByte(baseAddr + 3);
if (freq == 0)
return 0f;
var volume = ProcessEnvelope(channel, control);
if (volume = 6)
{
_noisePeriod[channel] = Math.Max(1, (int)(44100f / Math.Max(1, (int)freq)));
}
var delta = freq / 44100f;
_phases[channel] += delta;
if (_phases[channel] >= 1f)
{
_phases[channel] -= 1f;
}
var wave = channel switch
{
0 or 1 => Square(_phases[channel], delta),
2 or 3 => Triangle(_phases[channel]),
4 or 5 => Sawtooth(_phases[channel], delta),
_ => Noise(channel),
};
return wave * volume;
}
private float Noise(int channel)
{
if (--_noiseTimer[channel] > 1)) & 1);
_noiseLfsr[channel] = (ushort)((_noiseLfsr[channel] >> 1) | (bit
Подробнее здесь: https://stackoverflow.com/questions/798 ... nel-output
Как я могу избежать Raylib (привязки С#) AudioStream, искажающего выходной сигнал канала шума при воспроизведении ⇐ C#
Место общения программистов C#
1767558898
Anonymous
Я пытаюсь создать и воспроизвести звук в эмуляторе, используя API AudioStream от Raylib и его функцию обратного вызова. Мой эмулятор создает квадрат, треугольник, пилу и шум. Все формы сигналов звучат корректно, за исключением шума, который звучит как жужжание, жуткая статика, стрекотание и сбитый вместе счетчик Гейгера — ничего похожего на старый добрый шум, который использовался для перкуссии, пламени, взрывов и всего, что между ними. Это соответствующие методы из класса блока обработки звука моего эмулятора:
private float GenerateSample(int channel)
{
var baseAddr = Memory.AudioRamStart + (channel * 4);
var freq = _mobo.ReadWord(baseAddr);
var control = _mobo.ReadByte(baseAddr + 3);
if (freq == 0)
return 0f;
var volume = ProcessEnvelope(channel, control);
if (volume = 6)
{
_noisePeriod[channel] = Math.Max(1, (int)(44100f / Math.Max(1, (int)freq)));
}
var delta = freq / 44100f;
_phases[channel] += delta;
if (_phases[channel] >= 1f)
{
_phases[channel] -= 1f;
}
var wave = channel switch
{
0 or 1 => Square(_phases[channel], delta),
2 or 3 => Triangle(_phases[channel]),
4 or 5 => Sawtooth(_phases[channel], delta),
_ => Noise(channel),
};
return wave * volume;
}
private float Noise(int channel)
{
if (--_noiseTimer[channel] > 1)) & 1);
_noiseLfsr[channel] = (ushort)((_noiseLfsr[channel] >> 1) | (bit
Подробнее здесь: [url]https://stackoverflow.com/questions/79860223/how-can-i-avoid-raylib-c-bindings-audiostream-distorting-noise-channel-output[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия