gpt4 book ai didi

c++ - 在 Windows 7 上使用 Windows Media Foundation 将原始音频文件转换为 AAC

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:48 34 4
gpt4 key购买 nike

感谢您花时间阅读我的问题。

我正在使用 Qt 和 Windows API 开发 C++ 应用程序。

我正在以原始格式以 10 秒的小音频文件录制麦克风输出,我想将它们转换为 aac 格式。

我已经尝试阅读尽可能多的东西,并且认为从 Windows Media Foundation 转码 API 开始是个好主意。

问题是,我似乎无法在“CreateObjectFromUrl”函数中使用 .raw 或 .pcm 文件,所以我暂时被困在这里。它一直在失败。 hr 返回代码等于 3222091460。我尝试将 .mp3 文件传递​​给该函数,当然它可以工作,因此不涉及 url-human-failure。

MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;

IMFSourceResolver* pSourceResolver = NULL;
IUnknown* pUnkSource = NULL;

// Create the source resolver.
hr = MFCreateSourceResolver(&pSourceResolver);
if (FAILED(hr))
{
qDebug() << "Failed !";
}


// Use the source resolver to create the media source.


hr = pSourceResolver->CreateObjectFromURL(
sURL, // URL of the source.
MF_RESOLUTION_MEDIASOURCE, // Create a source object.
NULL, // Optional property store.
&ObjectType, // Receives the created object type.
&pUnkSource // Receives a pointer to the media source.
);

MFCreateSourceResolver 工作正常,但 CreateObjectFromURL 不成功:(

所以我有两个问题要问你们:

  1. 是否可以使用 Windows Media Foundation 将原始音频文件编码为 aac 文件?
  2. 如果是,我应该读什么来完成我想要的?

我想指出,我不能只使用 ffmpeg 或 libav,因为我买不起我的软件的任何许可证,并且不希望它处于 GPL 许可证之下。但是,如果 Windows Media Foundations 有其他方法可以将原始音频文件编码为 aac,我会很高兴听到它们。

最后,抱歉我的英语不好,这显然不是我的母语,如果我让你的眼睛流血,我很抱歉。 (如果我让你笑了,我会很高兴)

祝你有个愉快的一天

最佳答案

The hr return code equals 3222091460

那些是 HRESULT 代码。使用 this "ShowHresult" tool方便地为您解码。该代码表示​​ 0xC00D36C4 MF_E_UNSUPPORTED_BYTESTREAM_TYPE“不支持给定 URL 的字节流类型。”

问题基本上是不支持这些原始文件,.WAV 是原始音频的良好来源 - 该文件包含格式描述符和有效负载。

您显然可以自己从原始音频文件中读取数据并使用 Media Foundation 的 AAC Encoder 压缩成 AAC通过其 IMFTransform 接口(interface)。这相当容易,并且您在输出上有 AAC 数据,例如写入原始 .AAC

Media Foundation 的替代选项是 DirectShow(有合适的​​编解码器,虽然我认为它可能不太容易启动),libfaac , FFmpeg 的 libavcodec(在 LGPL 下可用,而非 GPL)。

关于c++ - 在 Windows 7 上使用 Windows Media Foundation 将原始音频文件转换为 AAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12446269/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com