Нормальное поведение edit cursor и play cursor

michail03

New Member
3 Июл 2015
2
0
1
Я извиняюсь, если такая тема уже была.
Есть следующие поведения курсоров:
1). При нажатии "Stop" play cursor останавливается и прыгает к edit cursor.
2). При нажатии "Pause" play cursor останавливается и К НЕМУ прыгает edit cursor.

В большинстве DAW эти два курсора являются независимыми. То есть, пункт 1 работает как в Рипере, но пункт 2 отличается - edit cursor не прыгает за play cursorom. Таким образом пользователь может визуально воспринимать начало и конец воспроизведения и выделить его, если надо.

Вопрос - есть ли способ добиться такого поведения курсоров в Рипере? Желательно без костылей. Я облазил все настройки и ничего похожего не нашел. Это мелочь, но она очень раздражает.
Чтобы было совсем понятно, прикладываю гифку с примером из старенького Adobe Audition, как это должно происходить.
[DOUBLEPOST=1436862620,1436862494][/DOUBLEPOST]Также, если интересно, вот здесь обсуждают что то подобное с 2010 года
http://forum.cockos.com/showthread.php?p=1545440
 

Вложения

  • audition.gif
    audition.gif
    338,9 KB · Просмотры: 258
Код:
playstate = reaper.GetPlayState()
play_pos = reaper.GetPlayPosition()
valOut = reaper.GetExtState("playBack_state", "Pause")
if valOut ~= nil then
  pause_pos = tonumber(valOut)
end 


-- if stopped press play

if playstate == 0 then 
  reaper.Main_OnCommandEx(reaper.NamedCommandLookup("_BR_SAVE_CURSOR_POS_SLOT_1"), 0, 0)
  reaper.OnPlayButton()
  reaper.DeleteExtState("playBack_state", "Pause", true)    
end

-- if playing from start press pause

if playstate == 1 and pause_pos == nil then
    reaper.CSurf_OnPause()
    play_pos2 = reaper.GetPlayPosition()   
    reaper.SetExtState("playBack_state", "Pause", play_pos2, true)
end

-- if playing from pause press stop
if playstate == 1 and pause_pos ~= nil and play_pos > pause_pos then
  reaper.CSurf_OnStop() 
  reaper.Main_OnCommandEx(reaper.NamedCommandLookup("_BR_RESTORE_CURSOR_POS_SLOT_1"), 0, 0)
  reaper.DeleteExtState("playBack", "State", true)
   
end
 
-- if paused press play
if playstate == 2 then 
  pause_pos2 = reaper.GetCursorPositionEx(0)
  reaper.SetExtState("playBack_state", "Pause", pause_pos2, true)
  reaper.OnPlayButton()
end

Vg7ExbK.gif
 
Чтобы было совсем понятно, прикладываю гифку с примером из старенького Adobe Audition, как это должно происходить.
А почему оно должно происходить так?
Хотите запомнить для каких-то дальнейших манипуляций (например выделения) положение курсора - ставьте маркер - аж M нажать нужно.
 
маркер
Код:
playstate = reaper.GetPlayState()
play_pos = reaper.GetPlayPosition()
pause_pos1 = reaper.GetCursorPositionEx(0)
marker_name = "Start"
valOut = reaper.GetExtState("playBack_state", "Pause")
if valOut ~= nil then 
  pause_pos = tonumber(valOut)
end  

------------------------------------
-- if stopped press play
markers_t = {}
if playstate == 0 then
  retval, num_markersOut, num_regionsOut = reaper.CountProjectMarkers(0)
    if num_markersOut ~= nil then
      for j = 1, num_markersOut, 1 do
        retval, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut, colorOut = reaper.EnumProjectMarkers3(0, j-1)
        if posOut <= pause_pos1 then
         table.insert(markers_t, posOut)
        end 
      end  
    end  
   
  if markers_t == nil then new_marker_id = 1 
   else 
    if #markers_t  == 1 then new_marker_id = #markers_t + 1 else new_marker_id = #markers_t + 1 end
    if #markers_t == 0 then new_marker_id = 0 else if markers_t[1] > pause_pos1 then new_marker_id = 2 end end
  end
   
      --reaper.ShowConsoleMsg(previous_marker_id)
     
  reaper.AddProjectMarker(0, false, pause_pos1, pause_pos1, marker_name, new_marker_id)  
  reaper.Main_OnCommandEx(reaper.NamedCommandLookup("_BR_SAVE_CURSOR_POS_SLOT_1"), 0, 0) 
  reaper.OnPlayButton()
  reaper.DeleteExtState("playBack_state", "Pause", true)    
end

------------------------------------
-- if playing from start press pause

if playstate == 1 and pause_pos == nil then
    reaper.CSurf_OnPause()      
    reaper.SetExtState("playBack_state", "Pause", play_pos, true)
end

------------------------------------
-- if playing from pause press stop
if playstate == 1 and pause_pos ~= nil and play_pos > pause_pos then
  reaper.CSurf_OnStop()  
  reaper.Main_OnCommandEx(reaper.NamedCommandLookup("_BR_RESTORE_CURSOR_POS_SLOT_1"), 0, 0)
  reaper.DeleteExtState("playBack", "State", true)
  pause_pos2 = reaper.GetCursorPositionEx(0)
  retval, num_markersOut, num_regionsOut = reaper.CountProjectMarkers(0)
  if num_markersOut ~= nil then
    for i = 1, num_markersOut, 1 do
      retval, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut, colorOut = reaper.EnumProjectMarkers3(0, i-1)
      if nameOut == marker_name then
        reaper.DeleteProjectMarkerByIndex(0, i-1) 
      end  
    end
  end
end

------------------------------------  
-- if paused press play
if playstate == 2 then    
  reaper.SetExtState("playBack_state", "Pause", pause_pos1, true)
  reaper.OnPlayButton()
end
pKrlCc6.gif
 
  • Like
Реакции: Strannicom

Сейчас просматривают