Как работи WAV файл


Как работи WAV файл

Когато се направи програма пианола - пиано на PC клавиатура, спомняйки си музиката в мнемоничен форма в текстови файлове, аз стоеше задачата да превеждат на музиката в стандартен аудио формат. Разбира се, най-лесният начин да слушате музика чрез програма, в която е бил създаден, и запишете звук от него през микрофона на правилното устройство. Направих го, - за да записвате звуци от компютъра говорител на електронни книги на таблет компютри с помощта на вградения микрофон. Оказва WAV файлове.
Естествен въпрос - как да получите около това по-скоро неприятен намеса и процеса на вземане, дали да изпрати музика директно в WAV файл не може да бъде? И ако това е възможно, не е възможно в този случай да се замени звук звук оператор (Аз няма да кажа, че той е лош, но достатъчно храна) към по-благородни звук, звука на пианото, например?

И в първия и втория случаи ние трябва да знаем как WAV файл. Когато се обърна към интернет с това искане, той не се веднага намери, но фактът, че е намерил, не е съвсем точна. В допълнение много от препоръките на WAV файлове рекордни предназначени за умни програмисти, а аз освен Turbo BASIC (прости програми DOS трудни времена) Аз не знам нищо. Въпреки това, Turbo BASIC е добре знам, знам, като среда, способна на много неща, дори и в рамките на днешните модерни системи, и ти го препоръчвам.

Така че, WAV файл. Той се състои от капачка или ръководителят на "главата" - от нула байт байт номер 43 г. включително (44 байта) и поле за данни "DATA" - от номер на байт 44 и до края на файла.


Прясно забележка. И как нещата работят в Visual Basic?

Сред VB6 капачка WAV файл за стерео със скорост от 44,100 ръка проба / и може да се запише в "T.wav" файл, както следва:
"___________________________

Дим Header (10), докато

fName = "T.wav"
Open fName За Binary Както # 1
Потърсете # 1, 1
Header (0) = 1179011410
Header (1) = Lof (1) - 36 'NextSise
Header (2) = 1163280727
Header (3) = 544 501 094
Header (4) = 16
Header (5) = 131073
Header (6) = 44100 '= VEL (скорост на разпространение)
Header (7) = 44100 * 4 '= VEL * 4
Header (8) = 1048580
Header (9) = 1635017060
Header (10) = Lof (1) - 44 'DataSize
Сложете # 1. Header ()
Затвори # 1


Нека да се върне в Turbo BASIC

Сега е ред да практикуват. Направи добро и го запишете на WAV файл.
Това (вж. По-долу) Turbo BASIC програма ще ви помогне да разберете как всичко работи. Ние все още няма да пиша музика, но ще създаде звуковите проби за дадена честота на звука.
Вие използвате тази програма и оперативния вход показва въпросителен знак, ви питам какво да правя? Искате ли да излезете от програмата (изход) - напишете "д" и въведете
На първо място, трябва да отворите файла (отворен) - тип "или", отворете файла "r.wav"
Можете да експериментирате -
"L" ще покаже дължината на LOF файл и позицията на курсора ЗЗД
"S44" постави показалеца на 44-ия байт на файла
"P123", казва (позиция на курсора на) в рамките на 123-битови символи в променлива S $ на
"G" ще напиша във файл (относно позицията на показалеца), стойността на S $

Но нека да запишете звук - тип "w" и натиснете Enter. Ние стигнем до фаза на програмата, която се повтаря жалби до функцията, която изчислява амплитудата на звука за всяка проба - FNSS2 (260.74,1). Програмата записва две звуци - звуци с честота 260,74 Hz (първата октава), определена от тембъра и характеристиките на звука параметър маса номер 1, а след това - на втория звук, чиста синусоида на същата честота за сравнение (параметри Таблица 0) , Преди записването на звуци FNSS2 функция, която ги създава, излага своите вътрешни променливи по подразбиране, това се случва, когато осъществявате достъп с F = 0.

Разбира се, че е интересно да се знае как звукът прави FNSS2 функция (F, K).
За този, който имам, искам да кажа, и да се спекулира относно възможностите за компютърно моделиране на звука, в следващата статия. И тук са по-прост пример.

DEF FNSS2 (F, К)
СТАТИЧНИ FS, сарком на Капоши, А0, А1, А2, MA2, X, DX, D
ЛОКАЛНО A, Z, ZZ

АКО Е = 0, тогава "първоначална настройка
FS = F. KS = K
FNSS2 = 0. EXIT DEF
КРАЙ АКО

Ако не е (F = FS И К = KS), след това
"Нова честота
FS = F. X = 2. DX = 2 * FS / VEL
"Нови параметри
KS = К. А0 = 1. А1 = 0. А2 = 0. MA2 = 0. D = 1 "по подразбиране
SELECT CASE K
СЛУЧАЙ 0. А0 = 1. А1 = 0. А2 = 0. D = 1
СЛУЧАЙ 1. А0 = 0. А1 = 1. А2 = 0. D = 0,99
СЛУЧАЙ 2. А0 = 0. А1 = 0. А2 = 1. MA2 = 1. D = 1
END SELECT
КРАЙ АКО

АКО X<1 THEN Z=X*2-1 ELSE Z=(X-1)*2-1. Z=-Z
ZZ = 1-Z * Z. А = А0 * (ZZ * 3 + ZZ * ZZ) / 4 + A1 * ZZ * (1-2.3 * Z)
АКО MA2 = 1 тогава = 0. АКО X> 1-2 * DX И X<1+2*DX THEN A=A2
АКО X<1 THEN A=-A

Както може да се види, първоначалното повикване за функцията определя параметрите, К = 0, и след лечение с различна честота или с различен К предизвиква възстановяване на първоначалните условия и етапа на определяне на промяната на формула фаза:
СТЪПКА = 2 * (звукова честота) / (честота)

Променливата X, при всяко позоваване променлива стъпка DX, през цялото време е в интервала (0,2), което отговаря на обичайната фаза констатация в обхвата от 0 до 2 * пи.
Първата половина на периода на колебанията е програмиран за формули -1 Y = (1 - Z ^ 2) * 3/4 ​​+ (1 - Z ^ 2) ^ 2 * 1/4 - много добро представяне на синусоида
Y = (1 - Z ^ 2) * (1-2.3 * Z) - люлки до края на отрицателно половин цикъл освобождаване
втората половина на периода на промените на програмирани от същите формули, но е преминал в брояч Z и знака на А е с обратен знак. Минавайки втората половина antiphase цикъл позволява гладки "с телбод" заедно с емисии.

СЛУЧАЙ 2 набор от параметри, които можете да видите в самата функция е предназначена за генериране на кратък импулс. С такъв импулс е удобно да учат reveberatsii (аз го направих, но ние ще говорим за това по-късно) функция.

Това е всичко. Честит ако нещо помогна.
Заинтересованите страни могат да получат достъп до пощенската служба [email protected]