带有 AudioFileID 和加密文件的音频单元文件 Reader

Audio Unit File Reader with AudioFileID and Encrypted File

我正在使用 Audio Unit Generator 在 MacOS 中读取和播放音频文件 AudioFilePlayer

AudioComponentDescription fileplayercd = {0};
fileplayercd.componentType = kAudioUnitType_Generator;
fileplayercd.componentSubType = kAudioUnitSubType_AudioFilePlayer;
fileplayercd.componentManufacturer = kAudioUnitManufacturer_Apple;
AUNode fileNode;
AUGraphAddNode(graph, &fileplayercd, &fileNode);

并使用

设置其源文件
CFURLRef inputFileUrl =CFURLCreateWithFileSystemPath(kCFAllocatorDefault, INPUT_FILE_LOCATION, kCFURLPOSIXPathStyle, false);
AudioFileID inputFile;
AudioFileOpenURL(inputFileUrl, kAudioFileReadPermission, 0, &inputFile)
AUGraphNodeInfo(graph, fileNode, NULL, fileAU);
AudioUnitSetProperty(fileAU, kAudioUnitProperty_ScheduledFileIDs, kAudioUnitScope_Global, 0, &inputFile, sizeof(inputFile))

但是我的真实音频文件都是加密的,所以我不能使用原始文件 AudioFileID。相反,我需要以某种方式扩展 ID 并在任何“真实”读取之前插入解密代码。这可能吗?

这可以使用 AudioFileOpenWithCallbacks 和用于读取 getsize 回调的参数来完成。

OSStatus result = AudioFileOpenWithCallbacks((__bridge void*)audioData, readProc, 0, getSizeProc, 0, 0, &inputFile);

有关用法的详细信息,请参阅 this related question