ffmpegJsCode top-level constant

String const ffmpegJsCode

Implementation

const String ffmpegJsCode = r"""

window.convertWavToM4a = async function (
  wavBytesBase64,
  inputFileName = "input.wav",
  callback
) {
  let ffmpeg;
  try {
    if (!window.FFmpeg) {
      throw new Error("FFmpeg not loaded");
    }

    // const { createFFmpeg } = FFmpeg;

    if (!ffmpeg) {
      ffmpeg = FFmpeg.createFFmpeg({
        log: true,
      });
    }

    if (!ffmpeg.isLoaded()) {
      try {
        await ffmpeg.load();
      } catch (error) {
        console.error("ffmpeg.load()", error);
      }
    }

    const wavBytes = Uint8Array.from(atob(wavBytesBase64), (c) =>
      c.charCodeAt(0)
    );

    ffmpeg.FS("writeFile", inputFileName, wavBytes);

    const outputFileName = inputFileName.replace(/\.\w+$/, ".m4a");

    await ffmpeg.run(
      "-i",
      inputFileName,
      "-c:a",
      "aac",
      "-b:a",
      "128k",
      outputFileName
    );

    const m4aBytes = ffmpeg.FS("readFile", outputFileName);

    const m4aBase64 = btoa(
      Array.from(m4aBytes)
        .map((b) => String.fromCharCode(b))
        .join("")
    );
    callback(m4aBase64);
  } catch (error) {
    console.error("catch.load()", error);
    callback(null);
  }
};


""";