Синтезатори от MIDI към Wave

Качено от mic на Fri, 03/30/2018 - 11:22

администратор: Качено първо на 2018 01 06

Мислех, че създаването на един синтезатор за MIDI ще е трудно. Исках да мога да превърна един файл MIDI във файл уейв без да трябва да пускам файла да свири и да записвам резултата. Оказа се, че един синтезатор може да е доста прост. Създадох един – сигурно не е супер, но е достатъчно добър.

Файлове Downloadable Sounds (DLS)

В Windows, устройството "sound mapper" или "wave mapper" се появява като едно от звуковите устройства в софтуерите за аудио и свири файлове MIDI. По същество, това е един виртуален синтезатор, който разчита на един файл "gm.dls". Този файл съдържа информация, която казва на синтезатора как да свири различни ноти на различни инструменти. На моя компютър, този файл се намира в "c:\Windows\SysWOW64\drivers", "c:\Windows\System32\drivers" и една две други папки. Roland държи авторските права за файла gm.dls. Файлът и интерпретацията на Roland от 1996-та за това, какви звукови данни трябва да се използват от един синтезатор за MIDI и как тези данни трябва да се използват.

Файлът DLS, на кратко, е сбирка от семпли уейв – тоест една сбирка от звукови парчета с формата на файловете Wave, които могат да се свирят подобно на всички други файлове уейв (с няколко усложнения, както по-долу) за да произведат различни ноти на различни инструменти. Може би мислиш, че един синтезатор "синтезира" звука, тоест "създава го", но в този случай това не е така. Тъй като файла DLS съдържа истински семпли уейв, един синтезатор свири един от тези семпли, когато на този синтезатор му е казано да свири една нота.

Удивително е, че файлът gm.dls е само 3.28 Mb. Помисли за това, че този файл описва как 235 инструмента трябва да изсвирят над 80 ноти (над 80 ноти за почти всеки инструмент). Виждал съм оплаквания, че семплите в този файл трябва да се подновят и сигурно трябва (тубата например не звучи като туба). Но в 1996-та Roland успя да вкара всичката информация необходима да се изсвирят над 80 ноти за 235 инструмента, записана със 16 бита и 22050 проби в секунда, само в 3.28 Mb. Това е удивително.

Синтезиране на звука

Нещата са почти толкова прости, като свиренето на семплите уейв такива каквито са, но синтезатора трябва да направи няколко настройки на звуковите данни. Например:

  • Семплите са доста кратки. За да изсвири една по-дълга нота, синтезатора трябва да повтори част от данните няколко пъти.
  • Един от семплите може да се използва за да се свирят няколко ноти с един и същ инструмент. Това означава, че тоналността на звуковите данни трябва да се промени както е описано по-долу.
  • Файлът DLS може да съдържа данни за "произнасяне" на семплите. Това може да означава неща като колко бързо семплите трябва да затихнат, на каква амплитуда един от семплите трябва да бъде задържан, дали трябва да има някаква нискочестотно трептене в амплитудата или тоналността и така нататък.

Фактът, че семплите са кратки и че всеки от тях може да се използва за няколко ноти помага със създаването на малки файлове DLS.

Работа с файла DLS

Документацията за формата на файла DLS е достъпна от асоциацията на производители на MIDI (MIDI Manufacturer's Association) и всява страх. Когато обаче я преглеждам и я превеждам в код за моя синтезатор, откривам, че не е задължително да се справя с всичко. Мога да пренебрегна някои от парчетата във файла DLS и мога да пренебрегна част от информацията за произнасяне на инструментите.

Един файл DLS, като gm.dls, е файл с формата Resource Interchange File Format (RIFF) (каквито са и файловете уейв или файловете MIDI). Данните му са организирани в "парчета". Формата RIFF позволява на един софтуер да пренебрегне парчета, които този софтуер не познава. Синтезатора не трябва да може да се справи с всичко.

  • Едно от парчетата във файла DLS описва инструментите във файла (например "бас с пръсти").
  • Всеки инструмент съдържа един списък с "райони". Например, един от районите за баса с пръсти може да казва, че нотите от 0 до 72 на баса с пръсти трябва да се свири като се използва един определен уейв и че този уейв, ако не е променен, ще свири нотата 38 (това са примерни измислени числа). Нотите MIDI са от 0 до 127, като 60 е средното До и всяка единица нагоре или надолу е един полутон нагоре или надолу.
  • Семплите уейв са организирани в една таблица, която е просто списък от звукови парчета с нормалния формат Wave. Района определя къде се намира определеното парче уейв във файла DLS. Района и самото парче уейв съдържат и допълнителна информация, като дали на парчето му трябва допълнителна настройка и коя част от парчето трябва да се повтори за да се задържи нотата.
  • Данните за произнасяне са част от района или инструмента. Както по-горе, те определят неща като колко бързо парчето трябва да затихне, дали трябва да има някакво нискочестотно трептене в тоналността или амплитудата и така нататък.

Някои от парчетата във файла DLS може да се пренебрегнат. Един пример е парчето за DLS ID, което съдържа глобална уникална идентификация за части от файла DLS.

Намирането на правилните семпли уейв и първата стъпка. Втората стъпка е променянето на тоналността на парчето уейв, ако е необходимо. Тази промяна в тоналността може да е лесна. Синтезатора може да промени пробната честота на звуковите данни, като минава през тях по-бързо или по-бавно. Едно просто обяснение е: предположи, че парчето уейв е създадено за да свири нотата Ла и трябва да го използваме за да свирим нотата До с три полутона нагоре. Каквато и да е честотата на Ла, честотата на До е 23/12 = 1.1892 пъти по висока и трябва да свирим парчето 1.1892 пъти по-бързо. Това означава, че за всяка проба на изхода, ще броим 1.1892 проби на входа. Тъй като броим пробите с нецели числа, ще трябва да използваме интерполация, когато сме между пробите.

Разпознаването на данните за произнасяне е третата стъпка.

  • Някои от семплите уейв са създадени за да се свирят от начало до край без да се повтарят части от звуковите данни (например барабани). Други семпли уейв определят, че част от звуковите данни трябва да се повторят няколко път за да се задържи нотата (например баса с пръсти).
  • Повечето семпли уейв определят, че им е необходимо допълнителна настройка на тоналността и амплитудата. Например, един от тези семпли може да е създаден за да свири нотата Ла с 440 Hz, но може би произвежда нотата Ла с 439 Hz и трябва да бъде променено (пробната му честота трябва да се промени както при промяната в нотите) с 0.9977.
  • Повечето инструменти или райони съдържат обвивка за амплитудата, която казва, че нотите на този инструмент или район трябва да имат определени времена на атака, затихване, задържане и отпускане (понякога и повече; т.e., амплитудата трябва първо да се увеличи, след това да затихне, да се задържи на място и да се доведе до нула както при естественото затихване на инструментите).

Има и доста друга информация за произнасянето във файла. Засега я пренебрегнах. Предполагам, че част от тази допълнителна информация може да е важна в зависимост от инструмента. Например, за един орган Хемънд може да трябва нискочестотно трептене в тоналността. Фаловете MIDI, които свирих обаче и в които нямаше орган, изглеждаха достатъчно добри след като се справих с настройката на тоналността и обвивките на амплитудата.

Това беше лесно. Отне около два дена работа и бе достатъчно за да се превърнат моите файлове MIDI във файлове уейв успешно: разпознаването на някои от парчетата във файла DLS, правилните промени в пробната честота в семплите уейв и добавянето на част от информацията за произнасянето.

Разбира се, интересувах се само от превръщането на файлове MIDI във файлове уейв, а не например от свиренето в реално време. За това и не обърнах внимание на скоростта на превръщане. Можех да създам по-добър код. Така или иначе, моят синтезатор отнема около една секунда за да произведе около една минута от данни уейв, така че предполагам, че може да бъде един синтезатор в реално време.

Научих и няколко неща. Документацията за файла DLS например описва как скоростта на съобщението за свиренето на една нота в MIDI трябва да се използва – обикновено като амплитуда, но понякога за да промени началната атака на нотата. Това не беше информация, която лесно можеше да се намери на друго място.

Файлове SoundFont

Файловете SoundFont (т.е., "звуков шрифт") са подобни на файловете DLS. Безплатни файлове SoundFont изглежда се намират по-лесно от безплатни файлове DLS. Форматът SoundFont изглежда по-сложен, но пък и след като хората създават файлове SoundFont сега, когато дисковото пространство е доста, изглежда пренебрегват повечето от специфичността на формата. Може би е по-лесно да се работи с файлове SoundFont, отколкото с файлове DLS.

Също така, заради това, че няма ограничения в дисковото пространство, файловете SoundFont изглежда съдържат реалистични звукови данни, което ще направи звука на файловете MIDI по-добър.

Сигурно трябваше да започна с файлове SoundFont. Но това ще е един експеримент за един друг ден.

автори: mic

Добави нов коментар

Filtered HTML

  • Freelinking helps you easily create HTML links. Links take the form of [[indicator:target|Title]]. By default (no indicator): Click to view a local node.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.