Exemplo n.º 1
0
void ImportJson(COMMAND_T* pCommand)
{
   char* selectedFile = BrowseForFiles("Select Auphonic JSON file", 0, 0, false, "Auphonic JSON (*.json)\0*.json\0All Files (*.*)\0*.*\0");
   if((selectedFile != 0) && (strlen(selectedFile) > 0))
   {
      std::string rawData = GetFileContents(std::string(selectedFile));
      std::string errorMessage;
      json11::Json cookedData = json11::Json::parse(rawData, errorMessage);
      if(errorMessage.empty() == true)
      {
         std::map<std::string, std::set<ActivityItem>> trackActivities;
         
         const json11::Json statistics = cookedData["statistics"];
         for(const json11::Json& track : statistics["tracks"].array_items())
         {
            const std::string trackId = track["identifier"].string_value();
            if(trackId.empty() == false)
            {
               std::set<ActivityItem> activities;
               for(const json11::Json& activity : track["activity"].array_items())
               {
                  const double begin = activity.array_items()[0].number_value();
                  const double end = activity.array_items()[1].number_value();
                  activities.insert(ActivityItem(begin, end));
               }
               
               if(activities.empty() == false)
               {
                  trackActivities.insert(std::map<std::string, std::set<ActivityItem>>::value_type(trackId, activities));
               }
               else
               {
                  ErrorMessage("No activities for track");
               }
            }
            else
            {
               ErrorMessage("Found invalid track identifier");
            }
         }

         std::map<std::string, MediaTrack*> reaperTracks;
         for(int i = 0; i < GetNumTracks(); ++i)
         {
            MediaTrack* reaperTrack = GetTrack(0, i);
            AssertTrue(reaperTrack != 0);
            std::string trackName = MediaTrack_GetStringProperty(reaperTrack, "P_NAME");
            reaperTracks[trackName] = reaperTrack;
         }
         
         for(const std::map<std::string, std::set<ActivityItem>>::value_type& trackActivity : trackActivities)
         {
            const std::string& trackId = trackActivity.first;
            std::map<std::string, MediaTrack*>::iterator trackIterator = reaperTracks.find(trackId);
            if(trackIterator != reaperTracks.end())
            {
               MediaTrack* reaperTrack = trackIterator->second;
               if(reaperTrack != 0)
               {
                  MediaItem* reaperItem = AddMediaItemToTrack(reaperTrack);
                  if(reaperItem != 0)
                  {
                     const std::set<ActivityItem>& activities = trackActivity.second;
                     for(const ActivityItem& activity : activities)
                     {
                        SetMediaItemPosition(reaperItem, activity.Begin(), true);
                        SetMediaItemLength(reaperItem, activity.Duration(), true);
                        MediaItem_SetStringProperty(reaperItem, "P_NOTES", trackId);
                        
//                        int color = MediaTrack_GetIntProperty(reaperTrack, "I_CUSTOMCOLOR");
                        int color = MediaTrack_GetProperty<int>(reaperTrack, "I_CUSTOMCOLOR");
                        
                        char buffer[4096] = {0};
                        sprintf(buffer, "%s (%.2fs)", trackId.c_str(), activity.Duration());
                        const char* activityLabel = AllocCopyString(buffer);

                        AddProjectMarker2(0, true, activity.Begin(), activity.End(), activityLabel, 0, color);
                     }
                  }
                  else
                  {
                     ErrorMessage("Failed to add activity");
                  }
               }
               else
               {
                  ErrorMessage("Failed to find track");
               }
            }
         }
      }
      else
      {
         ErrorMessage(errorMessage.c_str());
      }
   }
}
Exemplo n.º 2
0
void InsertMarker(COMMAND_T* _ct)
{
	AddProjectMarker2(NULL, false, (int)_ct->user && (GetPlayStateEx(NULL)&1) ? GetPlayPositionEx(NULL) : GetCursorPositionEx(NULL), 0.0, "", -1, 0);
	UpdateTimeline();
	Undo_OnStateChangeEx2(NULL, SWS_CMD_SHORTNAME(_ct), UNDO_STATE_MISCCFG, -1);
}
Exemplo n.º 3
0
void MarkerItem::AddToProject()
{
	AddProjectMarker2(NULL, m_bReg, m_dPos, m_dRegEnd, GetName(), m_num, m_iColor ? m_iColor | 0x1000000 : 0);
}