purebasic.info

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

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




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Вт авг 26, 2014 7:46 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
/*struct AEffect
{
        long magic;                     // must be kEffectMagic ('VstP')
        long (VSTCALLBACK *dispatcher)(AEffect *effect, long opCode, long index, long value,
                void *ptr, float opt);
        void (VSTCALLBACK *process)(AEffect *effect, float **inputs, float **outputs, long sampleframes);
        void (VSTCALLBACK *setParameter)(AEffect *effect, long index, float parameter);
        float (VSTCALLBACK *getParameter)(AEffect *effect, long index);
 
        long numPrograms;
        long numParams;         // all programs are assumed to have numParams parameters
        long numInputs;         //
        long numOutputs;        //
        long flags;                     // see constants
        long resvd1;            // reserved, must be 0
        long resvd2;            // reserved, must be 0
        long initialDelay;      // for algorithms which need input in the first place
        long realQualities;     // number of realtime qualities (0: realtime)
        long offQualities;      // number of offline qualities (0: realtime only)
        float ioRatio;          // input samplerate to output samplerate ratio, not used yet
        void *object;           // for class access (see AudioEffect.hpp), MUST be 0 else!
        void *user;                     // user access
        long uniqueID;          // pls choose 4 character as unique as possible.
                                                // this is used to identify an effect for save+load
        long version;           //
        void (VSTCALLBACK *processReplacing)(AEffect *effect, float **inputs, float **outputs, long sampleframes);
        char future[60];        // pls zero
};*/



Код:
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
CompilerIf Defined(AEffect,#PB_Structure) = 0
  Structure AEffect
    magic.l                 ;long magic;         // must be kEffectMagic ('VstP')
    ptrDispatcher.l          ;long (VSTCALLBACK *dispatcher)(AEffect *effect, long opcode, long index, long Value,void *ptr, float opt);
   
    ptrProcess.l             ;.l ;void (VSTCALLBACK *process)(AEffect *effect, float **inputs, float **outputs, long sampleframes);
    ptrSetParameter.l        ;.l ;void (VSTCALLBACK *setParameter)(AEffect *effect, long index, float parameter);
    ptrGetParameter.f        ;.f ;float (VSTCALLBACK *getParameter)(AEffect *effect, long index);
   
    numPrograms.l           ;long numPrograms;
    numParams.l             ;long numParams;      // all programs are assumed to have numParams parameters
    numInputs.l             ;long numInputs;      //
    numOutputs.l            ;long numOutputs;   //
   
    flags.l                 ;long flags;         // see constants
    resvd1.l                ;long resvd1;      // reserved, must be 0
    resvd2.l                ;long resvd2;      // reserved, must be 0
    initialDelay.l          ;long initialDelay;   // for algorithms which need input in the first place
    realQualities.l         ;long realQualities;   // number of realtime qualities (0: realtime)
    offQualities.l          ;long offQualities;   // number of offline qualities (0: realtime only)
    ioRatio.f               ;float ioRatio;      // input samplerate to output samplerate ratio, not used yet
    *object                 ;void *object;      // for class access (see AudioEffect.hpp), MUST be 0 else!
    *user                   ;void *user;         // user access
    uniqueID.l              ;long uniqueID;      // pls choose 4 character as unique as possible.
                            ; // this is used To identify an effect For save+load
    version.l               ;long version;      //
    ptrProcessReplacing.l    ;void (VSTCALLBACK *processReplacing)(AEffect *effect, float **inputs, float **outputs, long sampleframes);
    arr.u[60]               ; char future[60];   // pls zero
EndStructure
CompilerEndIf



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Вт авг 26, 2014 8:48 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11077
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Должно быть так.
Код:
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
Prototype.l pDispatcher(*effect, opcode.l, index.l, Value.l, *ptr, opt.f)
Prototype pProcess(*effect, *inputs.Float, *outputs.Float, sampleframes.l)
Prototype pSetParameter(*effect, index.l, parameter.f)
Prototype.f pGetParameter(*effect,AEffect, index.l)
Prototype pProcessReplacing(*effect, *inputs.Float, *outputs.Float, sampleframesl)
 
CompilerIf Defined(AEffect,#PB_Structure) = 0
  Structure AEffect
    magic.l                 ;long magic;         // must be kEffectMagic ('VstP')
    Dispatcher.pDispatcher         ;long (VSTCALLBACK *dispatcher)(AEffect *effect, long opcode, long index, long Value,void *ptr, float opt);
   
    Process.pProcess             ;.l ;void (VSTCALLBACK *process)(AEffect *effect, float **inputs, float **outputs, long sampleframes);
    SetParameter.pSetParameter        ;.l ;void (VSTCALLBACK *setParameter)(AEffect *effect, long index, float parameter);
    GetParameter.pGetParameter        ;.f ;float (VSTCALLBACK *getParameter)(AEffect *effect, long index);
   
    numPrograms.l           ;long numPrograms;
    numParams.l             ;long numParams;      // all programs are assumed to have numParams parameters
    numInputs.l             ;long numInputs;      //
    numOutputs.l            ;long numOutputs;   //
   
    flags.l                 ;long flags;         // see constants
    resvd1.l                ;long resvd1;      // reserved, must be 0
    resvd2.l                ;long resvd2;      // reserved, must be 0
    initialDelay.l          ;long initialDelay;   // for algorithms which need input in the first place
    realQualities.l         ;long realQualities;   // number of realtime qualities (0: realtime)
    offQualities.l          ;long offQualities;   // number of offline qualities (0: realtime only)
    ioRatio.f               ;float ioRatio;      // input samplerate to output samplerate ratio, not used yet
    *object                 ;void *object;      // for class access (see AudioEffect.hpp), MUST be 0 else!
    *user                   ;void *user;         // user access
    uniqueID.l              ;long uniqueID;      // pls choose 4 character as unique as possible.
                            ; // this is used To identify an effect For save+load
    version.l               ;long version;      //
    ProcessReplacing.pProcessReplacing   ;void (VSTCALLBACK *processReplacing)(AEffect *effect, float **inputs, float **outputs, long sampleframes);
    arr.a[60]               ; char future[60];   // pls zero
  EndStructure
CompilerEndIf


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


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

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


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

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


Вложения:
VST_PB.pbi [16.52 KiB]
Скачиваний: 193
AEffectX.pbi [22.6 KiB]
Скачиваний: 188
AEffect.pbi [6.43 KiB]
Скачиваний: 221
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Вт сен 09, 2014 8:58 am 
Не в сети
профессор

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


Вложения:
VST_Test.pb [10.96 KiB]
Скачиваний: 186
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пн сен 15, 2014 12:12 pm 
Не в сети
профессор

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

Код:
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
#DSBLOCK_ENTIREBUFFER = $2
#DSBLOCK_FROMWRITECURSOR=$1
 
IncludeFile "VST_PB.pbi"
 
Structure DSBUFFERDESC
 dwSize.l          
 dwFlags.l          
 dwBufferBytes.l    
 dwReserved.l      
 *lpwfxFormat      
 guid3DAlgorithm.GUID
EndStructure
 
Global *m.Word, dsound.IDirectSound8, dsb.IDirectSoundBuffer, *effect.AEffect
 
Global bloksize.l;=512;
Global samplerate.f;=44100;
 
Global BPM.d=120
Debug BPM
 
Procedure HostInit();                   /* initialize to sensible values     */
samplerate = 44100
bloksize = 512;
vstTimeInfo\samplePos = 0.0;
vstTimeInfo\sampleRate = samplerate;
vstTimeInfo\nanoSeconds = 0.0;
vstTimeInfo\ppqPos = 0.0;
vstTimeInfo\tempo = BPM;
vstTimeInfo\barStartPos = 0.0;
vstTimeInfo\cycleStartPos = 0.0;
vstTimeInfo\cycleEndPos = 0.0;
vstTimeInfo\timeSigNumerator = 4;
vstTimeInfo\timeSigDenominator = 4;
vstTimeInfo\smpteOffset = 0;
vstTimeInfo\smpteFrameRate = 1;         // 0:24, 1:25, 2:29.97, 3:30, 4:29.97 df, 5:30 df
vstTimeInfo\samplesToNextClock = 0;
vstTimeInfo\flags =0; #kVstTransportChanged|#kVstTransportPlaying;
EndProcedure
 
 
; открываем библы
If OpenLibrary(0, "dsound.dll") And OpenLibrary(1, OpenFileRequester("vst","c:\Program Files\VstPlugins\","VST (*.dll)|*.dll",0))
 
  ; // Wave device And VST buffer cosntants
#T_FORMAT           =#WAVE_FORMAT_PCM
#T_SAMPLERATE       =44100
#T_CHANNELS         =2
#T_BITS             =16
#T_BLOCKALIGN       =(#T_CHANNELS*| style="color: #924B72;">#T_BITS/8); // 2*16/8 = 4
#T_BYTESPERSEC      =(#T_SAMPLERATE*| style="color: #924B72;">#T_BLOCKALIGN)
 
;// Total buffer size For 1 second worth of playback:
#T_WAVBUFSIZE       =(#T_SAMPLERATE*| style="color: #924B72;">#T_BLOCKALIGN)*10
 
#T_UPDATESPERSEC    =10; // Which gives me 10 playback "pages"
#T_BLOCKSIZE        =(#T_SAMPLERATE/#T_UPDATESPERSEC); // 4410 samples
#T_DELAY            =(1000/#T_UPDATESPERSEC); // 100 ms timer delay
 
#NUM_BUFFERS = 5
 
Global wavFormat.WAVEFORMATEX
wavFormat\wFormatTag      = #T_FORMAT;
wavFormat\nChannels       = #T_CHANNELS;
wavFormat\nSamplesPerSec  = #T_SAMPLERATE;
wavFormat\wBitsPerSample  = #T_BITS;
wavFormat\nBlockAlign     = #T_BLOCKALIGN;(wavFormat\wBitsPerSample * wavFormat\nChannels / 8);
wavFormat\nAvgBytesPerSec = #T_BYTESPERSEC;wavFormat\nSamplesPerSec * wavFormat\nBlockAlign;
wavFormat\cbSize = 0;SizeOf(wavFormat);
Else
  MessageRequester("Error","Can't open VST plugin ",0)
  End
EndIf  
  HostInit()
;   If
  ;Debug "LEN>"+Str(@len)
  hwnd = OpenWindow(0,0,0,80,80,"Sound", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  hwnd2=OpenWindow(2,0,0,800,600,"vst", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CallFunction(0,"DirectSoundCreate8",0,@dsound,0)
  dsound\SetCooperativeLevel(hwnd,1)
 
  desc.DSBUFFERDESC\dwSize = SizeOf(DSBUFFERDESC)
  desc\dwBufferBytes = #T_WAVBUFSIZE
  desc\lpwfxFormat = @wavFormat
  dsound\CreateSoundBuffer(@desc,@dsb,0)
 
  sampleFrames = #T_WAVBUFSIZE / 4
 
  Debug sampleFrames
 
  main=Get_Main(1)
  If main
    *myAEffect.AEffect = CallCFunctionFast(main, @VST_CallBack())
  Else
    Debug "Not VTS"
    End
  EndIf
 
  *myAEffect\Dispatcher(*myAEffect, #effOpen,0,1,#Null, 0.0)
 
  *myAEffect\Dispatcher(*myAEffect, #effMainsChanged,0,0,#Null, 0.0)
 
  *myAEffect\Dispatcher(*myAEffect, #effSetSampleRate,0,0,#Null, samplerate)
 
  *myAEffect\Dispatcher(*myAEffect, #effSetBlockSize,0,sampleFrames,#Null, 0.0)
 
  *myAEffect\Dispatcher(*myAEffect, #effMainsChanged,0,1,#Null, 0.0)
 
  *myAEffect\Dispatcher(*myAEffect, #effEditOpen,0,0,hwnd2, 0.0)
 
  ;**************************************************
; создание окна
VST_getRect(@ERect)
 
*myAEffect\Dispatcher(*myAEffect, #effEditGetRect, 0, 0, @ERect, 0.0)
Debug "res " +Str(res)
*rec.ERect=ERect
ResizeWindow(2,#PB_Ignore,#PB_Ignore,*rec\left+*rec\right,*rec\bottom+*rec\top)
 
 
 
    ;*************************************************************************************
   If *myAEffect\numInputs>0
    Global Dim in.l(*myAEffect\numInputs-1)
    Global Dim leftIn.f(sampleFrames-1)
    Global Dim rightIn.f(sampleFrames-1)
 
    If *myAEffect\numInputs>2
 
      in(0) = leftIn()
      in(1) = rightIn()
   
    EndIf
   EndIf
   
    ;**********************
 
    Global Dim out.l(*myAEffect\numOutputs-1)
    Global Dim leftOut.f(sampleFrames-1)
    Global Dim rightOut.f(sampleFrames-1)
   
    If *myAEffect\numOutputs>2
      For i=0 To 1  
        out(0+n) = leftOut()
        out(1+n) = rightOut()
        n=n+2
      Next
     
    Else
      out(0) = leftOut()
      out(1) = rightOut()
    EndIf
     
 
     #channels=2
  Structure SOUND_BUFFER ; channels, each 16 bit  
    channel.w[#channels]  
  EndStructure  
 Global *Buffer.SOUND_BUFFER
;     dsb\Play(0, 0, $1)
 
Procedure PlayThread(play)
dsb\Play(0, 0, $1)
  While play=0
    ;Debug "."
  dsb\Lock(0,0,@m,@len,0,0,#DSBLOCK_ENTIREBUFFER)
 
  *Buffer = m  
 
      If *myAEffect\flags & #effFlagsCanReplacing
        *myAEffect\ProcessReplacing(*myAEffect,@in(), @out(), sampleFrames)
      Else
        *myAEffect\Process(*myAEffect,@in(), @out(), sampleFrames)
      EndIf
      Debug *myAEffect
  For i = 0 To sampleFrames-1
    *Buffer\channel[0]=leftOut(i)* 32768.0
    *Buffer\channel[1]=rightOut(i)* 32768.0
    *Buffer + SizeOf(SOUND_BUFFER)  
  Next
  dsb\UnLock(m,len,0,0)
  Wend
EndProcedure    
;CreateThread(@PlayThread(),0)
 
 Repeat
   event=  WaitWindowEvent(1)  
   *myAEffect\Dispatcher(*myAEffect, #effEditIdle, 0, 0,#Null, 0.0)
  ;*************************************************************************************
;
  dsb\Lock(0,0,@m,@len,0,0,#DSBLOCK_ENTIREBUFFER)
 
  *Buffer = m
 
      If *myAEffect\flags & #effFlagsCanReplacing
        *myAEffect\ProcessReplacing(*myAEffect,@in(), @out(), sampleFrames)
      Else
        *myAEffect\Process(*myAEffect,@in(), @out(), sampleFrames)
      EndIf
;      
    For i = 0 To sampleFrames-1
      *Buffer\channel[0]=leftOut(i)* 32768.0
      *Buffer\channel[1]=rightOut(i)* 32768.0
      *Buffer + SizeOf(SOUND_BUFFER)  
    Next
    dsb\UnLock(m,len,0,0)
    dsb\Play(0, 0, 1)
 
 
Until event = #PB_Event_CloseWindow
 
 
*myAEffect\Dispatcher(*myAEffect, #effEditClose, 0, 0,#Null, 0.0)  
*myAEffect\Dispatcher(*myAEffect, #effClose,0,0,#Null, 0.0)
 
   
  dsb\Stop()
  dsb\Release()
  dsound\Release()
  CloseLibrary(1)
  CloseLibrary(0)



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

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
cherri123 писал(а):
#T_BLOCKALIGN =(#T_CHANNELS*| style="color: #924B72;">#T_BITS/8); // 2*16/8 = 4
#T_BYTESPERSEC =(#T_SAMPLERATE*| style="color: #924B72;">#T_BLOCKALIGN)

;// Total buffer size For 1 second worth of playback:
#T_WAVBUFSIZE =(#T_SAMPLERATE*| style="color: #924B72;">#T_BLOCKALIGN)*10

Что делают в коде куски html кода? :twisted: Вопрос больше к администрации.

cherri123, что-то не получилось ни один VSTi заставить работать. Которые запускаются не воспроизводят звук, а большая часть валится с ошибкой "не возможен доступ к памяти " в VST_PB.pbi на строке 376


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Пн сен 15, 2014 7:06 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11077
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
MrF писал(а):
Что делают в коде куски html кода?
Этот код на кибер форуме и тут, нормально подсвечивается.
Файлы отвечающие за подсветку, идентичны. Может что-то на сервере не настроено или отличаются версии php или PCRE.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


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

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 354
Благодарил (а): 13 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
MrF писал(а):
cherri123 писал(а):
#T_BLOCKALIGN =(#T_CHANNELS*#T_BITS/8); // 2*16/8 = 4
#T_BYTESPERSEC =(#T_SAMPLERATE*#T_BLOCKALIGN)

;// Total buffer size For 1 second worth of playback:
#T_WAVBUFSIZE =(#T_SAMPLERATE*#T_BLOCKALIGN)*10

Что делают в коде куски html кода? :twisted: Вопрос больше к администрации.

cherri123, что-то не получилось ни один VSTi заставить работать. Которые запускаются не воспроизводят звук, а большая часть валится с ошибкой "не возможен доступ к памяти " в VST_PB.pbi на строке 376


поправил в цитате


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

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


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

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
cherri123, не пойму, как аудио выход настроить?
cherri123 писал(а):
код с выводом звука нагрузка на проц большая?

У меня без звука от 40 до 50% грузит.


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

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

Процесс от 20% до 40% нагружает, незнаю только как определить два ядра проца задействованы или на одном висит прога.

_________________
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
СообщениеДобавлено: Ср сен 24, 2014 1:06 pm 
Не в сети
профессор

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Вт окт 07, 2014 3:21 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
VstEvent* ptrEvents=NULL;
   char* ptrEventBuffer=NULL;
   int nEvents=4;
 
 
      //create some MIDI messages to send to the plug if it is a synth or can
      //receive MIDI messages
 
      //create a block of appropriate size
      int pointersize=sizeof(VstEvent*);
      int bufferSize=sizeof(VstEvents)-(pointersize*2);
      bufferSize+=pointersize*(nEvents);
 
      //create the buffer
      ptrEventBuffer=new char[bufferSize+1];
 
      //now, create some memory for the events themselves
      VstMidiEvent* ptrEvents=new VstMidiEvent[nEvents];
      VstMidiEvent* ptrWrite=ptrEvents;
 
      //Create first event
      ptrWrite->type=kVstMidiType;
      ptrWrite->byteSize=24L;
      ptrWrite->deltaFrames=0L;
      ptrWrite->flags=0L;
      ptrWrite->noteLength=0L;
      ptrWrite->noteOffset=0L;
 
      ptrWrite->midiData[0]=(char)0x90;   //status & channel
      ptrWrite->midiData[1]=(char)0x3C;   //MIDI byte #2
      ptrWrite->midiData[2]=(char)0xFF;   //MIDI byte #3
      ptrWrite->midiData[3]=(char)0x00;   //MIDI byte #4 - blank
 
      ptrWrite->detune=0x00;
      ptrWrite->noteOffVelocity=0x00;
      ptrWrite->reserved1=0x00;
      ptrWrite->reserved2=0x00;
 
      //Create second event
      ptrWrite++;
      ptrWrite->type=kVstMidiType;
      ptrWrite->byteSize=24L;
      ptrWrite->deltaFrames=128L;
      ptrWrite->flags=0L;
      ptrWrite->noteLength=0L;
      ptrWrite->noteOffset=0L;
 
      ptrWrite->midiData[0]=(char)0x90;   //status & channel
      ptrWrite->midiData[1]=(char)0x3C;   //MIDI byte #2
      ptrWrite->midiData[2]=(char)0x00;   //MIDI byte #3
      ptrWrite->midiData[3]=(char)0x00;   //MIDI byte #4 - blank
 
      ptrWrite->detune=0x00;
      ptrWrite->noteOffVelocity=0x00;
      ptrWrite->reserved1=0x00;
      ptrWrite->reserved2=0x00;
 
      //Create third event
      ptrWrite++;
      ptrWrite->type=kVstMidiType;
      ptrWrite->byteSize=24L;
      ptrWrite->deltaFrames=256L;
      ptrWrite->flags=0L;
      ptrWrite->noteLength=0L;
      ptrWrite->noteOffset=0L;
 
      ptrWrite->midiData[0]=(char)0x90;   //status & channel
      ptrWrite->midiData[1]=(char)0x3C;   //MIDI byte #2
      ptrWrite->midiData[2]=(char)0xFF;   //MIDI byte #3
      ptrWrite->midiData[3]=(char)0x00;   //MIDI byte #4 - blank
 
      ptrWrite->detune=0x00;
      ptrWrite->noteOffVelocity=0x00;
      ptrWrite->reserved1=0x00;
      ptrWrite->reserved2=0x00;
 
      //Create fourth event
      ptrWrite++;
      ptrWrite->type=kVstMidiType;
      ptrWrite->byteSize=24L;
      ptrWrite->deltaFrames=384L;
      ptrWrite->flags=0L;
      ptrWrite->noteLength=0L;
      ptrWrite->noteOffset=0L;
 
      ptrWrite->midiData[0]=(char)0x90;   //status & channel
      ptrWrite->midiData[1]=(char)0x3C;   //MIDI byte #2
      ptrWrite->midiData[2]=(char)0x00;   //MIDI byte #3
      ptrWrite->midiData[3]=(char)0x00;   //MIDI byte #4 - blank
 
      ptrWrite->detune=0x00;
      ptrWrite->noteOffVelocity=0x00;
      ptrWrite->reserved1=0x00;
      ptrWrite->reserved2=0x00;
 
      //copy the addresses of our events into the eventlist structure
      VstEvents* ev=(VstEvents*)ptrEventBuffer;
      for (int i=0;i<nEvents;i++)
      {
         ev->events[i]=(VstEvent*)(ptrEvents+i);
      }
 
      //do the block header
      ev->numEvents=nEvents;
      ev->reserved=0L;
 
   }



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: BitBox
СообщениеДобавлено: Вт окт 07, 2014 3:32 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11077
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
В коде нет структур VstMidiEvent, VstEvents и др.
В этом коде только создание экземпляров структур и их заполнение.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


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

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


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

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


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

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