{"id":598,"date":"2012-10-05T13:36:29","date_gmt":"2012-10-05T13:36:29","guid":{"rendered":"http:\/\/garysieling.com\/blog\/?p=598"},"modified":"2012-10-05T13:36:29","modified_gmt":"2012-10-05T13:36:29","slug":"marking-time-in-r","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/","title":{"rendered":"Marking time in R"},"content":{"rendered":"<p>In a previous example, I showed how to find the onset of a <a href=\"http:\/\/garysieling.com\/blog\/onset-detection-with-r\">single drumbeat<\/a>, as well <a href=\"http:\/\/garysieling.com\/blog\/detecting-pitches-in-music-with-r\">as the chord at an instant<\/a>. <\/p>\n<p>This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in audio, smooth the input, then find the most significant sudden increases in loudness (other techniques measure energy or pitch).<\/p>\n<p>Each of the above steps has many choices- for instance there are different ways to smooth audio. I used a rolling mean, but one paper I read recommended a low pass filter. <\/p>\n<p>The greatest challenge is to control false positives and false negatives to an acceptable level. One heuristic improvement to the technique below might filter out sudden sounds when the music volume is low, preventing a cough registering as a beat in a quiet section of an orchestral piece.<\/p>\n<pre>\nlibrary(sound)\nlibrary(zoo)\n\nfourbeats<-loadSample(\"out\\\\fourbeats.wav\")\nfiftyms<-sample$rate\/200\ntenms<-fiftyms \/ 5\nplot(1:length(fourbeats$sound), \n     abs(fourbeats$sound), type=\"l\")\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/172.104.26.128\/wp-content\/uploads\/2012\/10\/fourbeats-1.png\" alt=\"\" title=\"fourbeats-1\" width=\"554\" height=\"426\" class=\"alignnone size-full wp-image-600\" srcset=\"https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-1.png 554w, https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-1-300x231.png 300w\" sizes=\"(max-width: 554px) 100vw, 554px\" \/><\/p>\n<pre>\nx<-fourbeats$sound[1,]\nax<-abs(x)\nsx<-rollmean(ax, 100)\nplot(1:length(x), ax, type=\"l\")\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/172.104.26.128\/wp-content\/uploads\/2012\/10\/fourbeats-2.png\" alt=\"\" title=\"fourbeats-2\" width=\"533\" height=\"432\" class=\"alignnone size-full wp-image-601\" srcset=\"https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-2.png 533w, https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-2-300x243.png 300w\" sizes=\"(max-width: 533px) 100vw, 533px\" \/><\/p>\n<pre>\nplot(1:length(sx), sx, type=\"l\")\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/172.104.26.128\/wp-content\/uploads\/2012\/10\/fourbeats-3.png\" alt=\"\" title=\"fourbeats-3\" width=\"512\" height=\"423\" class=\"alignnone size-full wp-image-602\" srcset=\"https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-3.png 512w, https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-3-300x248.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/p>\n<pre>\ndx<-firstOrderDiff(x, 50)\nplot(1:length(dx), dx, type=\"l\")\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/172.104.26.128\/wp-content\/uploads\/2012\/10\/fourbeats-4.png\" alt=\"\" title=\"fourbeats-4\" width=\"549\" height=\"387\" class=\"alignnone size-full wp-image-603\" srcset=\"https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-4.png 549w, https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-4-300x211.png 300w\" sizes=\"(max-width: 549px) 100vw, 549px\" \/><\/p>\n<p>Now, we look for local maxima, in overlapping 50ms sections. These overlap to allow the detection of instances where the beat occurs right on the dividing line.<\/p>\n<pre>\ncandidates<-rollapply(dx, fiftyms, \n   which.max, align=\"left\", by=fiftyms\/2)\nix<-(0:(length(candidates)-1))*fiftyms\/2 + candidates\n\nfor (i in 1:length(ix)) { \n  if (dx[ix[i]] >= 0.01) { \n    abline(v=(i-1)*fiftyms*2, col=\"red\") \n  } \n}\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/172.104.26.128\/wp-content\/uploads\/2012\/10\/fourbeats-5.png\" alt=\"\" title=\"fourbeats-5\" width=\"524\" height=\"410\" class=\"alignnone size-full wp-image-604\" srcset=\"https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-5.png 524w, https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-5-300x235.png 300w\" sizes=\"(max-width: 524px) 100vw, 524px\" \/><\/p>\n<p>As you can see above, this technique detects several local maxima in the area where the beat occurs, even in spite of looking within 25ms intervals. An improvement to this technique would limit the number of candidates in a given time period based on the knowledge that the frequency of musical beats is typically limited to what a musician can play (although this is not true of electronic music).<\/p>\n<p>If we cheat a little, we can also set a minimum level for what is considered to be a beat - in a more realistic scenario this would likely be a ratio to the surrounding music. This filtering parameter would also provide a good hook to link this technique to a AI training algorithm.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/172.104.26.128\/wp-content\/uploads\/2012\/10\/fourbeats-6.png\" alt=\"\" title=\"fourbeats-6\" width=\"516\" height=\"389\" class=\"alignnone size-full wp-image-605\" srcset=\"https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-6.png 516w, https:\/\/www.garysieling.com\/blog\/wp-content\/uploads\/2012\/10\/fourbeats-6-300x226.png 300w\" sizes=\"(max-width: 516px) 100vw, 516px\" \/><\/p>\n<p><b>See also:<\/b> <a href=\"http:\/\/garysieling.com\/blog\/book-review-r-cookbook\">R Cookbook Review<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Marking time in R&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[4,27],"tags":[178,450,585,586],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Marking time in R - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2012-10-05T13:36:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2012-10-05T13:36:29+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Marking time in R - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#blogposting\",\"name\":\"Marking time in R - Gary Sieling\",\"headline\":\"Marking time in R\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/172.104.26.128\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/fourbeats-1.png\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#articleImage\"},\"datePublished\":\"2012-10-05T13:36:29+00:00\",\"dateModified\":\"2012-10-05T13:36:29+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#webpage\"},\"articleSection\":\"Code Examples, Statistics, dsp, R, wav to midi, wav2midi\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"position\":2,\"name\":\"Code Examples\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#listItem\",\"name\":\"Marking time in R\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#listItem\",\"position\":3,\"name\":\"Marking time in R\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/\",\"name\":\"Marking time in R - Gary Sieling\",\"description\":\"In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/marking-time-in-r\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2012-10-05T13:36:29+00:00\",\"dateModified\":\"2012-10-05T13:36:29+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Marking time in R - Gary Sieling","description":"In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in","canonical_url":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#blogposting","name":"Marking time in R - Gary Sieling","headline":"Marking time in R","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"image":{"@type":"ImageObject","url":"http:\/\/172.104.26.128\/wp-content\/uploads\/2012\/10\/fourbeats-1.png","@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#articleImage"},"datePublished":"2012-10-05T13:36:29+00:00","dateModified":"2012-10-05T13:36:29+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#webpage"},"articleSection":"Code Examples, Statistics, dsp, R, wav to midi, wav2midi"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","position":2,"name":"Code Examples","item":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#listItem","name":"Marking time in R"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#listItem","position":3,"name":"Marking time in R","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/","name":"Marking time in R - Gary Sieling","description":"In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2012-10-05T13:36:29+00:00","dateModified":"2012-10-05T13:36:29+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Marking time in R - Gary Sieling","og:description":"In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in","og:url":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/","article:published_time":"2012-10-05T13:36:29+00:00","article:modified_time":"2012-10-05T13:36:29+00:00","twitter:card":"summary_large_image","twitter:title":"Marking time in R - Gary Sieling","twitter:description":"In a previous example, I showed how to find the onset of a single drumbeat, as well as the chord at an instant. This new example extends the method to detect the onset of several notes in a row, and demonstrates some interesting challenges involved in musical transcription. The general process is to read in"},"aioseo_meta_data":{"post_id":"598","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 16:10:02","updated":"2026-07-06 00:48:50","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/\" title=\"Code Examples\">Code Examples<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tMarking time in R\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Code Examples","link":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/"},{"label":"Marking time in R","link":"https:\/\/www.garysieling.com\/blog\/marking-time-in-r\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/598"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=598"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/598\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=598"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=598"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}