Cocos2D-X:从内存中读取 MP3 数据

cocos2d-x: read mp3 data from memory

本文关键字:读取 MP3 数据 内存 Cocos2D-X      更新时间:2023-10-16

我有一个加密文件,其中包含许多mp3音轨,我想在我的cocos2d-x游戏运行时对其进行解密,并在没有任何临时文件的情况下播放一个特定的mp3作为背景音乐生成,但是,cocos2d-x中的api只能接受磁盘上现有的.mp3文件,那么如何使cocos2d-x读取我在内存中解密的mp3数据呢?

如果您不是从文件路径播放,则必须编辑 cocos2d-x 音频引擎源代码。

例如,对于 iOS,bgm 是通过 CDAudioManager.m 中CDLongAudioSource-(void) load:(NSString*) filePath函数加载的

NSString *path = [CDUtilities fullPathFromRelativePath:audioSourceFilePath];
audioSourcePlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];

它正在为AVAudioPlayer对象调用initWithContentsOfURL。您可以修改此函数,也可以创建一个单独的函数,该函数使用initWithData以满足您的需求。

至于Android,它似乎更复杂。我已经将其追溯到AudioPlayerProvider中的这个createUrlAudioPlayer(const AudioPlayerProvider::AudioFileInfo &info)函数.cpp该函数正在从文件路径执行加载。

编辑
另一个建议是不要使用他们的音频引擎,而是编写自己的类,该类将实现本机平台函数以播放来自数据的音频。