Browse Source

cmDspKr.c : Bug fix to support multiple sync points in the same

audio and/or midi file.

AmSync object is now reset as part of the printing operation.
master
kevin 10 years ago
parent
commit
79b1666c2c
1 changed files with 36 additions and 17 deletions
  1. 36
    17
      dsp/cmDspKr.c

+ 36
- 17
dsp/cmDspKr.c View File

1929
 {
1929
 {
1930
   cmDspVarArg_t args[] =
1930
   cmDspVarArg_t args[] =
1931
   {
1931
   {
1932
-    { "sel",    kSelAmId,    0, 0, kInDsvFl  | kTypeDsvMask,  "Any message to print" },
1932
+    { "sel",    kSelAmId,    0, 0, kInDsvFl  | kTypeDsvMask,  "Print and reset" },
1933
     { "afn",    kAFnAmId,    0, 0, kInDsvFl  | kStrzDsvFl, "Audio File name"},
1933
     { "afn",    kAFnAmId,    0, 0, kInDsvFl  | kStrzDsvFl, "Audio File name"},
1934
     { "asmp",   kASmpAmId,   0, 0, kInDsvFl  | kIntDsvFl,  "Audio sample index"},
1934
     { "asmp",   kASmpAmId,   0, 0, kInDsvFl  | kIntDsvFl,  "Audio sample index"},
1935
     { "mfn",    kMFnAmId,    0, 0, kInDsvFl  | kStrzDsvFl, "MIDI File name"},
1935
     { "mfn",    kMFnAmId,    0, 0, kInDsvFl  | kStrzDsvFl, "MIDI File name"},
2020
 
2020
 
2021
         for(i=0; i<p->arrayCnt; ++i)
2021
         for(i=0; i<p->arrayCnt; ++i)
2022
         {
2022
         {
2023
-          const cmDspAmSyncEntry_t* r = p->array + i;
2023
+          cmDspAmSyncEntry_t* r = p->array + i;
2024
 
2024
 
2025
           int dframes = r->mfi-r->afi; 
2025
           int dframes = r->mfi-r->afi; 
2026
           cmRptPrintf(ctx->rpt,"0x%x : %s %i %i - %s %i  %i : frm:%i smp:%i sec:%f\n",
2026
           cmRptPrintf(ctx->rpt,"0x%x : %s %i %i - %s %i  %i : frm:%i smp:%i sec:%f\n",
2027
             r->state,r->afn,r->asmp,r->afi,r->mfn,r->mid,r->mfi,dframes,dframes*fpc,dframes*fpc/srate);
2027
             r->state,r->afn,r->asmp,r->afi,r->mfn,r->mid,r->mfi,dframes,dframes*fpc,dframes*fpc/srate);
2028
+
2029
+          r->afi = cmInvalidIdx;
2030
+          r->mfi = cmInvalidIdx;
2031
+          r->state = 0;
2032
+
2028
         }   
2033
         }   
2034
+        p->acur = NULL;
2035
+        p->mcur = NULL;
2029
       }
2036
       }
2030
       break;
2037
       break;
2031
 
2038
 
2035
         for(i=0; i<p->arrayCnt; ++i)
2042
         for(i=0; i<p->arrayCnt; ++i)
2036
           if( strcmp(fn,p->array[i].afn) == 0 )
2043
           if( strcmp(fn,p->array[i].afn) == 0 )
2037
           {
2044
           {
2038
-            p->acur = p->array + i;
2039
             p->array[i].state = cmSetFlag(p->array[i].state,kAfnAmFl);
2045
             p->array[i].state = cmSetFlag(p->array[i].state,kAfnAmFl);
2040
-            break;
2046
+            p->acur = p->array + i;
2041
           }
2047
           }
2042
       }
2048
       }
2043
       break;
2049
       break;
2048
         for(i=0; i<p->arrayCnt; ++i)
2054
         for(i=0; i<p->arrayCnt; ++i)
2049
           if( strcmp(fn,p->array[i].mfn) == 0 )
2055
           if( strcmp(fn,p->array[i].mfn) == 0 )
2050
           {
2056
           {
2051
-            p->mcur = p->array + i;
2052
             p->array[i].state = cmSetFlag(p->array[i].state,kMfnAmFl);
2057
             p->array[i].state = cmSetFlag(p->array[i].state,kMfnAmFl);
2053
-            break;
2058
+            p->mcur = p->array + i;
2054
           }
2059
           }
2055
       }
2060
       }
2056
       break;
2061
       break;
2057
 
2062
 
2058
     case kASmpAmId:
2063
     case kASmpAmId:
2059
       {
2064
       {
2060
-        int v = cmDspInt(inst,kASmpAmId);
2061
-        if( p->acur != NULL && p->acur->asmp <= v )
2062
-        {
2063
-          p->acur->afi = ctx->cycleCnt;
2064
-          p->acur->state = cmSetFlag(p->acur->state,kAsmpAmFl);
2065
-        }
2065
+        int v = cmDspInt(inst,kASmpAmId); 
2066
+
2067
+        if( p->acur != NULL )
2068
+          for(i=0; i<p->arrayCnt; ++i)
2069
+          {
2070
+            cmDspAmSyncEntry_t* r = p->array + i;
2071
+            if( cmIsNotFlag(r->state,kAsmpAmFl)  && r->asmp <= v && strcmp(p->acur->afn,r->afn)==0  )
2072
+            {
2073
+              r->afi = ctx->cycleCnt;
2074
+              r->state = cmSetFlag(r->state,kAsmpAmFl);
2075
+              break;
2076
+            }
2077
+          }
2066
       }
2078
       }
2067
       break;
2079
       break;
2068
 
2080
 
2069
     case kMIdAmId:
2081
     case kMIdAmId:
2070
       {
2082
       {
2071
         int v = cmDspInt(inst,kMIdAmId);
2083
         int v = cmDspInt(inst,kMIdAmId);
2072
-        if( p->mcur != NULL && p->mcur->mid == v )
2073
-        {
2074
-          p->mcur->mfi = ctx->cycleCnt;
2075
-          p->mcur->state = cmSetFlag(p->mcur->state,kMidAmFl);
2076
-        }
2084
+        if( p->mcur != NULL )
2085
+          for(i=0; i<p->arrayCnt; ++i)
2086
+          {
2087
+            cmDspAmSyncEntry_t* r = p->array + i;
2088
+            if( cmIsNotFlag(r->state,kMidAmFl)  && r->mid == v && strcmp(p->mcur->mfn,r->mfn)==0  )
2089
+            {
2090
+              r->mfi = ctx->cycleCnt;
2091
+              r->state = cmSetFlag(r->state,kMidAmFl);          
2092
+              break;
2093
+            }
2094
+          }
2095
+
2077
       }
2096
       }
2078
       break;
2097
       break;
2079
 
2098
 

Loading…
Cancel
Save