【发布时间】:2021-11-20 19:28:51
【问题描述】:
在 ActionScript 3 中,我使用 SoundMixer.computeSpectrum() 对舞台上当前播放的声波进行快照,并将其放入指定的 ByteArray 对象中。
我想将 ByteArray 写入 FFMPEG(通过 std -i pipe:0),但创建的 ByteArray 对象固定为 512 个浮点值,而 FFMPEG 似乎doesn't support that value。输出中的声音已损坏。
这是我在 AS3 中的一部分代码:
stage.addEventListener(Event.ENTER_FRAME, update);
function update(e:Event):void{
var soundBA:ByteArray = new ByteArray();
SoundMixer.computeSpectrum(soundBA, false, 0);
process.standardInput.writeBytes(soundBA);
}
【问题讨论】:
-
您需要每帧写出连续的字节。所以不行。样本数 * 采样率。这就是管道输入的工作原理,您在每帧的基础上写出数据,然后告诉 ffmpeg 数据的详细信息,以便对其进行处理。
-
您知道“512 个浮点值”是否是数据包大小,样本的“深度”是多少?它是 32 位还是 16 位...?我在文档中找不到。 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… 以及如何在 AS3 中捕获样本 * 采样率/秒以适应 FFMPEG 音频格式?
标签: ffmpeg floating-point actionscript