MCPcopy Create free account
hub / github.com/heygen-com/hyperframes / parseAudioElements

Function parseAudioElements

packages/engine/src/services/audioMixer.ts:172–227  ·  view source on GitHub ↗
(html: string)

Source from the content-addressed store, hash-verified

170}
171
172export function parseAudioElements(html: string): AudioElement[] {
173 const elements: AudioElement[] = [];
174 const { document } = parseHTML(unwrapTemplate(html));
175
176 // Parse <audio> elements
177 const audioEls = document.querySelectorAll("audio[id][src]");
178 for (const el of audioEls) {
179 const id = el.getAttribute("id");
180 const src = el.getAttribute("src");
181 if (!id || !src) continue;
182
183 const startAttr = el.getAttribute("data-start");
184 const endAttr = el.getAttribute("data-end");
185 const mediaStartAttr = el.getAttribute("data-media-start");
186 const layerAttr = el.getAttribute("data-layer");
187 const volumeAttr = el.getAttribute("data-volume");
188
189 elements.push({
190 id,
191 src,
192 start: startAttr ? parseFloat(startAttr) : 0,
193 end: endAttr ? parseFloat(endAttr) : 0,
194 mediaStart: mediaStartAttr ? parseFloat(mediaStartAttr) : 0,
195 layer: layerAttr ? parseInt(layerAttr) : 0,
196 volume: volumeAttr ? parseFloat(volumeAttr) : 1.0,
197 type: "audio",
198 });
199 }
200
201 // Parse <video> elements with data-has-audio="true"
202 const videoEls = document.querySelectorAll('video[id][src][data-has-audio="true"]');
203 for (const el of videoEls) {
204 const id = el.getAttribute("id");
205 const src = el.getAttribute("src");
206 if (!id || !src) continue;
207
208 const startAttr = el.getAttribute("data-start");
209 const endAttr = el.getAttribute("data-end");
210 const mediaStartAttr = el.getAttribute("data-media-start");
211 const layerAttr = el.getAttribute("data-layer");
212 const volumeAttr = el.getAttribute("data-volume");
213
214 elements.push({
215 id: `${id}-audio`,
216 src,
217 start: startAttr ? parseFloat(startAttr) : 0,
218 end: endAttr ? parseFloat(endAttr) : 0,
219 mediaStart: mediaStartAttr ? parseFloat(mediaStartAttr) : 0,
220 layer: layerAttr ? parseInt(layerAttr) : 0,
221 volume: volumeAttr ? parseFloat(volumeAttr) : 1.0,
222 type: "video",
223 });
224 }
225
226 return elements;
227}
228
229async function extractAudioFromVideo(

Callers 3

parseSubCompositionsFunction · 0.90
compileForRenderFunction · 0.90
recompileWithResolutionsFunction · 0.90

Calls 2

unwrapTemplateFunction · 0.85
getAttributeMethod · 0.65

Tested by

no test coverage detected