如何将audio.mp3转换为audio.flac?

发布于 2025-01-11 15:28:04 字数 1636 浏览 3 评论 0原文

Google 云语音转文本仅接受 flac 或原始格式的音频文件。 我想将audio.mp3/wav 文件转换为audio.flac,但我使用的转换器功能无法正常工作。任何人都可以建议我一种将audio.mp3/wav 文件转换为audio.flac 的更好方法。

export const SpeechToText = function (audioFileData, contentType) {
  try {
    let reader = new FileReader();
    contentType = contentType.toLowerCase();
    return new Promise((resolve) => {
      reader.onload = function (event: any) {
        let data = event.target.result.split(",");
        let b64Data = data[1];
        let blob = getBlobFromBase64Data(b64Data, contentType);
        let blobUrl = URL.createObjectURL(blob);
        let fileName = audioFileData.name.substring(
          0,
          audioFileData.name.lastIndexOf(".")
        );

        let convertedAudio = {
          path: blobUrl,
          type: targetFormat,
          name: `${fileName}.flac`,
        };

        resolve(convertedAudio);
      };
      reader.readAsDataURL(audioFileData);
    });
  } catch (e) {
    console.log("Error occurred while converting : ", e);
  }
};

function getBlobFromBase64Data(b64Data, contentType, sliceSize = 512) {
  const byteCharacters = atob(b64Data);
  const byteArrays = [];

  for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    const slice = byteCharacters.slice(offset, offset + sliceSize);

    const byteNumbers = new Array(slice.length);
    for (let i = 0; i < slice.length; i++) {
      byteNumbers[i] = slice.charCodeAt(i);
    }

    const byteArray = new Uint8Array(byteNumbers);
    byteArrays.push(byteArray);
  }

  const blob = new Blob(byteArrays, { type: contentType });
  return blob;
}

Google cloud speech to text only accepts flac or raw formatted audio files.
I want to convert an audio.mp3/wav file to audio.flac but the converter functions I am using is not working properly. Can anyone suggest me a better way to convert audio.mp3/wav file to audio.flac.

export const SpeechToText = function (audioFileData, contentType) {
  try {
    let reader = new FileReader();
    contentType = contentType.toLowerCase();
    return new Promise((resolve) => {
      reader.onload = function (event: any) {
        let data = event.target.result.split(",");
        let b64Data = data[1];
        let blob = getBlobFromBase64Data(b64Data, contentType);
        let blobUrl = URL.createObjectURL(blob);
        let fileName = audioFileData.name.substring(
          0,
          audioFileData.name.lastIndexOf(".")
        );

        let convertedAudio = {
          path: blobUrl,
          type: targetFormat,
          name: `${fileName}.flac`,
        };

        resolve(convertedAudio);
      };
      reader.readAsDataURL(audioFileData);
    });
  } catch (e) {
    console.log("Error occurred while converting : ", e);
  }
};

function getBlobFromBase64Data(b64Data, contentType, sliceSize = 512) {
  const byteCharacters = atob(b64Data);
  const byteArrays = [];

  for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    const slice = byteCharacters.slice(offset, offset + sliceSize);

    const byteNumbers = new Array(slice.length);
    for (let i = 0; i < slice.length; i++) {
      byteNumbers[i] = slice.charCodeAt(i);
    }

    const byteArray = new Uint8Array(byteNumbers);
    byteArrays.push(byteArray);
  }

  const blob = new Blob(byteArrays, { type: contentType });
  return blob;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文