क्या मैं Ringbuffer तरह नोवोकेन के सहायक कक्षाओं में करते हैं, de-इंटरलिविंग के लिए:
float zero = 0.0;
vDSP_vsadd(leftSampleData, 1, &zero, data, numChannels, numFrames);
vDSP_vsadd(rightSampleData, 1, &zero, data+1, numChannels, numFrames);
: इंटरलिविंग के लिए
float zero = 0.0;
vDSP_vsadd(data, numChannels, &zero, leftSampleData, 1, numFrames);
vDSP_vsadd(data+1, numChannels, &zero, rightSampleData, 1, numFrames);
चीजों को करने का अधिक सामान्य तरीका है एरे की सरणी, जैसे
int maxNumChannels = 2;
int maxNumFrames = 1024;
float **arrays = (float **)calloc(maxNumChannels, sizeof(float *));
for (int i=0; i < maxNumChannels; ++i) {
arrays[i] = (float *)calloc(maxNumFrames, sizeof(float));
}
[[Novocaine audioManager] setInputBlock:^(float *data, UInt32 numFrames, UInt32 numChannels) {
float zero = 0.0;
for (int iChannel = 0; iChannel < numChannels; ++iChannel) {
vDSP_vsadd(data, numChannels, &zero, arrays[iChannel], 1, numFrames);
}
}];
जो मैं नोवोकेन के लिए रिंगबफर एक्सेसरी कक्षाओं में आंतरिक रूप से बहुत कुछ उपयोग करता हूं। मैंने vDSP_vsadd बनाम memcpy की गति का समय दिया, और (बहुत, आश्चर्यजनक रूप से), कोई गति अंतर नहीं है।
बेशक, आप हमेशा से ही एक अंगूठी बफर का उपयोग करें, और अपने आप परेशानी
#import "RingBuffer.h"
int maxNumFrames = 4096
int maxNumChannels = 2
RingBuffer *ringBuffer = new RingBuffer(maxNumFrames, maxNumChannels)
[[Novocaine audioManager] setInputBlock:^(float *data, UInt32 numFrames, UInt32 numChannels) {
ringBuffer->AddNewInterleavedFloatData(data, numFrames, numChannels);
}];
[[Novocaine audioManager] setOuputBlock:^(float *data, UInt32 numFrames, UInt32 numChannels) {
ringBuffer->FetchInterleavedData(data, numFrames, numChannels);
}];
आशा है कि मदद करता है बचा सकता है।
धन्यवाद, ऐसा करने के लिए एक साफ तरीका दिखता है! – bartolsthoorn
एलेक्स, कृपया इस पर एक नज़र डालें (http://stackoverflow.com/questions/13228618/how-to-read-vbr-audio-in-novacaine-as-opposed-to-pcm) प्रश्न, मैं ' मैं आपके novacaine उदाहरण में जोड़ने की कोशिश कर रहा हूं इसे वीबीआर डेटा पढ़ने की अनुमति दे रहा हूं (फ्लोट के बजाय SINT16 में) – abbood