Проекты
GameDev.ru / Проекты / Форум / Компактный синтезатор MIDI (3 стр)

Компактный синтезатор MIDI (3 стр)

Страницы: 1 2 3 4 512 Следующая »
gammakerПостоялецwww16 июня 201416:07#30
Tonal
> а что здесь плохого, ветвления во внешнем цикле дешевле в N раз, N - кол-во
> семплов на подбем или спад.
Да там ещё лишние "служебные" операции появиться могут. А для высоких частот N может оказаться равным 1 вообще.
TonalПостоялецwww16 июня 201416:17#31
gammaker
> А для высоких частот N может оказаться равным 1 вообще.
99,9% что такого не понадобится, пила обычно на частоте основного тона, а основной тон не бывает слишком высоким(до ~5 кГц), на высоких частотах могут быть гармоники обертоны, а их синусом считать.
То есть на частоте 44кГц минимальное N~9 и то редко, в основном в районе неколько десятков-сотен.
gammakerПостоялецwww16 июня 201417:09#32
Tonal
> 99,9% что такого не понадобится, пила обычно на частоте основного тона, а
> основной тон не бывает слишком высоким(до ~5 кГц), на высоких частотах могут
> быть гармоники обертоны, а их синусом считать.
У меня орган реализован через 5 пилообразных гармоник. Звучит очень хорошо, но и тормозит соответственно.

Tonal
> То есть на частоте 44кГц минимальное N~9 и то редко, в основном в районе
> неколько десятков-сотен.
Но у меня-то 11 кГц всего. 44 тормозят ужасно, музыка будет синтезироваться дольше, чем воспроизводиться.

TonalПостоялецwww16 июня 201419:03#33
gammaker
> 11 кГц
это не музыка, я отказываюсь такое слушать)
gammakerПостоялецwww16 июня 201419:19#34
Tonal
> это не музыка, я отказываюсь такое слушать)
А если я возьму и поменяю частоту дискретизации на 48 кГц так, что и разницы в звучании не заметишь, то это всё равно вдруг станет музыкой? Пока у меня всё равно нет высоких гармоник, увеличение частоты вряд ли что-то даст. Но если мне удастся ускорить ещё в 5 раз, то я повышу частоту дискретизации. Вообще простор для оптимизаций ещё большой, так что надеюсь, что это реально.

А ты не смотрел демки из нулевого поста?

TonalПостоялецwww16 июня 201421:12#35
gammaker
> А если я возьму и поменяю частоту дискретизации на 48 кГц так, что и разницы в
> звучании не заметишь, то это всё равно вдруг станет музыкой?
>Пока у меня всё равно нет высоких гармоник, увеличение частоты вряд ли что-то даст.
именно поэтому и не музыка это, а пиликалка на 11кГц.
Вся соль в гармониках.
TonalПостоялецwww16 июня 201421:13#36
gammaker
> А ты не смотрел демки из нулевого поста?
не нашел в нулевом посте кнопки Play
gammakerПостоялецwww16 июня 201421:25#37
Tonal
> не нашел в нулевом посте кнопки Play
Какой ещё кнопки Play?

Tonal
> Вся соль в гармониках.
Прям вся? Так это сколько же их должно быть? 3-4 штук что ли мало? Их же тоже надо знать, по какому принципу выбирать, а не просто так ляпать, кое как?

TonalПостоялецwww16 июня 201421:36#38
gammaker
> Какой ещё кнопки Play?
такой чтоб сразу послушать

gammaker
> Прям вся? Так это сколько же их должно быть? 3-4 штук что ли мало? Их же тоже
> надо знать, по какому принципу выбирать, а не просто так ляпать, кое как?
открой любой качественный! трек в спектроанализаторе и посмотри сколько там высоких частот, потом пропусти через ФНЧ с частотой среза 5,5кгц и сравни звучание.
Колокольчики, шипящие, тарелки и др. имеют множество ВЧ гармоник, без них нет звука.

gammakerПостоялецwww17 июня 201412:26#39
Tonal
> такой чтоб сразу послушать
А, ну там же полно разных мелодий в архиве, все не выложишь. Да и это уже не синтезатор получится.

Tonal
> открой любой качественный! трек в спектроанализаторе и посмотри сколько там
> высоких частот, потом пропусти через ФНЧ с частотой среза 5,5кгц и сравни
> звучание.
Я просто снизил частоту дискретизации в Audacity до 11025 и ускорил в 4 раза. Качество сильно ухудшилось, да, но на моём синтезаторе вряд ли это будет заметно, потому что инструменты сами по себе некачественные. Но я когда оптимизирую хорошенько код, всё же подниму частоту дискретизации, чтобы она не вносила искажений, когда я буду улучшать инструменты.

Tonal
> шипящие
Кстати да, заметил, что белый шум совсем по-другому звучит с низкой частотой дискретизации. Больше на выстрел или взрыв похоже становится, а не на шипение.

Правка: 17 июня 2014 12:29

gammakerПостоялецwww17 июня 201414:02#40
Вот накатал такую функцию пилообразной волны. Работает в 6 раз быстрее, но звучит плохо, особенно высокие частоты. Впрочем, как я и предполагал. Видимо, это из-за того, что я неправильно учитываю дробные семплы. Но я не могу придумать, как их правильно учесть?
void sawtooth(double upPercent, float volume, float freq, uint sampleRate, ArrayRange<float> outSamples)
{
  const uint fullPeriodsCount=(uint)(outSamples.Count()*freq/sampleRate);
  const double samplesPerPeriod=sampleRate/freq, samplesPerUp=samplesPerPeriod*upPercent, samplesPerDown=samplesPerPeriod-samplesPerUp;
  const uint intSamplesPerUp=(uint)samplesPerUp, intSamplesPerDown=(uint)samplesPerDown;
  const double fractSamplesPerUp=fract(samplesPerUp), fractSamplesPerDown=fract(samplesPerDown);

  double upFraction=0, downFraction=0;
  uint pos=0;
  double v=-volume, du=2*volume/samplesPerUp, dd=2*volume/samplesPerDown;
  for(uint k=0; k<fullPeriodsCount; k++)
  {
    for(uint s=0; s<intSamplesPerUp; s++) outSamples[pos++]=(float)v, v+=du;
    upFraction+=fractSamplesPerUp;
    if(upFraction>=1) {upFraction--; outSamples[pos++]=(float)v; v+=du;}

    for(uint s=0; s<intSamplesPerDown; s++) outSamples[pos++]=(float)v, v-=dd;
    downFraction+=fractSamplesPerDown;
    if(downFraction>=1) {downFraction--; outSamples[pos++]=(float)v; v-=dd;}
  }
}

Здесь upPercent - процент времени нарастания от длительности всего периода.

Правка: 17 июня 2014 14:35

JakeПостоялецwww17 июня 201415:51#41
При закрытии программы постоянно выскакивает ошибка на Win7:
Сигнатура проблемы:
  Имя события проблемы:  APPCRASH
  Имя приложения:  MusicSynthesizer_Streaming.exe
  Версия приложения:  0.0.0.0
  Отметка времени приложения:  539814a6
  Имя модуля с ошибкой:  ole32.dll
  Версия модуля с ошибкой:  6.1.7600.16624
  Отметка времени модуля с ошибкой:  4c297c56
  Код исключения:  c0000005
  Смещение исключения:  000483ee
  Версия ОС:  6.1.7600.2.0.0.256.1
  Код языка:  1059

Сигнатура проблемы:
  Имя события проблемы:  APPCRASH
  Имя приложения:  MusicSynthesizer.exe
  Версия приложения:  0.0.0.0
  Отметка времени приложения:  5395c22e
  Имя модуля с ошибкой:  ole32.dll
  Версия модуля с ошибкой:  6.1.7600.16624
  Отметка времени модуля с ошибкой:  4c297c56
  Код исключения:  c0000005
  Смещение исключения:  000483ee
  Версия ОС:  6.1.7600.2.0.0.256.1
  Код языка:  1059

P.S. И всё-таки я за трекерную музыку.

gammakerПостоялецwww17 июня 201416:07#42
Jake
> При закрытии программы постоянно выскакивает ошибка на Win7:
Да, я знаю. Но не могу её исправить. Я вообще не понимаю, что за магия происходит, когда закрываешь на крестик консольное окно. Падает в каком-то постороннем потоке kernel32.dll, других потоков на этот момент вообще уже нет. Каким образом это получается, непонятно. В дебаге не падает.

Jake
> P.S. И всё-таки я за трекерную музыку.
А что там? Те же ноты, но с готовыми семплами? В принципе, на основе моего синтезатора такое можно легко сделать.

Правка: 17 июня 2014 16:08

gammakerПостоялецwww17 июня 201416:56#43
Tonal
Сейчас повысил частоту аж до 48 кГц. Всё-таки ты прав, намного живее звучит даже мой синтезатор. Конечно вроде не все инструменты, но некоторые, например вибрафон. Только работать синтезатор стал в 4,5 раза медленнее. Надо побыстрее разобраться с тормозящей или глючащей пилой, а потом делать SIMD, чтобы ускорить синус в 4 раза.
TonalПостоялецwww17 июня 201418:50#44
gammaker
вижу у тебя в цикле преобразование дабла во флоат
Страницы: 1 2 3 4 512 Следующая »

/ Форум / Проекты / Оцените

2001—2018 © GameDev.ru — Разработка игр