User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: GeneralSound и сэмплы

  1. #1

    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    1,071
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    1,245
    Поблагодарили
    370 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию GeneralSound и сэмплы

    Пытаюсь разобраться с GS.
    Есть вопрос по сэмплам.
    Допустим есть такой сэмпл: Telephone.zip
    В GS грузится, тут с этим нет проблем. Вопрос в том какую ноту устанавливать при проигрывании. Спецификацию на чанки смотрел. Но либо я дурак, либо не вижу там ноты на которой его надо проигрывать.
    Более/менее приличный звук выходит при установке ноты 71.

    P.S. И еще вопрос. Реально ли совместить выполнение пользовательского кода в GS и проигрывание сэмплов?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от LW Посмотреть сообщение
    Допустим есть такой сэмпл:
    В аттаче iff-файл, у них нужно отрезать заголовок, насколько помню. Текст из описания GS:

    наиболее распространенные на 32-x разрядных компах виды сэмплов - это файлы с расширением .IFF, .SMP, .SND, .WAV и др. Два последних файла - это голые оцифровки с микрофона или CD, а два первых - сэмплы, состоящие из двух частей: заголовка и блока данных (сам звук). GS-у нужен только блок данных, а заголовок надо обрезать. В файле .IFF заголовок занимает первые 104 байта, в других сэмплах заголовок может иметь другую длину и данные. Рекомендую брать файлы только с расширением .IFF, (т.е. самый что ни на есть обычный сэмпл от MOD-ов) из заголовка которого можно вытащить некоторые характеристики сэмпла:

    Смещение от начала сэмпла:

    +22,+23 - старт loop'а в сэмпле (здесь и далее сначала идет старший байт, затем - младший)
    +26,+27 - длина loop'а
    +102,+103 - длина самого сэмпла без заголовка

    чтобы сэмпл формата .IFF можно было использовать в "GS", надо провести три следующие операции:

    1) Отрезать заголовок: первые 104 байта.
    "GS"у он не нужен, и "GS" воспримет его как часть сэмпла, что скажется на самом звуке.
    2) В оставшемся сэмпле прибавить к каждому байту число 128 - это необходимо для смены знака.
    3) Записать модифицированный сэмпл на диск - он готов к дальнейшему использованию.
    Насчёт высоты нот сэмпла:

    В GS грузится, тут с этим нет проблем. Вопрос в том какую ноту устанавливать при проигрывании.
    Да, помню, тоже думал, как заставить GS играть сэмпл на той же ноте, что и wav на РС. В итоге сохранял wav как моно 8 бит с частотой дискретизации 8 КГц (именно для эффектов, а не музыки, этого за глаза), а GS ставил ноту ДО третьей октавы, но могу ошибаться, дело было ооочень давно.

    Реально ли совместить выполнение пользовательского кода в GS и проигрывание сэмплов?
    В теории - да, если писать свою процедуру вывода звука, висящую целиком на прерываниях, чтобы основной код мог работать параллельно. Вмонтированный плеер, как понимаю, по прерываниям лишь берет данные из буфера, который ему готовится основным кодом. Поэтому чем больше жрут прерывания, тем меньше остаётся на основную задачу, что и так понятно, но 37 КГц это не 50 Гц =) Там нужно очень постараться.
    Если же нужен только код, без проигрывания эффектов, прерывания логично вообще запрещать, дабы не тратить процессорное время.

    Этот пользователь поблагодарил reddie за это полезное сообщение:

    LW(10.11.2021)

  4. #3

    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    1,071
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    1,245
    Поблагодарили
    370 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    у них нужно отрезать заголовок
    заголовок отрезал
    Цитата Сообщение от reddie Посмотреть сообщение
    а GS ставил ноту ДО третьей октавы
    т.е. по нумерации GS 0..35 ?
    Цитата Сообщение от reddie Посмотреть сообщение
    В теории - да
    да я и сам понимаю, что 320 тактов на прерывание маловато будет, но может у кого есть практика.

  5. #4

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от LW Посмотреть сообщение
    т.е. по нумерации GS 0..35 ?
    Не совсем... там мудреная нумерация нот, вернее, есть ограничение на нижние октавы. Цитируя руководство:

    #40 Set FX Sample Playing Note
    Установка ноты по умолчанию для текущего эффекта.

    SD Note [0..95]
    SC #40
    WC

    Note=
    0 C-0
    1 C#0
    12 C-1
    24 C-2
    36 C-3 (C-1 в Амиге)
    48 C-4 (C-2 в Амиге)
    60 C-5 (C-3 в Амиге)
    72 C-6
    84 C-7

    В данной версии Sound Generators Wave 2, 3 могут воспроизвести октавы 3, 4 и 5,
    поэтому допустимым значением параметра Note является диапазон от 36 до 71.
    Соответственно, нота До третьей октавы это 36. Вроде ее и задавал, но много лет прошло, точно не скажу.
    Пока что с железным GS ковыряться нет возможности, а в эмуляторе что-либо кодить это не мое =) Не перевариваю PC-клаву совершенно.

    Этот пользователь поблагодарил reddie за это полезное сообщение:

    LW(10.11.2021)

  6. #5

    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    1,071
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    1,245
    Поблагодарили
    370 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    а GS ставил ноту ДО третьей октавы
    сорри. воспринял ДО как предлог

  7. #6

    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    1,071
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    1,245
    Поблагодарили
    370 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    С нотами разобрался, спасибо.

    А как лучше определять наличие/отсутствие GS?

  8. #7

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от LW Посмотреть сообщение
    как лучше определять наличие/отсутствие GS?
    Наиболее правильным считается (ну, когда-то считался) посыл команды сброса с последующим ожиданием в порту данных числа страниц памяти.
    Т.е. давалась команда полного сброса #F4, выжидалось время и читалось значение из порта #B3, там должно было быть или 3 (112К) или 14 (512К).
    Однако время шло, были выпущены модели с увеличенным объемом памяти (2МБ и больше), и данный тест не сработает.
    Более верным решением считаю определение через команды работы с внутренними портами либо памятью: засылаем внутрь GS байт данных и потом читаем его обратно.
    Проделав энное число раз этот процесс и получая одинаковые байты, можно утверждать, что GS присутствует.
    Разумеется, сперва тоже стоит выполнить сброс, можно и неполный (#F3), что быстрее, ибо мало ли чем GS был занят в момент начала теста.
    Команды работы с внутренними портами и памятью лежат в диапазоне #10-#1D, думаю, больше подойдет пара команд #16-#17 либо #1C-#1D.
    Ну, и самое главное: в пассивном состоянии из порта статуса (#BB) должны читаться нулевыми биты 0 и 7, т.е. число 126 (#7E).
    Если из них читается всякая фигня, либо они всегда равны 1 (после сброса), то GS с большой долей вероятности не установлен, а читаем мы шину.

    Этот пользователь поблагодарил reddie за это полезное сообщение:

    LW(10.11.2021)

  9. #8

    Регистрация
    16.11.2005
    Адрес
    Санкт-Петербург
    Сообщений
    2,925
    Спасибо Благодарностей отдано 
    1,168
    Спасибо Благодарностей получено 
    362
    Поблагодарили
    198 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от LW Посмотреть сообщение
    А как лучше определять наличие/отсутствие GS?
    - сброс #F3
    - ждем немного
    - командой #10 пишем во внутренний порт #03 GS значение, например #AA
    - читаем #B3
    - сравниваем с #AA, не равно - нет GS
    - командой #10 пишем во внутренний порт #03 GS значение, например #55
    - читаем #B3
    - сравниваем с #55, не равно - нет GS.
    - GS есть

    При подаче команд вместо ожиданий сбросов Command bit и Data bit делать небольшие задержки, разумеется.

    Этот пользователь поблагодарил Evgeny Muchkin за это полезное сообщение:

    LW(12.11.2021)

  10. #9

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Evgeny Muchkin Посмотреть сообщение
    вместо ожиданий сбросов Command bit и Data bit делать небольшие задержки, разумеется.
    Примерно то же и писал, просто если готовность ГС проверяется из битов регистра статуса - стоит предусмотреть "аварийное" завершение долгого цикла ожидания. Мало ли, ГС завис (особенно закачанная программа юзера) или его вообще нет. Это разумно делать на всём протяжении работы с ним, иначе повиснет уже основной комп.

  11. #10

    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    1,071
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    1,245
    Поблагодарили
    370 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Evgeny Muchkin Посмотреть сообщение
    - командой #10 пишем во внутренний порт #03 GS значение, например #AA
    - читаем #B3
    - сравниваем с #AA, не равно - нет GS
    - командой #10 пишем во внутренний порт #03 GS значение, например #55
    - читаем #B3
    - сравниваем с #55, не равно - нет GS.
    Я так понимаю в режиме эмуляции GSType=BASS данная конструкция не сработает?

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ищу сэмплы!!!
    от BYTEMAN в разделе Музыка
    Ответов: 12
    Последнее: 25.05.2010, 21:10
  2. Ответов: 26
    Последнее: 13.04.2008, 00:06
  3. дорого куплю GeneralSound
    от White_Hunter в разделе Барахолка (архив)
    Ответов: 2
    Последнее: 26.06.2007, 00:01
  4. Помощь по GeneralSound
    от Знахарь в разделе Программирование
    Ответов: 7
    Последнее: 21.02.2006, 18:58
  5. Сэмплы в YM2
    от Bulba в разделе Музыка
    Ответов: 5
    Последнее: 16.02.2005, 02:37

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •