עזרה לחיתוך קובץ אודיו

התותח

משתמש פעיל
הנדסת תוכנה
אשמח לעזרה לקוד באנגולר (ts) לפונקציה שחותכת קובץ אודיו לפי טווח של שניית ההתחלה ושניית סוף ולאחר מכן מורידה את הקובץ אודיו החתוך
 

ynigun

משתמש סופר מקצוען
הנדסת תוכנה
אשמח לעזרה לקוד באנגולר (ts) לפונקציה שחותכת קובץ אודיו לפי טווח של שניית ההתחלה ושניית סוף ולאחר מכן מורידה את הקובץ אודיו החתוך
ניסיתם להעזר בAI?
העתקתי את השאלה לקלוד וקיבלתי

בשמחה! הנה דוגמה לקוד באנגולר (TypeScript) שחותך קובץ אודיו לפי טווח של שניית התחלה ושניית סוף, ולאחר מכן מורידה את קובץ האודיו החתוך:


JavaScript:
import { Component } from '@angular/core';

@Component({
  selector: 'app-audio-cutter',
  template: `
    <input type="file" (change)="onFileSelected($event)" accept="audio/*">
    <div>
      <label>Start Time (seconds):</label>
      <input type="number" [(ngModel)]="startTime">
    </div>
    <div>
      <label>End Time (seconds):</label>
      <input type="number" [(ngModel)]="endTime">
    </div>
    <button (click)="cutAndDownloadAudio()">Cut and Download Audio</button>
  `
})
export class AudioCutterComponent {
  selectedFile: File | null = null;
  startTime: number = 0;
  endTime: number = 0;

  onFileSelected(event: Event) {
    const fileInput = event.target as HTMLInputElement;
    this.selectedFile = fileInput.files && fileInput.files[0];
  }

  cutAndDownloadAudio() {
    if (this.selectedFile) {
      const reader = new FileReader();
      reader.onload = () => {
        const audioContext = new AudioContext();
        audioContext.decodeAudioData(reader.result as ArrayBuffer).then((audioBuffer) => {
          const startOffset = this.startTime * audioBuffer.sampleRate;
          const endOffset = this.endTime * audioBuffer.sampleRate;
          const newAudioBuffer = audioContext.createBuffer(
            audioBuffer.numberOfChannels,
            endOffset - startOffset,
            audioBuffer.sampleRate
          );

          for (let channel = 0; channel < audioBuffer.numberOfChannels; channel++) {
            const sourceData = audioBuffer.getChannelData(channel);
            const newData = newAudioBuffer.getChannelData(channel);
            for (let i = 0; i < newData.length; i++) {
              newData[i] = sourceData[i + startOffset];
            }
          }

          const audioData = newAudioBuffer.getChannelData(0);
          const dataBlob = new Blob([this.convertToWav(audioData, newAudioBuffer.sampleRate)], { type: 'audio/wav' });
          const url = URL.createObjectURL(dataBlob);
          const link = document.createElement('a');
          link.href = url;
          link.download = 'cut_audio.wav';
          link.click();
        });
      };
      reader.readAsArrayBuffer(this.selectedFile);
    }
  }

  convertToWav(audioData: Float32Array, sampleRate: number): ArrayBuffer {
    const buffer = new ArrayBuffer(44 + audioData.length * 2);
    const view = new DataView(buffer);

    // RIFF chunk descriptor
    this.writeUTFBytes(view, 0, 'RIFF');
    view.setUint32(4, 36 + audioData.length * 2, true);
    this.writeUTFBytes(view, 8, 'WAVE');

    // FMT sub-chunk
    this.writeUTFBytes(view, 12, 'fmt ');
    view.setUint32(16, 16, true);
    view.setUint16(20, 1, true);
    view.setUint16(22, 1, true);
    view.setUint32(24, sampleRate, true);
    view.setUint32(28, sampleRate * 2, true);
    view.setUint16(32, 2, true);
    view.setUint16(34, 16, true);

    // Data sub-chunk
    this.writeUTFBytes(view, 36, 'data');
    view.setUint32(40, audioData.length * 2, true);

    // Write the audio samples
    let offset = 44;
    for (let i = 0; i < audioData.length; i++, offset += 2) {
      const s = Math.max(-1, Math.min(1, audioData[i]));
      view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true);
    }

    return buffer;
  }

  writeUTFBytes(view: DataView, offset: number, string: string) {
    for (let i = 0; i < string.length; i++) {
      view.setUint8(offset + i, string.charCodeAt(i));
    }
  }
}

הקוד הנ"ל מכיל את הרכיבים הבאים:

1. תבנית HTML עם קלט לבחירת קובץ אודיו, שדות להזנת זמן התחלה וזמן סיום (בשניות), וכפתור לחיתוך והורדת האודיו.

2. פונקציה `onFileSelected` שמתבצעת כאשר המשתמש בוחר קובץ אודיו. היא שומרת את הקובץ הנבחר במשתנה `selectedFile`.

3. פונקציה `cutAndDownloadAudio` שמתבצעת כאשר המשתמש לוחץ על הכפתור "Cut and Download Audio". היא קוראת את הקובץ הנבחר, מפענחת אותו באמצעות `AudioContext`, חותכת את האודיו לפי טווח הזמן שהוגדר, יוצרת חדש `ArrayBuffer` עם האודיו החתוך, הופכת אותו לפורמט WAV, ויוצרת קישור להורדה של הקובץ החתוך.

4. פונקציה `convertToWav` שמקבלת מערך של נתוני אודיו ומספר דגימות לשנייה (sample rate), ומחזירה `ArrayBuffer` המייצג את הנתונים בפורמט WAV.

5. פונקציה `writeUTFBytes` שמשמשת לכתיבת מחרוזות לתוך `DataView`.

שים לב שהקוד משתמש ב-Web Audio API כדי לבצע את חיתוך האודיו. ייתכן שתצטרך להתאים את הקוד לצרכים הספציפיים שלך ולטפל בשגיאות אפשריות.

כמו כן, הקוד דורש שהדפדפן יתמוך ב-Web Audio API כדי לפעול כראוי.
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קו

א הַלְלוּיָהּ הוֹדוּ לַיי כִּי טוֹב כִּי לְעוֹלָם חַסְדּוֹ:ב מִי יְמַלֵּל גְּבוּרוֹת יי יַשְׁמִיעַ כָּל תְּהִלָּתוֹ:ג אַשְׁרֵי שֹׁמְרֵי מִשְׁפָּט עֹשֵׂה צְדָקָה בְכָל עֵת:ד זָכְרֵנִי יי בִּרְצוֹן עַמֶּךָ פָּקְדֵנִי בִּישׁוּעָתֶךָ:ה לִרְאוֹת בְּטוֹבַת בְּחִירֶיךָ לִשְׂמֹחַ בְּשִׂמְחַת גּוֹיֶךָ לְהִתְהַלֵּל עִם נַחֲלָתֶךָ:ו חָטָאנוּ עִם אֲבוֹתֵינוּ הֶעֱוִינוּ הִרְשָׁעְנוּ:ז אֲבוֹתֵינוּ בְמִצְרַיִם לֹא הִשְׂכִּילוּ נִפְלְאוֹתֶיךָ לֹא זָכְרוּ אֶת רֹב חֲסָדֶיךָ וַיַּמְרוּ עַל יָם בְּיַם סוּף:ח וַיּוֹשִׁיעֵם לְמַעַן שְׁמוֹ לְהוֹדִיעַ אֶת גְּבוּרָתוֹ:ט וַיִּגְעַר בְּיַם סוּף וַיֶּחֱרָב וַיּוֹלִיכֵם בַּתְּהֹמוֹת כַּמִּדְבָּר:י וַיּוֹשִׁיעֵם מִיַּד שׂוֹנֵא וַיִּגְאָלֵם מִיַּד אוֹיֵב:יא וַיְכַסּוּ מַיִם צָרֵיהֶם אֶחָד מֵהֶם לֹא נוֹתָר:יב וַיַּאֲמִינוּ בִדְבָרָיו יָשִׁירוּ תְּהִלָּתוֹ:יג מִהֲרוּ שָׁכְחוּ מַעֲשָׂיו לֹא חִכּוּ לַעֲצָתוֹ:יד וַיִּתְאַוּוּ תַאֲוָה בַּמִּדְבָּר וַיְנַסּוּ אֵל בִּישִׁימוֹן:טו וַיִּתֵּן לָהֶם שֶׁאֱלָתָם וַיְשַׁלַּח רָזוֹן בְּנַפְשָׁם:טז וַיְקַנְאוּ לְמֹשֶׁה בַּמַּחֲנֶה לְאַהֲרֹן קְדוֹשׁ יי:יז תִּפְתַּח אֶרֶץ וַתִּבְלַע דָּתָן וַתְּכַס עַל עֲדַת אֲבִירָם:יח וַתִּבְעַר אֵשׁ בַּעֲדָתָם לֶהָבָה תְּלַהֵט רְשָׁעִים:יט יַעֲשׂוּ עֵגֶל בְּחֹרֵב וַיִּשְׁתַּחֲווּ לְמַסֵּכָה:כ וַיָּמִירוּ אֶת כְּבוֹדָם בְּתַבְנִית שׁוֹר אֹכֵל עֵשֶׂב:כא שָׁכְחוּ אֵל מוֹשִׁיעָם עֹשֶׂה גְדֹלוֹת בְּמִצְרָיִם:כב נִפְלָאוֹת בְּאֶרֶץ חָם נוֹרָאוֹת עַל יַם סוּף:כג וַיֹּאמֶר לְהַשְׁמִידָם לוּלֵי מֹשֶׁה בְחִירוֹ עָמַד בַּפֶּרֶץ לְפָנָיו לְהָשִׁיב חֲמָתוֹ מֵהַשְׁחִית:כד וַיִּמְאֲסוּ בְּאֶרֶץ חֶמְדָּה לֹא הֶאֱמִינוּ לִדְבָרוֹ:כה וַיֵּרָגְנוּ בְאָהֳלֵיהֶם לֹא שָׁמְעוּ בְּקוֹל יי:כו וַיִּשָּׂא יָדוֹ לָהֶם לְהַפִּיל אוֹתָם בַּמִּדְבָּר:כז וּלְהַפִּיל זַרְעָם בַּגּוֹיִם וּלְזָרוֹתָם בָּאֲרָצוֹת:כח וַיִּצָּמְדוּ לְבַעַל פְּעוֹר וַיֹּאכְלוּ זִבְחֵי מֵתִים:כט וַיַּכְעִיסוּ בְּמַעַלְלֵיהֶם וַתִּפְרָץ בָּם מַגֵּפָה:ל וַיַּעֲמֹד פִּינְחָס וַיְפַלֵּל וַתֵּעָצַר הַמַּגֵּפָה:לא וַתֵּחָשֶׁב לוֹ לִצְדָקָה לְדֹר וָדֹר עַד עוֹלָם:לב וַיַּקְצִיפוּ עַל מֵי מְרִיבָה וַיֵּרַע לְמֹשֶׁה בַּעֲבוּרָם:לג כִּי הִמְרוּ אֶת רוּחוֹ וַיְבַטֵּא בִּשְׂפָתָיו:לד לֹא הִשְׁמִידוּ אֶת הָעַמִּים אֲשֶׁר אָמַר יי לָהֶם:לה וַיִּתְעָרְבוּ בַגּוֹיִם וַיִּלְמְדוּ מַעֲשֵׂיהֶם:לו וַיַּעַבְדוּ אֶת עֲצַבֵּיהֶם וַיִּהְיוּ לָהֶם לְמוֹקֵשׁ:לז וַיִּזְבְּחוּ אֶת בְּנֵיהֶם וְאֶת בְּנוֹתֵיהֶם לַשֵּׁדִים:לח וַיִּשְׁפְּכוּ דָם נָקִי דַּם בְּנֵיהֶם וּבְנוֹתֵיהֶם אֲשֶׁר זִבְּחוּ לַעֲצַבֵּי כְנָעַן וַתֶּחֱנַף הָאָרֶץ בַּדָּמִים:לט וַיִּטְמְאוּ בְמַעֲשֵׂיהֶם וַיִּזְנוּ בְּמַעַלְלֵיהֶם:מ וַיִּחַר אַף יי בְּעַמּוֹ וַיְתָעֵב אֶת נַחֲלָתוֹ:מא וַיִּתְּנֵם בְּיַד גּוֹיִם וַיִּמְשְׁלוּ בָהֶם שֹׂנְאֵיהֶם:מב וַיִּלְחָצוּם אוֹיְבֵיהֶם וַיִּכָּנְעוּ תַּחַת יָדָם:מג פְּעָמִים רַבּוֹת יַצִּילֵם וְהֵמָּה יַמְרוּ בַעֲצָתָם וַיָּמֹכּוּ בַּעֲוֹנָם:מד וַיַּרְא בַּצַּר לָהֶם בְּשָׁמְעוֹ אֶת רִנָּתָם:מה וַיִּזְכֹּר לָהֶם בְּרִיתוֹ וַיִּנָּחֵם כְּרֹב (חסדו) חֲסָדָיו:מו וַיִּתֵּן אוֹתָם לְרַחֲמִים לִפְנֵי כָּל שׁוֹבֵיהֶם:מז הוֹשִׁיעֵנוּ יי אֱלֹהֵינוּ וְקַבְּצֵנוּ מִן הַגּוֹיִם לְהֹדוֹת לְשֵׁם קָדְשֶׁךָ לְהִשְׁתַּבֵּחַ בִּתְהִלָּתֶךָ:מח בָּרוּךְ יי אֱלֹהֵי יִשְׂרָאֵל מִן הָעוֹלָם וְעַד הָעוֹלָם וְאָמַר כָּל הָעָם אָמֵן הַלְלוּיָהּ:
נקרא  5  פעמים

אתגר AI

חשבון הנפש • אתגר 17

לוח מודעות

למעלה