【发布时间】:2019-10-05 13:24:33
【问题描述】:
我有一个包含许多 mp3 音轨的加密文件,我想在我的 cocos2d-x 游戏运行时对其进行解密并播放一个特定的 mp3 作为背景音乐,而不会生成任何临时文件,但是 cocos2d- 中的 api x 只能接受磁盘上现有的 .mp3 文件,那么如何让 cocos2d-x 读取我在内存中解密的 mp3 数据呢?
【问题讨论】:
我有一个包含许多 mp3 音轨的加密文件,我想在我的 cocos2d-x 游戏运行时对其进行解密并播放一个特定的 mp3 作为背景音乐,而不会生成任何临时文件,但是 cocos2d- 中的 api x 只能接受磁盘上现有的 .mp3 文件,那么如何让 cocos2d-x 读取我在内存中解密的 mp3 数据呢?
【问题讨论】:
如果您不是从文件路径播放,则必须编辑 cocos2d-x 音频引擎源代码。
以iOS为例,通过CDAudioManager.m中CDLongAudioSource的-(void) load:(NSString*) filePath函数加载bgm
NSString *path = [CDUtilities fullPathFromRelativePath:audioSourceFilePath];
audioSourcePlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
它正在为AVAudioPlayer 对象调用initWithContentsOfURL。您可以修改它或创建一个使用 initWithData 的单独函数以满足您的需求。
对于 Android,它似乎更复杂。我已将其追溯到 AudioPlayerProvider.cpp 中的 createUrlAudioPlayer(const AudioPlayerProvider::AudioFileInfo &info) 函数,该函数正在执行从文件路径加载。
编辑:
另一个建议是不要使用他们的音频引擎,而是编写您自己的类来实现本地平台功能以从数据中播放音频。
【讨论】: