0

我目前正在从事一个项目,我在该项目中生成大量音频数据以存储在用户机器上。

它适用于少量数据,但随着内存使用量的增长,闪存应用程序开始挣扎并最终死亡。

我一直在考虑克服这个问题的可能方法,我在想,不是将所有数据存储在内存中(有时高达 100mb),一个可能的解决方案可能是将数据流式传输到服务器(每秒 44100 个浮点数)作为一旦数据积累结束,它就会被生成,然后将其发送回客户端。

1)你能看出这个想法有什么问题吗?如果有,你能提供一个更好的选择吗?

2)你能推荐一种好的服务器技术来实现这一点吗?

编辑 1

添加更多细节。

我正在使用 sound.extract 方法在客户端上生成音频。当音频被发送到扬声器时,我也将它发送到一个字节数组。

一旦用户点击了停止按钮,我就会在 bytearray 中的音频数据前添加一个 wav 标头,并允许用户下载他们正在收听的音频的 wav。

理想情况下,我不想限制用户可以保存多少数据。这可能是不可能的。

将所有这些音频数据存储在内存中会导致闪存中出现严重的性能问题。我不知道有什么方法可以将这些数据增量存储在客户端机器上,所以我在想一个解决方案可能是将数据增量流式传输到某处的服务器以减少内存负载。

4

2 回答 2

0

我刚刚尝试加载和提取一个 mp3 文件:

持续时间:09:18
mp3 字节:22345728
提取字节:178765824

从 22mb 产生的 178mb 真的很可怕。

我认为可以避免如此严重的内存使用,但我需要更多信息:
如果您使用的是 Sound.extract(),您可能有一个 mp3 源,对吗?
您能否描述一下您的应用程序中的数据流(加载、卸载、转换、保存)?
还有一个愚蠢的问题:如何保存 .wav 以及是否可以保存 .mp3?

UPD:在这一点上,我认为解决方案是为加载的声音创建一个快速包装器,以从中检索(和创建)样本(存储为两个数字 - 开始和停止时间)。恕我直言,这是可能的(我喜欢编码媒体包装器,希望我能找到一些时间进行研究),如果这个类将提供可接受的速度 - 所有的混合都将在没有单一的情况下完成,extract()并且当样本的最终时间线开始播放时(生成必须保存的声音) byteArray 可以很容易地被提取SoundMixer.computeSpectrum()并传递给 SampleDataEvent 或直接传递给用户的本地文件系统。这将是唯一的 ByteArray :)

于 2010-11-03T08:00:27.840 回答
0

我找到了一个想要完成的线程。提出了许多解决方案。

http://drupal.org/node/69242

编辑:好的,不完全一样,但类似。也许您可以从其他人的经验中收集一些东西并提出合适的解决方案。

于 2010-11-02T20:38:34.937 回答