【问题标题】:AviFile API: adding a WAV file to an AVI file without loading it into RAMAviFile API:将 WAV 文件添加到 AVI 文件而不将其加载到 RAM 中
【发布时间】:2013-08-29 10:56:00
【问题描述】:

在我的 C# 应用程序中,我正在对 AviFile API 进行互操作。我想将 WAV 文件作为音轨添加到无声 AVI 文件中。

下面的代码可以正常工作。但是,它将整个 WAV 文件加载到 RAM 中。 如何在不需要那么多内存的情况下实现相同的目标?

如果使用 AviFile API 无法做到这一点,是否有任何 C# 库可以实现相同功能?

Avi.AVISTREAMINFO streamInfo = new Avi.AVISTREAMINFO();
Avi.PCMWAVEFORMAT streamFormat = new Avi.PCMWAVEFORMAT();
int streamLength = 0;

IntPtr rawData = newStream.GetStreamData(ref streamInfo, ref streamFormat, ref streamLength);
IntPtr waveData = rawData;
IntPtr aviStream;
int result = Avi.AVIFileCreateStream(aviFile, out aviStream, ref streamInfo);


result = Avi.AVIStreamSetFormat(aviStream, 0, ref streamFormat, Marshal.SizeOf(streamFormat));

Avi.AVIStreamWrite(aviStream, 0, streamLength, waveData, streamLength, Avi.AVIIF_KEYFRAME, 0, 0);

Avi.AVIStreamRelease(aviStream);

Marshal.FreeHGlobal(waveData);

【问题讨论】:

    标签: .net winapi interop


    【解决方案1】:

    您可以手动打开 wav 文件并读取数据。在这种情况下,您将不得不手动交错 A/V 数据并自行创建 avi。添加 JUNK 块、索引和其他必需的东西可能会很棘手。但是,如果您了解 avi/RIFF 架构,它是 100% 可行的。

    【讨论】:

    • 谢谢!理想情况下,我想要一个使用 AviFile API 的快速简便的解决方案,因为我已经在使用它了。
    猜你喜欢
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2019-11-19
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多