На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование звука"
0) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с записью, обработкой, воспроизведением звука. Перед созданием темы подумайте, не будет ли она уместнее в разделах Разработка и тестирование программ, Наши исходники, а особенно Разовые заказы и подработки
1) На Раздел распространяются все Правила форума.Огромная просьба с ними внимательно ознакомиться.
2) Запрещается давать бессмысленные ответы вроде: "Снеси Мастдай", "ХП рулит", "Поставь Линукс" и т.д.
3) Запрещается создавать темы, в которых Вы намереваетесь получить ссылку на кряки, серийники и т.п. Также запрещено любое обсуждение p2p (peer-to-peer) сетей (BitTorrent, eDonkey и т.д.).
4) Реклама всякого рода пресекается беспощадно.
5) Используйте тэг [CODE] для выделения кода программы (непременно с указанием языка программирования - выбрать из списка. В противном случае бессмысленно!). Уважайте тех, кто будет читать ваш код!
6) Если решение вашей проблемы найдено, то не забываем помечать тему специальной функцией "Вопрос решён". Вам всего лишь требуется при написании последнего ответа поставить одну единственную галочку прямо над формой ответа.
7) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе

8) Если не прикрепляются/не скачиваются файлы, читаем Не прикрепляется / не скачивается файл. Любые обсуждения в данном разделе проблем с приложением файлов считаются оффтопиком! Со всеми вытекающими.

9) NEW! Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно. Попытки накрутки количества тематических сообщений за счёт поднятия древних неактуальных тем ("некрофилия") будут наказываться по велению левой пятки модераторского состава (см. пп.12, 13 Правил)



Нарушение Правил может повлечь наказание со стороны модераторов.



user posted imageFAQ Раздела user posted imageПоиск в Разделе user posted imageMSDN Library Online | Ваше мнение о модераторах: user posted imageBarazuk user posted imageRikkie
  
> 32k EXE Music , исполняемый файл не более 32 Кб, который бы сыграл какую-то музыку
    В данное время в Питере проходит компьютерный фестиваль CHAOS CONSTRUCTIONS 2017.
    Среди прочих, на нём есть номинация "32k EXE Music", то есть нужно предоставить исполняемый файл не более 32 Кб, который бы сыграл какую-то музыку. Миди, мягко говоря, не приветствуется.
    Я решил поучаствовать в этой номинации. Показ работы уже прошёл, теперь я могу сам её выложить.
    Вот моя демка на ЦЦ: https://yadi.sk/d/3iuA9uIh3MLzsa
    И MP3 вариант: https://yadi.sk/d/SxwDQaaB3MLzsV
      Если интересно, то есть очень крутая библиотека – uFMOD, которая воспроизводит XM-модули. Модули могут быть как в отдельном файле, так и в ресурсах или просто в виде данных. Причём, библиотеку можно перекомпилировать так, что в ней будут находиться только те функции (код поддержки эффектов и пр), которые используются в нужном XM-файле. Воспроизведение идёт через WinMM, DirectSound или OpenAL. Модули написаны для множества языков (C, С#, BCB, Delphi, разные Asm, разные Basic, BlitzMax). Есть документация на русском. В общем, там есть examples весом меньше 10 кб вместе с XM-модулем. Короче, вещь мощная! :)
        Достаточно интересно. Только я делаю основной упор на синтез натуральных звуков, физ. моделирование. Хотя можно попробовать синтезировать звуки и подсовывать их в XM.
          Mikle, было бы интересно глянуть на то, каким образом происходит синтез (теорию и конкретные формулы, цифры, обертоны, etc...).
          По сути, это альтернатива Midi или AdLib получается, только программная :)
            Цитата Jin X @
            было бы интересно глянуть на то, каким образом происходит синтез (теорию и конкретные формулы, цифры, обертоны, etc...).

            Тут есть исходник струны: http://www.gamedev.ru/projects/forum/?id=180947&page=67#m991
            Это по сути имитация колебаний цепочки грузиков, связанных пружинками. Если вместо цепочки представить 2D сетку - получим модель, с помощью которой получается звук колокола или, к примеру, барабанных тарелок.
            Цитата Jin X @
            По сути, это альтернатива Midi или AdLib получается, только программная

            Альтернатива AdLib, но не Midi. Midi - это формат записи партитуры, но не способ извлечения звуков.
              Функцию вижу, но там просто формулы без описаний. Код-то не проблема написать, главное - теорию иметь.
                Цитата Jin X @
                главное - теорию иметь.

                Основной смысл:
                Заводим массивы:
                ExpandedWrap disabled
                  Dim FdM()  As Single  'сила натяжения, делённая на массу
                  Dim P()    As Single  'позиция
                  Dim S()    As Single  'скорость

                В ремарках указан физический смысл величин. Размер массивов stLen - это фактически длина струны.
                Процедура StStart выводит струну из равновесия, это можно сделать как угодно, что будет аналогично тому, что из реальной струны можно извлечь звук в разных местах, щипком, медиатором, ударом и т. д.
                Главное - эмуляция дальнейших колебаний струны:
                ExpandedWrap disabled
                    'расчёт скоростей
                    For i = 1 To stLen - 1
                      d = (P(i - 1) + P(i + 1)) * 0.5 - P(i)
                      S(i) = S(i) + d * FdM(i)
                    Next i

                Мы вычисляем силу, действующую на звено цепи, считая её пропорциональной смещению звена относительно соседей. Получив силу, вычисляем приращение скорости.
                Далее:
                ExpandedWrap disabled
                    'вязкость
                    For i = 1 To stLen - 1
                      S(i) = S(i) * k1 + (S(i - 1) + S(i + 1)) * k2
                    Next i

                Несколько уменьшаем скорость, как бы из-за трения, считая трение пропорциональным скорости звена относительно соседей.
                Наконец:
                ExpandedWrap disabled
                    'расчёт позиций
                    For i = 1 To stLen - 1
                      P(i) = P(i) + S(i)
                    Next i

                Получаем новые значения позиций звеньев.
                Это всё по законам Ньютона, в формулах отсутствует время потому, что 1/44100 сек. мы принимаем за единицу, в результате формулы сильно упрощаются.
                Для 2D случая всё так же, только соседей не 2, а 4.
                Можно ещё упростить, считая все звенья абсолютно идентичными, избавясь от FdM, но звук получается слишком ровным, электронным, интереснее, когда струна имеет небольшие дефекты.
                  :scratch:
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0398 ]   [ 15 queries used ]   [ Generated: 28.03.24, 09:55 GMT ]