Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Wie Ton zu Text mit Zeiten wird

Nach dieser Lektion: Ich kann Abtastwerte in Fenster schneiden und eine Abschrift mit Zeiten zu Zeilen mit Zeitmarken verbinden.

Lektion, 75 Min.7 BefehleLab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Eine Sprachnachricht wird zu Wörtern mit Zeiten

Sie schicken eine Sprachnachricht, und eine App zeigt, was Sie gesagt haben, mit einer Zeit neben jedem Teil. Die App hat nie eine Stimme gehört. Sie bekam eine lange Liste von Zahlen.

Diese Lektion zeigt, wie Ton zu Zahlen wird, wie man sie zerschneidet und wie die Wörter mit Zeiten zurückkommen.

Am Ende dieser Lektion

Notiz

Ich kann Abtastwerte in Fenster schneiden und eine Abschrift mit Zeiten zu Zeilen mit Zeitmarken verbinden.

Schlüsselwörter

BegriffWas er bedeutet
Abtastwertein Messwert dafür, wie laut der Ton in einem Moment ist
Abtastratewie viele Abtastwerte je Sekunde genommen werden
Fensterein kurzer Abschnitt von Abtastwerten, der als ein Stück gilt
Schrittum wie viele Werte das nächste Fenster nach dem letzten beginnt
Abschriftdie gesprochenen Wörter mit der Zeit jedes Teils

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ton ist eine Liste von Abtastwerten

Ein Mikrofon misst immer wieder, wie laut die Luft ist. Jede Messung ist ein Abtastwert, eine Zahl, die positiv oder negativ sein kann.

Die Abtastrate sagt, wie viele Abtastwerte je Sekunde genommen werden. Für Sprache sind oft 16.000 je Sekunde üblich. Hier gelten 100, damit die Listen kurz bleiben.

Wie lang eine Liste von Abtastwerten ist

Rate (je Sekunde)SekundenAbtastwerte
1001100
1003300
16.000116.000
16.000232.000

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Fenster zerschneiden die Abtastwerte

Ein Modell liest nicht einen Abtastwert nach dem anderen. Die Werte werden in Fenster geschnitten, kurze Abschnitte gleicher Länge. Der Schritt sagt, wie weit nach dem letzten das nächste Fenster beginnt.

Bei Fenstern von 10 und Schritt 10 überlappen sie nicht. Bei Schritt 5 schon. Der Start eines Fensters ist seine Nummer mal Schritt, geteilt durch die Rate.

Ein häufiger Fehler

Warnung

Viele berechnen den Start eines Fensters aus der Fensterlänge. Das nächste Fenster beginnt aber einen Schritt später und nicht ein Fenster später. Überlappen die Fenster, sind beide Zahlen verschieden. Nehmen Sie immer den Schritt.

Eine Abschrift hat Zeiten

Ein Erkenner liefert Teile: einige Wörter, einen Start und ein Ende in Millisekunden. Teile, die dicht aufeinander folgen, gehören in eine Zeile.

Verbinden Sie einen Teil mit der Zeile davor, wenn die Lücke dazwischen unter einer Grenze liegt. Schreiben Sie dann jede Zeile mit einer Zeitmarke wie [00:03.0].

Modell-Helfer schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const basis = process.env.AI_URL || \"http://ai:4000\";' '// Die Token einer Antwort oder null, wenn sie keine nennt.' 'function zaehlen(daten, name) {' '  return daten.usage && typeof daten.usage[name] === \"number\" ? daten.usage[name] : null;' '}' > model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Modell-Helfer schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function fragen(nachrichten, probe, max) {' '  try {' '    const res = await fetch(basis + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: nachrichten, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"Status \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, eingabe: zaehlen(d, \"prompt_tokens\"), ausgabe: zaehlen(d, \"completion_tokens\"), aufgezeichnet: false };' '  } catch (fehler) {' '    console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' '    return { text: probe, eingabe: null, ausgabe: null, aufgezeichnet: true };' '  }' '}' 'module.exports = { fragen };' >> model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ton-Skript schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const RATE = 100;' 'const werte = [];' 'for (let i = 0; i < 80; i++) {' '  const stark = i >= 20 && i < 60 ? 40 : 2;' '  werte.push((i % 2 === 0 ? stark : -stark) + (i % 5));' '}' 'const teile = [' '  { start: 200, ende: 900, text: \"Machen Sie\" },' '  { start: 950, ende: 1400, text: \"das Licht\" },' '  { start: 3000, ende: 3600, text: \"aus\" },' '];' > ton4.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ton-Skript schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function fenster(w, groesse, schritt) {' '  const aus = [];' '  for (let i = 0; i + groesse <= w.length; i += schritt) aus.push(w.slice(i, i + groesse));' '  return aus;' '}' 'function laut(f) {' '  let summe = 0;' '  for (const v of f) summe += Math.abs(v);' '  return Math.floor(summe / f.length);' '}' >> ton4.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ton-Skript schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function marke(ms) {' '  const m = Math.floor(ms / 60000);' '  const s = Math.floor((ms % 60000) / 1000);' '  const z = Math.floor((ms % 1000) / 100);' '  return \"[\" + String(m).padStart(2, \"0\") + \":\" + String(s).padStart(2, \"0\") + \".\" + z + \"]\";' '}' 'function verbinden(liste, luecke) {' '  const zeilen = [];' '  for (const t of liste) {' '    const letzte = zeilen[zeilen.length - 1];' '    if (letzte && t.start - letzte.ende < luecke) { letzte.text += \" \" + t.text; letzte.ende = t.ende; }' '    else zeilen.push({ start: t.start, ende: t.ende, text: t.text });' '  }' '  return zeilen.map(function (z) { return marke(z.start) + \" \" + z.text; });' '}' >> ton4.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ton-Skript schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const fs = fenster(werte, 10, 10);' '  const pegel = fs.map(laut);' '  console.log(\"Fenster \" + fs.length + \", je \" + (10 * 1000 / RATE) + \" ms\");' '  console.log(\"Lautstärke \" + pegel.join(\" \"));' '  console.log(\"Sprache ab Fenster \" + pegel.findIndex(function (v) { return v >= 10; }));' '  const zeilen = verbinden(teile, 300);' '  for (const z of zeilen) console.log(z);' '  const frage = \"Schreiben Sie eine kurze Bildunterschrift für einen Clip mit diesen Zeilen: \" + zeilen.join(\" \");' '  const antwort = await fragen([{ role: \"user\", content: frage }], \"Jemand bittet darum, das Licht auszumachen.\", 30);' '  console.log(\"Antwort: \" + antwort.text);' '}' 'main();' >> ton4.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Ton zerlegen, die Wörter verbinden

Befehl
docker exec -w /home/node/project agent node ton4.js

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Zeilen, die der Run druckt

ZeileWas sie zeigt
Fenster 8, je 100 ms80 Abtastwerte in Fenstern von 10 bei 100 je Sekunde
Lautstärke 2 2 40 40 40 40 2 2Die mittleren vier Fenster sind laut
Sprache ab Fenster 2Fenster 2 beginnt bei 200 ms
[00:00.2] Machen Sie das LichtZwei Teile verbunden, ihre Lücke war 50 ms
[00:03.0] ausDieser Teil kam 1600 ms später und steht allein

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Über dieses Lab und seinen Quellcode: Lab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.