using two buffers
using two buffers
- Subject: using two buffers
- From: Judith Suttrup <email@hidden>
- Date: Thu, 04 Sep 2008 16:15:02 +0200
- Organization: http://freemail.web.de/
Hello list,
I am trying to separate the data of two channels (left and right) into two buffers. Afterwards the data of each buffer should be displayed in a graph. The graph displays something until I try to set abl->mNumberBuffers = 2. What am I doing wrong?
OSErr error;
MovieAudioExtractionRef extractionSessionRef = nil;
AudioChannelLayout* layout = nil;
UInt32 size = 0;
AudioStreamBasicDescription asbd;
soundToPlay = [[self mMovie] quickTimeMovie];
SetMovieActive(soundToPlay, TRUE);
error = MovieAudioExtractionBegin(soundToPlay, 0, &extractionSessionRef);
error = MovieAudioExtractionGetProperty(extractionSessionRef,
kQTPropertyClass_MovieAudioExtraction_Audio,
kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription,
sizeof (asbd), &asbd, nil);
Boolean allChannelsDicrete = TRUE;
error = MovieAudioExtractionSetProperty(extractionSessionRef,
kQTPropertyClass_MovieAudioExtraction_Movie,
kQTMovieAudioExtractionMoviePropertyID_AllChannelsDiscrete,
sizeof (Boolean), &allChannelsDicrete);
asbd.mFormatFlags = kAudioFormatFlagIsFloat;
kAudioFormatFlagIsNonInterleaved;
asbd.mChannelsPerFrame = 2;
asbd.mBitsPerChannel = sizeof(float) * 8;
asbd.mBytesPerFrame = sizeof(float) * asbd.mChannelsPerFrame;
asbd.mBytesPerPacket = asbd.mBytesPerFrame;
error = MovieAudioExtractionSetProperty(extractionSessionRef,
kQTPropertyClass_MovieAudioExtraction_Audio,
kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription,
sizeof (asbd), &asbd);
float numFramesF = asbd.mSampleRate * ((float) GetMovieDuration(soundToPlay) / (float) GetMovieTimeScale(soundToPlay));
UInt32 numFrames = (UInt32) numFramesF;
UInt32 extractionFlags = 0;
AudioBufferList* abl = (AudioBufferList *)calloc(1, offsetof(AudioBufferList, mBuffers[asbd.mChannelsPerFrame]));
abl->mNumberBuffers = asbd.mChannelsPerFrame;
unsigned i;
for(i = 0; i < abl->mNumberBuffers; i++) {
abl->mBuffers[i].mNumberChannels = 1;
abl->mBuffers[i].mDataByteSize = sizeof(float) * abl->mBuffers[0].mNumberChannels * numFrames;
abl->mBuffers[i].mData = malloc(abl->mBuffers[i].mDataByteSize);
}
[self setSamples:calloc(abl->mBuffers[0].mDataByteSize, 1)];
abl->mBuffers[0].mData = samples; // samples (Byte *)
[self setSampleCount: numFrames * abl->mBuffers[0].mNumberChannels];
error = MovieAudioExtractionFillBuffer(extractionSessionRef, &numFrames, abl, &extractionFlags);
error = MovieAudioExtractionEnd(extractionSessionRef);
ExitMovies();
>>>>>>>>>>>>>>>>>>> Putting data in MutableArray
if (ipbuf == NULL) {
[self setIpbuf:[[NSMutableArray alloc] init]];
for (i = 0; i < (sampleCount / 2); i++) {
[ipbuf addObject:[NSNumber numberWithFloat:(Float32)samples[i]]];
}
>>>>>>>>>>>>>>>>>>> drawing the graph
for(; i < [ipbuf count]; i++){
timer++;
x = timer;
NSNumber * tempNum = [ipbuf objectAtIndex:i];
y = [tempNum floatValue] * rect.size.height / 256;
[aPath lineToPoint:NSMakePoint(x, y)];
}
Thanks, Judith Suttrup
_______________________________________________________________________
Jetzt neu! Schützen Sie Ihren PC mit McAfee und WEB.DE. 30 Tage
kostenlos testen. http://www.pc-sicherheit.web.de/startseite/?mc=022220
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden