带有 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。
我正在使用 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。