purebasic.info

PureBasic forum
Текущее время: Чт янв 18, 2018 12:39 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Вт окт 07, 2014 3:40 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Смысл кода понятен. В си не силен и при переводе сносит крышу :wink: .

Вот недостающие структуры
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Structure VstEvent                 ;// a generic timestamped event
 
   type.l;                   // see enum below
   byteSize.l;               // of this event, excl. type and byteSize
   deltaFrames.l;            // sample frames related to the current block start sample position
   flags.l;                  // generic flags, none defined yet (0)
 
   Data_.s[16];               // size may vary but is usually 16
EndStructure
Global VstEvent.VstEvent
 
Enumeration                     ;// VstEvent types
 
   #kVstMidiType ;,               // midi event, can be cast As VstMidiEvent (see below)
   #kVstAudioType;,               // audio
   #kVstVideoType;,               // video
   #kVstParameterType;,           // parameter
   #kVstTriggerType;              // trigger
                                 ;// ...etc
EndEnumeration
 
Structure VstMidiEvent             ;// To be casted from a VstEvent
 
   type.l;                   // kVstMidiType
   byteSize.l;               // 24
   deltaFrames.l;            // sample frames related to the current block start sample position
   flags.l;                  // none defined yet
 
   noteLength.l;             // (in sample frames) of entire note, if available, else 0
   noteOffset.l;             // offset into note from note start if available, else 0
 
   midiData.c[4];            // 1 thru 3 midi bytes - 1-command, 2-#note, 3-???; midiData[3] is reserved (zero)
   detune.c;                 // -64 to +63 cents; for scales other than 'well-tempered' ('microtuning')
   noteOffVelocity.c;
   reserved1.c;              // zero
   reserved2.c;              // zero
EndStructure
Global VstMidiEvent.VstMidiEvent
 
 
Structure VstEvents                ;// a block of events For the current audio block
 
   numEvents.l;
   reserved.l;               // zero
   *events.VstEvent[2];         // variable
EndStructure ;};
Global VstEvents.VstEvents



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Ср окт 08, 2014 12:54 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Я не пойму в каком месте данные от структуры VstMidiEvent предаются VstEvents? :(

данные отправляются на плагин в таком виде
Код:
1
(ptrPlug->dispatcher(ptrPlug,effProcessEvents,0,0,(VstEvents*)ptrEventBuffer,0.0f)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Чт окт 09, 2014 1:20 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Немного доработал VST_PB.pbi
Стало поудобнее.


Вложения:
VST_Test 2.pb [7.54 KiB]
Скачиваний: 174
VST_PB.pbi [21.76 KiB]
Скачиваний: 188
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Чт янв 15, 2015 2:00 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Выкладываю обновленную библиотеку VST_PB.pbi
+ VST библиотеки
Код:
1
2
; // VST Plug-Ins SDK
; // Version 2.4                $Date: 2006/01/12 09:04:56 $



Вложения:
Комментарий к файлу: AEffectX ver 2.4
AEffectX_24.pbi [63.99 KiB]
Скачиваний: 161
Комментарий к файлу: AEffect ver 2.4
AEffect_24.pbi [10.47 KiB]
Скачиваний: 170
Комментарий к файлу: сама библиотека
VST_PB.pbi [23.5 KiB]
Скачиваний: 166
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Чт янв 15, 2015 2:09 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Ну собственно тестовый код


Вложения:
VST_Test_PB.pb [8.22 KiB]
Скачиваний: 146
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Чт янв 15, 2015 4:43 pm 
Не в сети
профессор

Зарегистрирован: Чт авг 05, 2010 2:36 pm
Сообщений: 462
Откуда: Донецк
Благодарил (а): 42 раз.
Поблагодарили: 11 раз.
Спасибо!
Буду дома поковыряю))))

_________________
PureBasic 5.60 X86, RfoBasic 90, Tinycc 0.97, Asus K54C Intel i7 2.7 ghz, 8 gb ddr3, Intel HD 3000, Windows XP SP3, Windows 10 x64, Nexus 4 and v5.1.1.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пт янв 16, 2015 9:27 am 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
я не могу сообразить
вот кусок кода
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Structure PBUnion  
  StructureUnion  
    b.b  
    w.w  
    l.l  
    f.f  
    ;s.s  
  EndStructureUnion  
EndStructure
 
*sound = AllocateMemory(40+#T_WAVBUFSIZE)
 
      *mem.PBUnion = *sound
   
      *mem\l = 'FFIR'                : *mem+4      ; riff-chunk-ID "RIFF"  
      *mem\l = 32 + #T_WAVBUFSIZE    : *mem+4      ; normally filesize minus (these) 8 Bytes  
      *mem\l = 'EVAW'                : *mem+4      ; wave-chunk-ID "WAVE"  
      *mem\l = ' tmf'                : *mem+4      ; format-chunk-ID "FMT "  
      *mem\l = 16                    : *mem+4      ; chunk data size (+ Extra Format Bytes)  
      *mem\w = 1                     : *mem+2      ; compression code  
      *mem\w = #T_CHANNELS           : *mem+2      ; number of channels  
      *mem\l = #T_SAMPLERATE         : *mem+4      ; samplerate  
      *mem\l = #T_BYTESPERSEC        : *mem+4      ; average bytes per second, (channels)*(block align)*(samplerate)  
      *mem\w = #T_BLOCKALIGN         : *mem+2      ; Block Align ('bytes per sample')  
      *mem\w = #T_BITS               : *mem+2      ; Bits per sample  
      *mem\l = 'atad'                : *mem+4      ; data-chunk-ID "DATA"  
      *mem\l = #T_WAVBUFSIZE/#T_UPDATESPERSEC         : *mem+4      ; data chunk size in byes
     
 
 
        For i = 0 To sampleFrames-1
          vol.f=1
          *mem\w=out(0)\Channel(i)*(32768.0*vol);leftOut(i)* 32768.0
          *mem+2
          *mem\w=out(1)\Channel(i)*(32768.0*vol);rightOut(i)* 32768.0
          *mem+2
        Next
 
        CatchSound(0, *sound)
        PlaySound(0)



как сделать шаблон для шапки?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
      *mem\l = 'FFIR'              : *mem+4      ; riff-chunk-ID "RIFF"  
      *mem\l = 32 + #T_WAVBUFSIZE    : *mem+4      ; normally filesize minus (these) 8 Bytes  
      *mem\l = 'EVAW'                : *mem+4      ; wave-chunk-ID "WAVE"  
      *mem\l = ' tmf'                : *mem+4      ; format-chunk-ID "FMT "  
      *mem\l = 16                    : *mem+4      ; chunk data size (+ Extra Format Bytes)  
      *mem\w = 1                     : *mem+2      ; compression code  
      *mem\w = #T_CHANNELS           : *mem+2      ; number of channels  
      *mem\l = #T_SAMPLERATE         : *mem+4      ; samplerate  
      *mem\l = #T_BYTESPERSEC        : *mem+4      ; average bytes per second, (channels)*(block align)*(samplerate)  
      *mem\w = #T_BLOCKALIGN         : *mem+2      ; Block Align ('bytes per sample')  
      *mem\w = #T_BITS               : *mem+2      ; Bits per sample  
      *mem\l = 'atad'                : *mem+4      ; data-chunk-ID "DATA"  
      *mem\l = #T_WAVBUFSIZE/#T_UPDATESPERSEC         : *mem+4      ; data chunk size in byes


PS
еще вопрос:
Кто тестировал код с VST синтезатором на выходе получался звук с щелчками?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пт янв 16, 2015 12:35 pm 
Не в сети
профессор

Зарегистрирован: Чт авг 05, 2010 2:36 pm
Сообщений: 462
Откуда: Донецк
Благодарил (а): 42 раз.
Поблагодарили: 11 раз.
Привет!
В старой версии vst_test на звуковухе realtek хлюпало на низких частотах.
А по поводу публикованого кода: заголовок wav собери в одну переменную а потом ее в память. Хотя я непонял еще как будет воспроизводится из памяти, если например синтезатор генерит звук на протяжении 16 тактов (например арпеджио) и вавка будет не меньше сотни метров....
держи линк на полезности
Думаю пригодятся исходники, там есть генерация wav с нуля, и код на C довольно простенький.

_________________
PureBasic 5.60 X86, RfoBasic 90, Tinycc 0.97, Asus K54C Intel i7 2.7 ghz, 8 gb ddr3, Intel HD 3000, Windows XP SP3, Windows 10 x64, Nexus 4 and v5.1.1.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пт янв 16, 2015 3:46 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Apokalipsis писал(а):
Хотя я не понял еще как будет воспроизводится из памяти, если например синтезатор генерит звук на протяжении 16 тактов (например арпеджио)


Попробуй любой синт с арпеджиатором (напр Syhlent1) и запусти в последнем тесткоде. В нем как раз воспроизводится из памяти.

Я только вот что не пойму. Если отрисовать волну которая выходит из синта (например чистая пила или синусоида), то все нормально на графике. Но когда данные ввожу в память и воспроизвожу то получаются щелчки.

Еще одна странность. Вот константа #T_UPDATESPERSEC =32 которая влияет на таймер ввода данный и длину данных для воспроизведения если я меняю на 1 то каждое второе воспроизведение получается с щелчком.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пт янв 16, 2015 6:27 pm 
Не в сети
профессор

Зарегистрирован: Чт авг 05, 2010 2:36 pm
Сообщений: 462
Откуда: Донецк
Благодарил (а): 42 раз.
Поблагодарили: 11 раз.
Щелчки возникают при каждом новом считывании буффера, тут надо подумать в сторону winmm.dll для воспроизведения напрямую, пурик дает какую-то микросекундную задержку.
С графиком подсказать немогу, из-за паршивого зрения определяю все на слух.
У секвенцеров типа рипера и фруктов звук через собственные интерфейсы передается на directx audio или mci...

Смотри еще на атаку и спад, у тебя в коде нота передается в сыром виде на вход синта и получается как бы мгновенное воспроизведение участка, если например в сайленте сбросить пресеты на init и потом atack, delay и release поставить по нулям а sustain на полную то тоже будут щелчки.

Блин, со смарта немогу нормально код просмотреть и в заднице которой сейчас сижу ноута нет!!! Сейчас бы глянул как можно подготовить ноту для передачи в синт.

_________________
PureBasic 5.60 X86, RfoBasic 90, Tinycc 0.97, Asus K54C Intel i7 2.7 ghz, 8 gb ddr3, Intel HD 3000, Windows XP SP3, Windows 10 x64, Nexus 4 and v5.1.1.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пт янв 16, 2015 6:41 pm 
Не в сети
профессор

Зарегистрирован: Чт авг 05, 2010 2:36 pm
Сообщений: 462
Откуда: Донецк
Благодарил (а): 42 раз.
Поблагодарили: 11 раз.
по vst плагинам, вроде тутор
второй тутор по плагам и всему что связано с vst и dsp
рассылка по звуковому dsp

какой-то архив с вкусняхами

В последнем сейчас зароюсь, там примеры синтеза!!!

Добавил вторую ссылку с полезным сайтом.

PS: У кого завалялся delphi vst sdk 2.4 поделитесь пожалуйста, в сишном виде по версии 3.5 с классами непонятки, может в делфяшном коде лучьше разберусь где какие типы применяются и нахрена указатели.

_________________
PureBasic 5.60 X86, RfoBasic 90, Tinycc 0.97, Asus K54C Intel i7 2.7 ghz, 8 gb ddr3, Intel HD 3000, Windows XP SP3, Windows 10 x64, Nexus 4 and v5.1.1.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Вт мар 10, 2015 11:05 am 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Наконец то :D
Проблема со щелчками решена!
Ниже файл с кодом.


Вложения:
VST_Test_DX_PB.pb [9.36 KiB]
Скачиваний: 101
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Чт ноя 19, 2015 10:04 am 
Не в сети
ассистент

Зарегистрирован: Пт ноя 28, 2014 10:05 pm
Сообщений: 23
Откуда: Kharkov
Благодарил (а): 9 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Здравствуйте!
тема,смотрю,заглохла.....
Но,надеюсь,люди остались....
Там у Вас проскакивало что-то про ASIO - А VST вроде сделано через DX.
И тут проскакивало что-то пр использование именно эффектов -
меня очень интересует вопрос про ASIO и про использование эффектов.
не будет нарушением если я здесь продолжу общение по этим вопросам?
Да и многое другое хочу спросить по использованию библиотек bassmidi и bass,bassasio.
Самый первый - stream в bassmidi один,или можно создать несколько?
всмысле чтобы загрузить отдельные sf2 в каждый канал миди,повесить на разные stream и по разному обрабатывать эффектами, и ,неплохо бы,VST.
И потом возможно все это смикшировать в один stream и вывести через ASIO?
Заранее прошу прощения за ламерские вопросы.

_________________
Purebasic 5.24 LTS , Xeon E5410,
2Gb DDR3, Windows 7 , Debian 8


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пт ноя 20, 2015 10:48 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Привет!
Можно ВСт и чере АСИО выводить. Есть соответствующая либа для АСИО.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пн мар 28, 2016 1:26 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Всем привет!!!
Нужна помощь. Я немогу разобраться как это портировать :(

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#ifndef __AudioEffect__
#define __AudioEffect__
 
#include "AEffect.h"    // "c" interface
#include <string.h>;
 
class AEffEditor;
class AudioEffect;
 
// Needs to be defined by the audio effect and is
// called to create the audio effect object instance.
AudioEffect* createEffectInstance (audioMasterCallback audioMaster);
 
long dispatchEffectClass(AEffect *e,long opCode, long index, long value, void *ptr, float opt);
float getParameterClass(long index);
void setParameterClass(long index, float value);
void processClass(AEffect *e, float **inputs, float **outputs, long sampleFrames);
void processClassReplacing(AEffect *e, float **inputs, float **outputs, long sampleFrames);
 
class AudioEffect
{
friend class AEffEditor;
friend long dispatchEffectClass(AEffect *e, long opCode, long index, long value, void *ptr, float opt);
friend float getParameterClass(AEffect *e, long index);
friend void setParameterClass(AEffect *e, long index, float value);
friend void processClass(AEffect *e, float **inputs, float **outputs, long sampleFrames);
friend void processClassReplacing(AEffect *e, float **inputs, float **outputs, long sampleFrames);
 
public:
        AudioEffect(audioMasterCallback audioMaster, long numPrograms, long numParams);
        virtual ~AudioEffect();
 
        virtual void setParameter(long index, float value) {index = index; value = value;}
        virtual float getParameter(long index) {index = index; return 0;}
        virtual void setParameterAutomated(long index, float value);
 
        AEffect *|!REG3XP3!>getAeffect() {return &cEffect;}
        void setEditor(AEffEditor *editor)
        {       this->editor = editor;
                if(editor) cEffect.flags |= effFlagsHasEditor;
                else cEffect.flags &= ~effFlagsHasEditor;}
 
        // called from audio master
        virtual void process(float **inputs, float **outputs, long sampleFrames) = 0;
        virtual void processReplacing(float **inputs, float **outputs, long sampleFrames){inputs = inputs; outputs = outputs; sampleFrames = sampleFrames;}
        virtual long dispatcher(long opCode, long index, long value, void *ptr, float opt);
        virtual void open() {}
        virtual void close() {}
        virtual long getProgram() {return curProgram;}
        virtual void setProgram(long program) {curProgram = program;}   // don't forget to set curProgram
        virtual void setProgramName(char *name) {*name = 0;}                    // all following refer to curProgram
        virtual void getProgramName(char *name) {*name = 0;}
        virtual void getParameterLabel(long index, char *label) {index = index; *label = 0;}
        virtual void getParameterDisplay(long index, char *text) {index = index; *text = 0;}
        virtual void getParameterName(long index, char *text) {index = index; *text = 0;}
        virtual float getVu() {return 0;}
        virtual long getChunk(void** data, bool isPreset = false) {return 0;}   // returns byteSize
        virtual long setChunk(void* data, long byteSize, bool isPreset = false) {return 0;}
        virtual void setSampleRate(float sampleRate) {this->sampleRate = sampleRate;}
        virtual void setBlockSize(long blockSize) {this->blockSize = blockSize;}
        virtual void suspend() {}
        virtual void resume() {}
 
        // setup
        virtual void setUniqueID(long iD) {cEffect.uniqueID = iD;}              // must call this!
        virtual void setNumInputs(long inputs) {cEffect.numInputs = inputs;}
        virtual void setNumOutputs(long outputs) {cEffect.numOutputs = outputs;}
        virtual void hasVu(bool state = true);
        virtual void hasClip(bool state = true);
        virtual void canMono(bool state = true);
        virtual void canProcessReplacing(bool state = true);
        virtual void programsAreChunks(bool state = true);
        virtual void setRealtimeQualities(long qualities);
        virtual void setOfflineQualities(long qualities);
        virtual void setInitialDelay(long delay);
 
        // inquiry
        virtual float getSampleRate() {return sampleRate;}
        virtual long getBlockSize() {return blockSize;}
 
        // host communication
        virtual long getMasterVersion();
        virtual long getCurrentUniqueId();
        virtual void masterIdle();
        virtual bool isInputConnected(long input);
        virtual bool isOutputConnected(long output);
 
        // tools
        virtual void dB2string(float value, char *text);
        virtual void Hz2string(float samples, char *text);
        virtual void ms2string(float samples, char *text);
        virtual void float2string(float value, char *string);
        virtual void long2string(long value, char *text);
 
protected:     
        // members
        float sampleRate;
        AEffEditor *editor;
        audioMasterCallback audioMaster;
        long numPrograms;
        long numParams;
        long curProgram;
        long blockSize;
        AEffect cEffect;
};
 
#endif
 



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB