*/}}
Browse Source

Size problem fixed

YimingWu 3 months ago
parent
commit
e7c9f95171
3 changed files with 26 additions and 10 deletions
  1. 25 8
      la_audio.c
  2. 0 1
      la_data.c
  3. 1 1
      la_interface.h

+ 25 - 8
la_audio.c

@@ -291,7 +291,10 @@ void laui_ScopeNode(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn
 }
 
 void IDN_OutputInit(laSynthNodeOutput* n, int NoCreate){
-    if(NoCreate){ return; }
+    if(NoCreate){
+        laAudioChannel* outchannel = laGetAudioChannel(SSTR(n->SendName));
+        if(outchannel) memAssignRef(n,&n->Send,outchannel);
+    return; }
     n->In=laCreateInSocket("IN",0); strSafeSet(&n->Base.Name,"Output");
 }
 void IDN_OutputDestroy(laSynthNodeOutput* n){
@@ -496,11 +499,17 @@ void laui_QuantizeNode(laUiList *uil, laPropPack *This, laPropPack *Extra, laCol
 }
 
 
-void laRebuildSynthGraphs(){
-    if(MAIN.Audio->CurrentSynth){
+void laRebuildSynthGraphs(int current_only){
+    if(MAIN.Audio->CurrentSynth && current_only){
         laSpinLock(&MAIN.Audio->CurrentSynth->Lock);
         laRebuildPageEval(MAIN.Audio->CurrentSynth->Page);
         laSpinUnlock(&MAIN.Audio->CurrentSynth->Lock);
+    }else{
+        for(laSynth* s=MAIN.Audio->Synths.pFirst;s;s=s->Item.pNext){
+            laSpinLock(&s->Lock);
+            laRebuildPageEval(s->Page);
+            laSpinUnlock(&s->Lock);
+        }
     }
 }
 int laEvalSynthGraphs(){
@@ -629,7 +638,7 @@ void laRemoveSynth(laSynth* ss){ if(!ss) return;
         laSynth* nss=ss->Item.pNext?ss->Item.pNext:ss->Item.pPrev;
         memAssignRef(MAIN.Audio,&MAIN.Audio->CurrentSynth,nss);
     }laNotifyInstanceUsers(ss);
-    while(ss->Page->Racks.pFirst){ laDestroyRack(ss->Page->Racks.pFirst); } memLeave(ss->Page); ss->Page=0;
+    while(ss->Page->Racks.pFirst){ laDestroyRack(ss->Page->Racks.pFirst); } memLeave(ss->Page); //ss->Page=0;
     lstRemoveItem(&MAIN.Audio->Synths,ss);
     laSpinDestroy(&ss->Lock);
     memLeave(ss);
@@ -665,7 +674,9 @@ int OPINV_laSynthPlay(laOperator* a, laEvent* e){
     char* str=strGetArgumentString(a->ExtraInstructionsP, "mode");
     int play=0; if(str && strSame(str,"PLAY")) play=1;
     if(play){ MAIN.Audio->AudioAny=1; }
-    
+
+    laRebuildPageEval(ss->Page);
+
     laSpinLock(&ss->Lock); ss->Playing=play; laSpinUnlock(&ss->Lock);
     
     ma_device_start(&MAIN.Audio->AudioDevice); laNotifyInstanceUsers(ss);
@@ -796,6 +807,7 @@ void* laget_FirstAudioChannel(void* unused1, void* unused2){
 }
 void lapost_Synth(laSynth* ss){
     laSpinInit(&ss->Lock);
+    laRebuildPageEval(ss->Page);
 }
 int laget_SynthPlaying(laSynth* ss){
     int play=0;
@@ -813,6 +825,11 @@ void laset_OutputSendChannel(laSynthNodeOutput* n,laAudioChannel* ac){
     laAudioChannel* outchannel = laGetAudioChannel(SSTR(n->SendName));
     memAssignRef(n,&n->Send,outchannel);
 }
+void laset_OutputSendName(laSynthNodeOutput* n,char* name){
+    strSafeSet(&n->SendName,name);
+    laAudioChannel* outchannel = laGetAudioChannel(name);
+    memAssignRef(n,&n->Send,outchannel);
+}
 void laset_QuantizeEnabledKeys(laSynthNodeQuantize* n, int index, int val_UNUSED){
     if(n->EnabledBits[index] & 0x1){ n->EnabledBits[index]=0; }
     else{ n->EnabledBits[index]=1; }
@@ -823,7 +840,7 @@ void laset_AudioChannelMove(laAudioChannel* ac, int move){
 }
 
 void la_AudioPreFrame(){
-    if(MAIN.GraphNeedsRebuild){ laRebuildSynthGraphs(); }
+    if(MAIN.GraphNeedsRebuild){ laRebuildSynthGraphs(1); }
     
     int anyaudio=0;
     laSpinLock(&MAIN.Audio->AudioStatusLock);
@@ -893,7 +910,7 @@ void laInitAudio(){
     laAddFloatProperty(pc,"amp","Amptitude","Amptitude of the output signal",0,0,0,10,0,0.1,0,0,offsetof(laSynthNodeVCA,Amp),0,0,0,0,0,0,0,0,0,0,0);
     laAddFloatProperty(pc,"influence","Influence","Influence of the modulating signal",LA_WIDGET_KNOB,0,0,1,-1,0.01,0,0,offsetof(laSynthNodeVCA,rInfluence),0,0,0,0,0,0,0,0,0,0,0);
 
-    pc=laAddPropertyContainer("la_node_synth_noise", "Noise Node", "Noise node",0,laui_NoiseNode,sizeof(laSynthNodeFM),lapost_Node,0,1);
+    pc=laAddPropertyContainer("la_node_synth_noise", "Noise Node", "Noise node",0,laui_NoiseNode,sizeof(laSynthNodeNoise),lapost_Node,0,1);
     LA_PC_IDN_NOISE=pc; laPropContainerExtraFunctions(pc,0,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
     laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
     laAddSubGroup(pc,"out_white", "White","White noise output","la_out_socket",0,0,0,offsetof(laSynthNodeNoise,OutWhite),0,0,0,0,0,0,0,LA_UDF_SINGLE);
@@ -928,7 +945,7 @@ void laInitAudio(){
     LA_PC_IDN_OUTPUT=pc; laPropContainerExtraFunctions(pc,0,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
     laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
     laAddSubGroup(pc,"in", "Input","Input sound","la_in_socket",0,0,0,offsetof(laSynthNodeOutput,In),0,0,0,0,0,0,0,LA_UDF_SINGLE);
-    laAddStringProperty(pc,"send_channel_name","Channel Name","Channel name of this send target",0,0,0,0,1,offsetof(laSynthNodeOutput,SendName),0,0,0,0,0);
+    laAddStringProperty(pc,"send_channel_name","Channel Name","Channel name of this send target",0,0,0,0,1,offsetof(laSynthNodeOutput,SendName),0,0,laset_OutputSendName,0,0);
     laAddSubGroup(pc,"send_channel_selector","Send","Send to channel","la_audio_channel",0,0,0,-1,laget_FirstAudioChannel,0,laget_ListNext,laset_OutputSendChannel,0,0,0,LA_UDF_REFER|LA_UDF_IGNORE);
 
     pc=laAddPropertyContainer("la_node_synth_envelope", "Envelope Node", "Sound envelope",0,laui_EnvelopeNode,sizeof(laSynthNodeEnvelope),lapost_Node,0,1);

+ 0 - 1
la_data.c

@@ -2949,7 +2949,6 @@ void la_AddPostReadNode(void *Instance, laContainerPostReadFunc Func){
     laUDFPostRead *upr = lstAppendPointerSized(&MAIN.PostReadNodes, Instance, sizeof(laUDFPostRead));
     upr->Instance = Instance;
     upr->Func = Func;
-    lstAppendItem(&MAIN.PostReadNodes, upr);
 }
 laUDFContentNode *la_AppendUDFContentNode(laUDFContentInstance *Parent, laPropPack *ForMe, u64bit FileSeek){
     char FullPath[256]={0};

+ 1 - 1
la_interface.h

@@ -1924,7 +1924,7 @@ laAudioChannel* laGetAudioChannel(char* Name);
 
 void la_AudioPreFrame();
 
-void laRebuildSynthGraphs();
+void laRebuildSynthGraphs(int current_only);
 void laInitAudio();
 void laDeinitAudio();