Звуковые семплы в файлах SF2 формата
Синтезаторы музыки для создания музыкальных звуков используют так называемые семплы - короткие отрезки записей реальных музыкальных инструментов хорошего звучания. Нажимаем, например, на клавишу электронного пианино, и слышим семпл, принадлежащий той ноте, на клавишу которой мы нажали.
Можно ещё нажимать на клавишу более резко, или изменять тембр с помощью регулятора, и тогда, после некоторой обработки, этот же семпл будет звучать несколько по-другому, или даже может быть заменён на семпл другого звучания. Уж о громче или тише я не говорю, это делается достаточно просто.
Но, тем не менее, запись есть запись. Её звук даже не то, что недостаточно совершенен, но он трудно управляем. Да, создать эхо, "погрузив ф-но в бочку", мы можем, но как сделать, чтобы клавиши "звенели как звоночки", или "пели как скрипка" - это получается не очень.
Главное, что сам звук не очень изучен, что именно в нём такого красивого, что он не просто пищит, а завораживает своим звучанием? Как создать "идеальный звук" с "нуля", не прибегая ни к каким записям? И можно ли это сделать?
Некоторые мои опыты с синтезом музыкального звука показывают, что да, это можно сделать, и это - достаточно перспективное направление, составляющее некий противовес работе с семплами естественного звука.
Что представляют собой естественные семплы, мне интересно было знать, но глубоко вникать в традиционные процессы синтеза мне не хотелось. А семплы просто так не посмотришь - они запрятаны в неизвестные мне файлы SF2 формата, а я знаю только WAV формат, и лишних знаний не особенно хочу.
Но всё оказалось просто, до чрезвычайности.
КАК ПЕРЕВЕСТИ ФАЙЛ ИЗ SF2 формата в WAV формат
Я нашёл в интернете и скачал семплы звуков "Steinway Grand Piano" - так там было написано. Компьютер проигрывать этот файл отказался, и стал спрашивать - что это такое?
Но я поступил, как уже было сказано, чрезвычайно просто.
Я переименовал этот файл в файл R.wav, открыл его с помощью программы ТРИО (файл открывается этой программой, как двоичный, и поэтому совершенно наплевать, какова его структура, и какое его расширение), и записал в начало файла стандартную шапку WAV файла - монозапись, два байта на один семпл (семпл здесь - единица записи, а не вся запись), скорость раздачи - 32000 семплов в секунду.
То же самое можно сделать, используя программу, приведённую ниже.
Можно использовать также одну из опций программы WAV-манипулятор, скачать программу можно отсюда - http://yadi.sk/d/uqOBKSY-3VEKSS
И получилось то, что вы видите на рисунке - и звуковой редактор признаёт файл "за своего", и проигрывается файл прекрасно, и на структуру расположения звуковых семплов внутри файла можно посмотреть.
ЧТО НАХОДИТСЯ ВНУТРИ ФАЙЛА
Кроме указанного "Steinway Grand Piano", я посмотрел более короткий SF2 файл. Его содержимое показано в окне редактора в верхней части рисунка. "Steinway Grand Piano" - ниже.
Во второй части "Steinway Grand Piano" семплами длительностью по 4 секунды представлены все клавиши фортепьяно - начиная от ДО# четвёртой октавы, по октавам вниз, затем ДО четвёртой октавы и снова по октавам вниз, и так до ноты РЕ третьей октавы, и по октавам вниз - все 12 полутонов.
Но не только семплы музыкальных записей видны в окне редактора.
Шапка WAV файла - короткая, всего 43 байта плюс байт с номером ноль, её можно видеть в виде кодов и символов во втором столбике на рисунке. А в первом столбике - начало шапки SF2 для этого же файла. SF2 шапка длиннее, и выходит за пределы 43-го байта, но звуковой редактор про это не знает, поэтому в самом начале записи в окне редактора видны байты, принадлежащие шапке. Для файла "Steinway Grand Piano" шапка оказалась ещё длиннее (см. внизу рисунка).
В окне редактора чётко видно то место, в котором кончается шапка и начинаются записи.
Записи естественного звука, достаточно сильно отличающиеся для соседних клавиш на вид, но сильно сходные на слух, вот и ещё одна загадка - что мы в действительности хотим от синтезированного звука, и что есть "идеальное" звучание?
Реальный звук достаточно причудлив - посмотрите на врезку, на которой представлено начало развития звука после удара по клавише, но нужна ли именно такая причудливость в самом деле?
И нельзя ли обойтись в синтезе чем-то более простым?
В принципе, дальнейшие эксперименты со звуком, синтезируемым "с нуля", и сравнение результатов синтеза со звучанием семплов реального звука должно дать ответы на эти вопросы.
Ну, а семплы реального звука теперь вполне доступны и для прослушивания, и для анализа.
=============
ПРОГРАММА ДЛЯ РАБОТЫ С ФАЙЛОМ ИЗ ТУРБО БЕЙСИКА
Входите в Турбо бейсик, запускаете программу, вводите последовательно "or", "h", "c", "e"
и новая шапка для файла готова.
10 INPUT A$
SELECT CASE MID$(A$,1,1)
CASE "e"
STOP
CASE "o"
A1$=A$ : IF LEN(A1$)=2 THEN A1$=MID$(A1$,2)+".wav"
OPEN "B",#1,A1$ : GOTO 10
CASE "c"
CLOSE #1 : GOTO 10
CASE "l"
PRINT LOF(1),LOC(1) : GOTO 10
CASE "s"
SEEK #1,VAL(MID$(A$,2)) : GOTO 10
CASE "p"
PUT$ #1,MID$(A$,2) : GOTO 10
CASE "g"
GET$ #1,VAL(MID$(A$,2)),S$
PRINT S$,"loc=";LOC(1) : GOTO 10
CASE "h" 'put the head of wav file
GOSUB 1000 : GOTO 10
END SELECT
'====
1000 SEEK #1,0
L=LOF(1) : S$="RIFF"+MKL$(L-4)+"WAVEfmt " : S0$=CHR$(0)
S$=S$+CHR$(16)+S0$+S0$+S0$ ' 16 bit/sempl
S$=S$+CHR$(1)+S0$+CHR$(1)+S0$ ' 1 - line format + 1 - mono
S$=S$+MKL$(32000)+MKL$(64000) ' 32 sempl/msek + 64 bite/mcek
S$=S$+CHR$(2)+S0$+CHR$(16)+S0$ ' 2 bite/sempl_all + 16 bit/sempl_mono
S$=S$+"data"+MKL$(L-44) ' date size
WHEAD$=S$ : PUT$ #1,WHEAD$
RETURN
'=============================
Свидетельство о публикации №216071001570