2013-12-10 3 views
2

Я хотел бы разделить автогенерированный лист CUE, содержащий много песен, в группы с общей длиной до 74 или, возможно, 80 минут для записи на компакт-диски. Список песен длительностей появляется в CUE листа в следующем формате:Присвоение списка таймингов CD-DA в векторе emacs calc

REM FILE-DECODED-SIZE 03:55:72 
REM FILE-DECODED-SIZE 02:18:59 
REM FILE-DECODED-SIZE 04:21:43 
REM FILE-DECODED-SIZE 02:15:26 
REM FILE-DECODED-SIZE 04:56:72 
REM FILE-DECODED-SIZE 03:37:30 
REM FILE-DECODED-SIZE 05:02:73 
... 

Они находятся в формате MM: SS: FF - минуты, секунды, и Compact Disc Digital Audio (CD-DA) кадров, с 75 кадров CD-DA для второго. Я хотел бы взять прямоугольник некоторых из этих таймингов в вектор Calc в Emacs, используя M-x calc-grab-rectangle, а затем суммировать их для создания окончательного номера MM: SS: FF (где MM < 99). Это потребует создания нового «типа» в emacs Calc или автоматического преобразования в один из встроенных типов? Есть ли связанный код для Calc для обработки такого рода синтаксического анализа и преобразования типов?

Или минимально, я хотел бы иметь возможность захватить некоторые числа ММ: СС в виде прямоугольника и автоматически преобразовать их в вектор emacs Calc 'HMS forms', поэтому я могу просто суммировать минуты и секунд, используя встроенные функции.

Спасибо.

ответ

2

Следующие сюсюкать код собирает время Кия строки в текущем буфере, начиная с точкой, и помещает их на calc стеков:

(require 'cl) 
(require 'calc) 

(defun cue-collect-times() 
    "Collect times in cue-format starting at point and put them in hms format on the calc stack." 
    (save-excursion 
    (calc-push-list 
    (loop while (re-search-forward "^REM FILE-DECODED-SIZE \\([0-9]+\\):\\([0-9]+\\):" nil t) 
     collect (list 'hms 0 (string-to-number (match-string 1)) (string-to-number (match-string 2))))))) 

я пренебрегайте кадры. Надеюсь, все в порядке.

Вы также можете поместить время как вектор в стеке:

(defun cue-collect-times-as-vector() 
    "Collect times in cue-format starting at point into a calc vector and put it on the stack." 
    (save-excursion 
    (calc-push-list (list (append '(vec) 
    (loop while (re-search-forward "^REM FILE-DECODED-SIZE \\([0-9]+\\):\\([0-9]+\\):" nil t) 
     collect (list 'hms 0 (string-to-number (match-string 1)) (string-to-number (match-string 2))))))))) 
+0

Ну, это было быстро. Очень ценится. – user117529

Смежные вопросы