Orinj Структура на ефектите Пробване на ефектите

Orinj версия 7.0.8

Бележка: Тази страница не е за потребителите на Orinj, а за програмистите, които искат да създават ефекти за работа с цифрови сигнали за Orinj.

За сваляне

exampledelaytest.zip 17-ти август, 2023 Кода и файла JAR за софтуера за пробване на ефекти (18 KB)

Този файл съдържа:

  • Кода за софтуера, който пробва ефекти. Въпреки че този файл е наречен "ExampleDelayTest" ("проба на примерния дилей"), може да се използва не само за да се пробва Example Delay, но и други ефекти.
  • oreffect.jar, който е необходим за компилацията и за работата (виж Orinj Структура на ефектите oreffect JAR; тази тема включва и кода за този файл JAR).
  • exampledelay.jar, който осъществява един примерен дилей (виж Orinj Структура на ефектите Примерен дилей Пакет).
  • exampledelaytest.jar, който е компилацията JAR за този код.

ExampleDelayTest

Този код може да се използва за да се пробват ефекти за Orinj – ефекти, които са създадени със структурата на ефектите в Orinj. Този код имитира начина, по който Orinj търси файлове JAR с ефекти, чете информация за ефектите в тези файлове JAR и създава ефектите и техните графични интерфейси. Този код позволява и да се изсвири един файл уейв и да се приложи един от наличните ефекти при свиренето.

Самият код може да се компилира със следното.

javac "ExampleDelayTest\src\com\recordingblogs\AudioBuffer.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\Envelope.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\WaveFile.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\SelectDialog.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\WaveFileDialog.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\EffectStoreItem.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\EffectStore.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\Mixer.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\EffectDialog.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\MainFrame.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
javac "ExampleDelayTest\src\com\recordingblogs\ExampleDelayTest.java" -d "ExampleDelayTest\class" -classpath "ExampleDelayTest\class;Orange\oreffect.jar"
jar cfm ExampleDelayTest\exampledelaytest.jar ExampleDelayTest\manifest.txt -C ExampleDelayTest\class .

Следното описва класовете в този код в азбучен ред.

AudioBuffer.java

Този клас е една проста поредица от байтове, която се използва като буфер, който пази аудио данните прочетени от файла уейв и изпратени към изходното аудио устройство. Тъй като този буфер няма винаги да е пълен (например при четенето на аудио данни от края на файла уейв), този клас пази информация и за броя на байтовете, които се четат и трябва да се използват по време на свиренето.

EffectDialog.java

Този клас удължава JDialog и обвива графичния интерфейс за ефекта. В кода, този клас има две задачи.

  • Първо, прозорецът се показва по време на свиренето за да можеш да променяш контролите на ефекта и да пробваш ефекта (ефектът Примерен дилей например започва със забавяне равно на нула и затихване от 100%, което не е много интересно. Ще трябва да промениш тези контроли за да можеш всъщност да чуеш ефекта).
  • Второ, затварянето на прозореца ще накара свиренето да спре, така че да не трябва винаги да чуеш целия файл уейв.

Самите контроли за ефекта се съдържат в един JPanel (виж Orinj Структура на ефектите Примерен дилей DelayPanel Java). Този прозорец просто добавя този панел и един бутон Close (Затвори).

EffectStore.java

Този клас е една поредица от достъпните ефекти. Той имитира начина, по-който Orinj следи достъпните ефекти. Когато ефектите се четат от наличните пакети JAR с ефекти, те се добавят към тази поредица за да се използват после.

EffectStoreItem.java

Този клас съдържа информация за един ефект, включително неговото име, вид и конструкторите за ефекта и неговия графичен интерфейс. Тези обекти се създават, когато ефектите се четат от наличните пакети JAR с ефекти.

ExampleDelayTest.java

Това е главната функция в този код. Тази функция прави следното.

  • Зарежда всички ефекти като преглежда наличните пакети с ефекти.
  • Показва достъпните ефекти на потребителя и позволява на потребителя да избере един ефект. Избраният ефект е този, който ще се използва по време на свиренето. Ако потребителя щракне на бутона Cancel (Откажи) в прозореца за избор на ефект, този код ще спре.
  • Позволява на потребителя да избере един файл уейв за свирене. Ако потребителя щракне на бутона Cancel (Откажи) в прозореца за избиране на файл уейв, този код ще спре.
  • Отваря избрания файл уейв и проверява дали е валиден файл уейв с подходящия формат. Забележи, че този код работи само с файлове уейв, които са PCM с код на компресиране 1 (виж Парче формат (на файл Wave)), с пробната честота 44100 Hz и с пробната резолюция 16 бита в една проба.
  • Създава един миксер. Миксерът прилага ефекта към данните с аудио във файла уейв и свири полученото аудио.
  • Създава ефекта и прозореца за ефекта и започва да свири.

Envelope.java

Orinj използва обвивки (от англ., "envelopes") за амплитудите и панорамите на пистите и за сухия и мокрия микс на ефектите. Обвивките в Orinj позволява на тези параметри да се променят със свиренето на пистата. Една писта може например бавно да затихне, ако обвивката за амплитудата бавно промени амплитудата надолу.

Обвивките за сухия и мокрия микс трябва да се вземат предвид от ефекта, когато този ефект преработва звукови данни. Обвивката даден тук е само подобна на тези, които се използват от Orinj, но не позволява промени на сухия и мокрия микс. Стойностите им винаги са 1 (100% от сухия сигнал и 100% от мокрия сигнал) по време на цялото свирене.

MainFrame.java

Този клас зарежда достъпните ефекти. Едно удължение на класа JFrame бе избрано, защото така е направено и в Orinj и защото трябва да използваме зареждането на класовете (class loader) на един съществуващ обект за да може да заредим конструкторите за ефекта и за неговия графичен интерфейс. Този клас прави следното.

  • Преглежда папката "effects" за файлове JAR.
  • Декомпресира файловете JAR и търси файла "effect.xml" във всеки файл JAR. Файлът effect.xml трябва да е най-отгоре във всеки пакет с ефекти JAR и трябва да съдържа информация за ефектите във съответния файл JAR (виж Orinj Структура на ефектите oreffect JAR).
  • Зарежда всички ефекти според информацията във файловете effect.xml и го слага в склада с ефекти (виж EffectStore.java и EffectStoreItem.java по-горе).

Mixer.java

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

Продължението на свиренето, след началната подготовка, е в отделен процес. Това е така, за да позволи на потребителя да промени контролите в прозореца за ефекта (виж EffectDialog.java по-горе) или да натисне бутона Close (Затвори) в прозореца за ефекта и да спре свиренето.

По принцип, не е необходимо да изпращаме няколко буфера към изходното устройство за аудио в началото на свиренето. Ако поне един буфер е изпратен и останалата част от кода се изпълни достатъчно бързо, допълнителните буфери ще дойдат от отделния процес за свиренето докато първият буфер все още се свири и така няма да има пропуски в свиренето.

Забележи, че миксера третира ефекта като един обект от клас EffectInterface (виж Orinj Структура на ефектите oreffect JAR). Това означава, че миксерът ще може да използва само функциите на EffectInterface (тук, миксерът използва само "apply" и "allowsDryWetMix").

При ефекти, които позволяват сух и мокър микс (виж Orinj Структура на ефектите oreffect JAR), този миксер трябва да смеси входния сух буфер и мокрия буфер от ефекта (където в Orinj се прилагат сухия и мокрия микс, въпреки че това не се прави тук). Смесването, което се използва в този код, е само за аудио данни от 16 бита.

SelectDialog.java

Този прозорец просто показва имената на всички достъпни ефекти и позволява на потребителя да избере ефекта, който ще бъде приложен по време на свиренето.

WaveFile.java

Този клас осъществява един файл уейв. Файлът уейв е създаден като един RandomAccessFile. Това е добре, защото един файл уейв се състои от парчета, някои от които ще използваме, докато другите не. В този код например, ще използваме парчетата за формата и данните във файла уейв, но един файл уейв може да съдържа и други парчета, които например съдържат маркери, текст с информация за файла или други неща. Може да искаме да пропуснем тези парчета, когато работим с файла уейв.

Един файл уейв може да съдържа и едно парче с поредица от песни с сменящи се парчета с данни и тишина. В един такъв файл, парчетата данни няма да са най-отгоре във файла. За един такъв файл, това осъществяване на файла уейв не е най-доброто. По-добре е файла уейв да бъде един куп (stack) от парчета. За да направим този код по-прост, приемаме, че парчетата данни и формат във файла уейв са най-отгоре а не под някакво друго парче. Така, този код няма да може да се справи с всички файлове уейв.

Следното са данните в този клас.

  • m_datapointer – това е позицията на парчето данни във файла уейв (след името на парчето "data" и след четирите байта за размера на парчето). Пазим тази информация за да можем бързо да идем към данните с аудио във файла уейв и да започнем свиренето.
  • m_format – формата на файла уейв. В доста софтуери за аудио ни трябва бърз достъп до формата на вълната за да можем да я смесим правилно. Трябва например да знаем дали вълната съдържа един или два канала, така че да можем да приложим ефектите, които имат различни параметри за различните канали.

Следното са по-интересните функции в този клас.

  • readRIFFString(), readRIFFUnsignedShort(), readRIFFUnsignedInt() – тези функции просто четат текст и цели числа от два или четири байта от файла. Имената на парчетата са текст. Целите числа (без знак) се съдържат в парчето формат (например за кода на компресиране, броя на каналите, пробната честота и т.н.) и се използват и за размера на парчетата.
  • openRead() – тази функция проверява формата на файла (дали има правилната глава и парчета) и подготвя файла за свирене (като намира стойността на m_datapointer). Тъй като този код работи само със файлове уейв, които са PCM, 16 битови и с пробната честота 44100 Hz, тази функция проверява и за правилния код на компресиране, пробна резолюция и пробна честота.
  • startPlay() – тази функция премества четенето към началото на данните с аудио.
  • getData() – тази функция чете един буфер с данни с аудио. Тази функция тук е доста проста, но може да бъде и доста по-сложна, ако софтуерът позволява превъртане напред или назад или свиренето на лупинги.

WaveFileDialog.java

Този прозорец просто позволява на потребителя да избере един файл уейв за свирене.

Пробване на ефектите в Orinj и създаване на предопределени настройки

Можеш също така и да пробваш ефектите в Orinj. Сложи пакета JAR с твоите ефекти в папката "orange/effects" и стартирай Orinj. Orinj ще разпознае файла JAR автоматично, ще разпознае ефектите и ще създаде менюта, така че да можеш да използваше тези ефекти в пистите.

Почти всеки от стандартните ефекти в Orinj се инсталира с един комплект от предопределени настройки (виж Orinj Ефекти). Всяка предопределена настройка съдържа определени стойности за контролите на ефекта. Предопределената настройка "bounce (quick)" за дилея в Orinj например определя, че забавянето в левия канал е 400 милисекунди (ms), забавянето в десния канал е 800 ms, затихването в левия канал е 80% и затихването в десния канал е 60%. Предопределените настройки са просто един начин да позволим на потребителите бързо да намерят добри настройки за всеки ефект, без да трябва да сами да пробват различни опции.

Не е задължително да създаваш предопределени настройки за ефектите. Ако искаш обаче, можеш. В Orinj, добави ефекта към една писта. В прозореца за ефекта, настрой контролите на ефекта на стойностите, които трябва да с в предопределената настройка. Щракни на бутона за запазване на настройката до кутията за предопределените настройки (тази кутия и бутона ще бъдат добавени от Orinj независимо от това, как организираш контролите в прозореца за ефекта). Запази предопределената настройка.

Можеш да запазиш колкото предопределени настройки искаш. Тези настройки ще бъдат запазени в папката "orange/presets" на Orinj с името, което избереш, последвано от името на класа на ефекта в Java. Ако създадеш една инсталация за пакета с твои ефекти, тази инсталация трябва да сложи пакета с ефекти в папката "orange/effect" в инсталацията на Orinj, а предопределените настройки в папката "orange/presets" в инсталацията.

Във версиите на Orinj преди 3.0.2, ако нямаш предопределени настройки и все пак добавиш твоя ефект към една писта, ще видиш предупреждението "Няма предопределени настройки" (на англ., "Cannot find presets"). Ефектът ти ще работи така и така. С версия 3.0.2, това предупреждение бе махнато, понеже в Orinj може да има ефекти, които нямат параметри и следователно нямат предопределени настройки. Фазовият осцилоскоп и спектралният монитор в Orinj нямат параметри и нямат предопределени настройки.

Виж също:
Orinj Структура на ефектите

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

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.