में मैं iPhone/iPad पर एक ऑडियो फ़ाइल के लिए कच्चे डेटा का उपयोग करने की कोशिश कर रहा हूँ। मेरे पास निम्न कोड है जो मुझे आवश्यक पथ के नीचे एक मूल शुरुआत है। हालांकि मैं ऑडियोबफर होने के बाद क्या करना है, इस पर मैं फंस गया हूं।फ्रेम्स की संख्या का निर्धारण एक कोर ऑडियो AudioBuffer
AVAssetReader *assetReader = [AVAssetReader assetReaderWithAsset:urlAsset error:nil];
AVAssetReaderTrackOutput *assetReaderOutput = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:[[urlAsset tracks] objectAtIndex:0] outputSettings:nil];
[assetReader addOutput:assetReaderOutput];
[assetReader startReading];
CMSampleBufferRef ref;
NSArray *outputs = assetReader.outputs;
AVAssetReaderOutput *output = [outputs objectAtIndex:0];
int y = 0;
while (ref = [output copyNextSampleBuffer]) {
AudioBufferList audioBufferList;
CMBlockBufferRef blockBuffer;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(ref, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);
for (y=0; y<audioBufferList.mNumberBuffers; y++) {
AudioBuffer audioBuffer = audioBufferList.mBuffers[y];
SInt16 *frames = audioBuffer.mData;
for(int i = 0; i < 24000; i++) { // This sometimes crashes
Float32 currentFrame = frames[i]/32768.0f;
}
}
}
अनिवार्य रूप से मैं नहीं जानता कि यह बताने के लिए कैसे कितने तख्ते प्रत्येक बफर तो मैं मज़बूती से उन लोगों से डेटा निकालने नहीं कर सकते हैं। मैं कच्चे ऑडियो डेटा के साथ काम करने के लिए नया हूं इसलिए ऑडियोबफर संरचना की एमडीटा संपत्ति को सर्वोत्तम तरीके से पढ़ने के तरीके में मैं किसी भी सुझाव के लिए खुला हूं। मैंने अतीत में शून्य पॉइंटर्स के साथ भी बहुत कुछ नहीं किया है, इसलिए इस संदर्भ में इसकी मदद भी बहुत अच्छी होगी!
उत्कृष्ट प्रश्न! आपके प्रश्न ने मेरी इसी तरह की समस्या को हल करने में मदद की। – user523234
आप blockBuffer –