{"id":15639,"date":"2026-04-24T07:13:03","date_gmt":"2026-04-24T07:13:03","guid":{"rendered":"https:\/\/aipraktikum.com\/?page_id=15639"},"modified":"2026-05-06T10:43:02","modified_gmt":"2026-05-06T10:43:02","slug":"priora","status":"publish","type":"page","link":"https:\/\/aipraktikum.com\/en\/priora\/","title":{"rendered":"Priora"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"15639\" class=\"elementor elementor-15639\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-36faa69 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"36faa69\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-42ee80a\" data-id=\"42ee80a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-76ebbfc elementor-widget elementor-widget-html\" data-id=\"76ebbfc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"mednote-box\">\r\n  <h2>Priora MedNote AI<\/h2>\r\n  <p>Kliknite \u201cSnimi\u201d, izgovorite lije\u010dni\u010dki diktat i zatim kliknite \u201cStop\u201d.<\/p>\r\n\r\n  <div class=\"mednote-actions\">\r\n    <button id=\"startRecording\" type=\"button\">\ud83c\udf99\ufe0f Snimi diktat<\/button>\r\n    <button id=\"stopRecording\" type=\"button\" disabled>\u23f9\ufe0f Stop<\/button>\r\n  <\/div>\r\n\r\n  <p id=\"recordingStatus\">Status: spremno za snimanje<\/p>\r\n\r\n  <audio id=\"audioPlayback\" controls style=\"display:none; margin-top:20px; width:100%;\"><\/audio>\r\n\r\n  <br><br>\r\n\r\n  <a id=\"downloadAudio\" style=\"display:none;\" download=\"lijecnicki-diktat.wav\">\r\n    Preuzmi audio snimku\r\n  <\/a>\r\n\r\n  <div id=\"transcriptBox\" style=\"display:none;\">\r\n    <h3>Transkript<\/h3>\r\n    <pre id=\"transcriptText\"><\/pre>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .mednote-box {\r\n    max-width: 700px;\r\n    margin: 40px auto;\r\n    padding: 32px;\r\n    background: #EEFFFF;\r\n    border: 1px solid #5A95B5;\r\n    border-radius: 18px;\r\n    font-family: Arial, sans-serif;\r\n    color: #000000;\r\n    box-shadow: 0 10px 30px rgba(0,0,0,0.08);\r\n  }\r\n\r\n  .mednote-box h2 {\r\n    color: #000000;\r\n    margin-bottom: 10px;\r\n    font-size: 48px;\r\n    line-height: 1.05;\r\n  }\r\n\r\n  .mednote-box p {\r\n    font-size: 16px;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  .mednote-actions {\r\n    display: flex;\r\n    gap: 14px;\r\n    flex-wrap: wrap;\r\n    margin-top: 24px;\r\n    margin-bottom: 24px;\r\n  }\r\n\r\n  .mednote-box button {\r\n    background: #5A95B5;\r\n    color: #EEFFFF;\r\n    border: none;\r\n    border-radius: 10px;\r\n    padding: 14px 22px;\r\n    margin: 0;\r\n    font-size: 16px;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .mednote-box button:disabled {\r\n    background: #999;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  #downloadAudio {\r\n    display: inline-block;\r\n    background: #000000;\r\n    color: #EEFFFF;\r\n    padding: 12px 18px;\r\n    border-radius: 10px;\r\n    text-decoration: none;\r\n    font-weight: bold;\r\n  }\r\n\r\n  #recordingStatus {\r\n    margin-top: 20px;\r\n    font-weight: bold;\r\n  }\r\n\r\n  #transcriptBox {\r\n    margin-top: 24px;\r\n    padding: 20px;\r\n    background: #ffffff;\r\n    border: 1px solid #5A95B5;\r\n    border-radius: 14px;\r\n  }\r\n\r\n  #transcriptText {\r\n    white-space: pre-wrap;\r\n    font-family: Arial, sans-serif;\r\n    font-size: 15px;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  @media (max-width: 600px) {\r\n    .mednote-box {\r\n      margin: 20px auto;\r\n      padding: 24px;\r\n    }\r\n\r\n    .mednote-box h2 {\r\n      font-size: 42px;\r\n      line-height: 1.05;\r\n    }\r\n\r\n    .mednote-actions {\r\n      flex-direction: column;\r\n      gap: 18px;\r\n      align-items: flex-start;\r\n    }\r\n\r\n    .mednote-box button {\r\n      width: 100%;\r\n      max-width: 320px;\r\n      font-size: 18px;\r\n      padding: 18px 22px;\r\n    }\r\n\r\n    #recordingStatus {\r\n      margin-top: 28px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\nlet audioContext;\r\nlet mediaStream;\r\nlet source;\r\nlet processor;\r\nlet audioData = [];\r\nlet sampleRate;\r\n\r\nconst webhookUrl = \"https:\/\/n8n.aipraktikum.com\/webhook\/lijecnicki-diktat\";\r\n\r\nconst startButton = document.getElementById(\"startRecording\");\r\nconst stopButton = document.getElementById(\"stopRecording\");\r\nconst statusText = document.getElementById(\"recordingStatus\");\r\nconst audioPlayback = document.getElementById(\"audioPlayback\");\r\nconst downloadAudio = document.getElementById(\"downloadAudio\");\r\nconst transcriptBox = document.getElementById(\"transcriptBox\");\r\nconst transcriptText = document.getElementById(\"transcriptText\");\r\n\r\nstartButton.addEventListener(\"click\", async () => {\r\n  try {\r\n    mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n\r\n    audioContext = new (window.AudioContext || window.webkitAudioContext)();\r\n    sampleRate = audioContext.sampleRate;\r\n\r\n    source = audioContext.createMediaStreamSource(mediaStream);\r\n    processor = audioContext.createScriptProcessor(4096, 1, 1);\r\n\r\n    audioData = [];\r\n\r\n    processor.onaudioprocess = function(event) {\r\n      const input = event.inputBuffer.getChannelData(0);\r\n      audioData.push(new Float32Array(input));\r\n    };\r\n\r\n    source.connect(processor);\r\n    processor.connect(audioContext.destination);\r\n\r\n    statusText.textContent = \"Status: snimanje u tijeku...\";\r\n    startButton.disabled = true;\r\n    stopButton.disabled = false;\r\n    audioPlayback.style.display = \"none\";\r\n    downloadAudio.style.display = \"none\";\r\n    transcriptBox.style.display = \"none\";\r\n    transcriptText.textContent = \"\";\r\n\r\n  } catch (error) {\r\n    statusText.textContent = \"Gre\u0161ka: browser ne dopu\u0161ta pristup mikrofonu.\";\r\n    console.error(\"Microphone error:\", error);\r\n  }\r\n});\r\n\r\nstopButton.addEventListener(\"click\", async () => {\r\n  try {\r\n    if (processor) {\r\n      processor.disconnect();\r\n    }\r\n\r\n    if (source) {\r\n      source.disconnect();\r\n    }\r\n\r\n    if (mediaStream) {\r\n      mediaStream.getTracks().forEach(track => track.stop());\r\n    }\r\n\r\n    const wavBlob = encodeWAV(audioData, sampleRate);\r\n    const audioUrl = URL.createObjectURL(wavBlob);\r\n\r\n    audioPlayback.src = audioUrl;\r\n    audioPlayback.style.display = \"block\";\r\n\r\n    downloadAudio.href = audioUrl;\r\n    downloadAudio.download = \"lijecnicki-diktat.wav\";\r\n    downloadAudio.style.display = \"inline-block\";\r\n\r\n    statusText.textContent = \"Status: snimanje zavr\u0161eno. \u0160aljem audio u n8n...\";\r\n\r\n    startButton.disabled = true;\r\n    stopButton.disabled = true;\r\n\r\n    await sendAudioToN8n(wavBlob);\r\n\r\n    startButton.disabled = false;\r\n    stopButton.disabled = true;\r\n\r\n  } catch (error) {\r\n    console.error(\"Stop recording error:\", error);\r\n    statusText.textContent = \"Gre\u0161ka: snimanje nije pravilno zavr\u0161ilo.\";\r\n    startButton.disabled = false;\r\n    stopButton.disabled = true;\r\n  }\r\n});\r\n\r\nasync function sendAudioToN8n(wavBlob) {\r\n  const formData = new FormData();\r\n\r\n  formData.append(\"audio\", wavBlob, \"lijecnicki-diktat.wav\");\r\n\r\n  try {\r\n    const response = await fetch(webhookUrl, {\r\n      method: \"POST\",\r\n      body: formData\r\n    });\r\n\r\n    let result;\r\n\r\n    try {\r\n      result = await response.json();\r\n    } catch {\r\n      result = {\r\n        success: response.ok,\r\n        message: \"n8n je vratio odgovor, ali nije JSON.\"\r\n      };\r\n    }\r\n\r\n    console.log(\"n8n odgovor:\", result);\r\n\r\n    if (!response.ok) {\r\n      statusText.textContent = \"Gre\u0161ka: n8n webhook nije prihvatio audio.\";\r\n      return;\r\n    }\r\n\r\n    if (result.transcript) {\r\n      transcriptText.textContent = result.transcript;\r\n      transcriptBox.style.display = \"block\";\r\n    }\r\n\r\n    if (result.transcript || result.success) {\r\n      statusText.textContent = \"Status: transkript je uspje\u0161no napravljen.\";\r\n    } else {\r\n      statusText.textContent = \"Status: audio je poslan u n8n.\";\r\n    }\r\n\r\n  } catch (error) {\r\n    console.error(\"Gre\u0161ka kod slanja u n8n:\", error);\r\n    statusText.textContent = \"Gre\u0161ka: audio nije poslan u n8n.\";\r\n  }\r\n}\r\n\r\nfunction encodeWAV(samples, sampleRate) {\r\n  const mergedSamples = mergeBuffers(samples);\r\n  const buffer = new ArrayBuffer(44 + mergedSamples.length * 2);\r\n  const view = new DataView(buffer);\r\n\r\n  writeString(view, 0, \"RIFF\");\r\n  view.setUint32(4, 36 + mergedSamples.length * 2, true);\r\n  writeString(view, 8, \"WAVE\");\r\n  writeString(view, 12, \"fmt \");\r\n  view.setUint32(16, 16, true);\r\n  view.setUint16(20, 1, true);\r\n  view.setUint16(22, 1, true);\r\n  view.setUint32(24, sampleRate, true);\r\n  view.setUint32(28, sampleRate * 2, true);\r\n  view.setUint16(32, 2, true);\r\n  view.setUint16(34, 16, true);\r\n  writeString(view, 36, \"data\");\r\n  view.setUint32(40, mergedSamples.length * 2, true);\r\n\r\n  floatTo16BitPCM(view, 44, mergedSamples);\r\n\r\n  return new Blob([view], { type: \"audio\/wav\" });\r\n}\r\n\r\nfunction mergeBuffers(buffers) {\r\n  let length = 0;\r\n  buffers.forEach(buffer => length += buffer.length);\r\n\r\n  const result = new Float32Array(length);\r\n  let offset = 0;\r\n\r\n  buffers.forEach(buffer => {\r\n    result.set(buffer, offset);\r\n    offset += buffer.length;\r\n  });\r\n\r\n  return result;\r\n}\r\n\r\nfunction floatTo16BitPCM(output, offset, input) {\r\n  for (let i = 0; i < input.length; i++, offset += 2) {\r\n    let sample = Math.max(-1, Math.min(1, input[i]));\r\n    sample = sample < 0 ? sample * 0x8000 : sample * 0x7FFF;\r\n    output.setInt16(offset, sample, true);\r\n  }\r\n}\r\n\r\nfunction writeString(view, offset, string) {\r\n  for (let i = 0; i < string.length; i++) {\r\n    view.setUint8(offset + i, string.charCodeAt(i));\r\n  }\r\n}\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Priora MedNote AI Kliknite \u201cSnimi\u201d, izgovorite lije\u010dni\u010dki diktat i zatim kliknite \u201cStop\u201d. \ud83c\udf99\ufe0f Snimi diktat \u23f9\ufe0f Stop Status: spremno za snimanje Preuzmi audio snimku Transkript<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_yoast_wpseo_focuskw":"","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","footnotes":""},"class_list":["post-15639","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Priora - AI PRAKTIKUM<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/aipraktikum.com\/en\/priora\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Priora - AI PRAKTIKUM\" \/>\n<meta property=\"og:description\" content=\"Priora MedNote AI Kliknite \u201cSnimi\u201d, izgovorite lije\u010dni\u010dki diktat i zatim kliknite \u201cStop\u201d. \ud83c\udf99\ufe0f Snimi diktat \u23f9\ufe0f Stop Status: spremno za snimanje Preuzmi audio snimku Transkript\" \/>\n<meta property=\"og:url\" content=\"https:\/\/aipraktikum.com\/en\/priora\/\" \/>\n<meta property=\"og:site_name\" content=\"AI PRAKTIKUM\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-06T10:43:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/aipraktikum.com\/wp-content\/uploads\/2025\/10\/AI-PRAKTIKUM-social.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/priora\\\/\",\"url\":\"https:\\\/\\\/aipraktikum.com\\\/priora\\\/\",\"name\":\"Priora - AI PRAKTIKUM\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/#website\"},\"datePublished\":\"2026-04-24T07:13:03+00:00\",\"dateModified\":\"2026-05-06T10:43:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/priora\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/aipraktikum.com\\\/priora\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/priora\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"AI\",\"item\":\"https:\\\/\\\/aipraktikum.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Priora\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/#website\",\"url\":\"https:\\\/\\\/aipraktikum.com\\\/\",\"name\":\"AI PRAKTIKUM\",\"description\":\"Umjetna inteligencija za poduzetnike\",\"publisher\":{\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/aipraktikum.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/#organization\",\"name\":\"AI PRAKTIKUM\",\"url\":\"https:\\\/\\\/aipraktikum.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/aipraktikum.com\\\/2026\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/cropped-AI-PRAKTIKUM-512-x-512-px.png\",\"contentUrl\":\"https:\\\/\\\/aipraktikum.com\\\/2026\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/cropped-AI-PRAKTIKUM-512-x-512-px.png\",\"width\":512,\"height\":512,\"caption\":\"AI PRAKTIKUM\"},\"image\":{\"@id\":\"https:\\\/\\\/aipraktikum.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.tiktok.com\\\/@darkobilandzic\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Priora - AI PRAKTIKUM","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/aipraktikum.com\/en\/priora\/","og_locale":"en_GB","og_type":"article","og_title":"Priora - AI PRAKTIKUM","og_description":"Priora MedNote AI Kliknite \u201cSnimi\u201d, izgovorite lije\u010dni\u010dki diktat i zatim kliknite \u201cStop\u201d. \ud83c\udf99\ufe0f Snimi diktat \u23f9\ufe0f Stop Status: spremno za snimanje Preuzmi audio snimku Transkript","og_url":"https:\/\/aipraktikum.com\/en\/priora\/","og_site_name":"AI PRAKTIKUM","article_modified_time":"2026-05-06T10:43:02+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/aipraktikum.com\/wp-content\/uploads\/2025\/10\/AI-PRAKTIKUM-social.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/aipraktikum.com\/priora\/","url":"https:\/\/aipraktikum.com\/priora\/","name":"Priora - AI PRAKTIKUM","isPartOf":{"@id":"https:\/\/aipraktikum.com\/#website"},"datePublished":"2026-04-24T07:13:03+00:00","dateModified":"2026-05-06T10:43:02+00:00","breadcrumb":{"@id":"https:\/\/aipraktikum.com\/priora\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/aipraktikum.com\/priora\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/aipraktikum.com\/priora\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"AI","item":"https:\/\/aipraktikum.com\/"},{"@type":"ListItem","position":2,"name":"Priora"}]},{"@type":"WebSite","@id":"https:\/\/aipraktikum.com\/#website","url":"https:\/\/aipraktikum.com\/","name":"AI PRAKTIKUM","description":"Umjetna inteligencija za poduzetnike","publisher":{"@id":"https:\/\/aipraktikum.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/aipraktikum.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/aipraktikum.com\/#organization","name":"AI PRAKTIKUM","url":"https:\/\/aipraktikum.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/aipraktikum.com\/#\/schema\/logo\/image\/","url":"https:\/\/aipraktikum.com\/2026\/wp-content\/uploads\/2025\/10\/cropped-AI-PRAKTIKUM-512-x-512-px.png","contentUrl":"https:\/\/aipraktikum.com\/2026\/wp-content\/uploads\/2025\/10\/cropped-AI-PRAKTIKUM-512-x-512-px.png","width":512,"height":512,"caption":"AI PRAKTIKUM"},"image":{"@id":"https:\/\/aipraktikum.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.tiktok.com\/@darkobilandzic"]}]}},"_links":{"self":[{"href":"https:\/\/aipraktikum.com\/en\/wp-json\/wp\/v2\/pages\/15639","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aipraktikum.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aipraktikum.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aipraktikum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aipraktikum.com\/en\/wp-json\/wp\/v2\/comments?post=15639"}],"version-history":[{"count":16,"href":"https:\/\/aipraktikum.com\/en\/wp-json\/wp\/v2\/pages\/15639\/revisions"}],"predecessor-version":[{"id":15673,"href":"https:\/\/aipraktikum.com\/en\/wp-json\/wp\/v2\/pages\/15639\/revisions\/15673"}],"wp:attachment":[{"href":"https:\/\/aipraktikum.com\/en\/wp-json\/wp\/v2\/media?parent=15639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}