Utiliser un NSLevelIndicator pour un preview audio
Fred20
Membre
Bonjour à tous
J'ai un petit souci sous AVFoundation : je cherche à visualiser en preview l'entrée son du micro intégré du mac. Pour cela j'ai tenté d'adapter l'exemple de projet AVRecorder mais spécifiquement pour mon projet.
Je n'y ai pas encore mis l'action d'enregistrement mais "logiquement" ça devrait marcher....mais non !! Je n'arrive pas à avoir de valeur dans mon updateAudioLevels.
Est ce que quelqu'un peut m'aider svp ?
Voici mon code :
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
[super windowControllerDidLoadNib:aController];
session = [[AVCaptureSession alloc]init];
[self researchDeviceForPopUp];
[b_audio selectItemAtIndex:2];
NSError *error = nil;
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:[tabDevices objectAtIndex:1] error:&error];
if (audioInput) {
[session addInput:audioInput];
[self affectOutPut];
// Start updating the audio level meter
[self setAudioLevelTimer:[NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(updateAudioLevels userInfo:nil repeats:YES]];
}
else {
// Handle the failure.
}
}
-(void)affectOutPut
{
movieOutput = [[AVCaptureMovieFileOutput alloc]init];
if ([session canAddOutput:movieOutput]) {
[session addOutput:movieOutput];
}
else {
// Handle the failure.
}
movieOutput = [[AVCaptureMovieFileOutput alloc] init];
[movieOutput setDelegate:self];
[session addOutput:movieOutput];
audioPreviewOutput = [[AVCaptureAudioPreviewOutput alloc] init];
[audioPreviewOutput setVolume:0.f];
[session addOutput:audioPreviewOutput];
}
- (void)updateAudioLevels:(NSTimer *)timer
{
NSInteger channelCount = 0;
float decibels = 0.f;
// Sum all of the average power levels and divide by the number of channels
for (AVCaptureConnection *connection in [[self movieOutput] connections]) {
for (AVCaptureAudioChannel *audioChannel in [connection audioChannels]) {
decibels += [audioChannel averagePowerLevel];
channelCount += 1;
}
}
decibels /= channelCount;
float val = pow(10.f, 0.05f * decibels) * 20.0f;
NSLog(@val = %.2f décibel = %.2f chanelcount = %ld,val,decibels,channelCount);
[level setFloatValue:val]; //level est un NSLevelIndicator
}
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bon ... mon problème semble être complexe puisque aucune réponse !!!!
Salut,
Tu as trouvé la solution à ton problème ? qu'est-ce que cela donne en debug ligne par ligne. Où est-ce que cela coince ?
seb
Non toujours pas
en fait, rien ne passe dans updateAudioLevels
tu peux filer ton code complet stp
Merci iLandes pour ton aide
Voici mon projet
Salut j'ai jeté un coup d'oeil à ton projet. Il fonctionne correctement. Je suis réparti de la démo fourni par Apple : AVRecorder puis j'ai fait le tri dans ton projet...
Pour le .h
pour le .m
D'autre pourront peut-être amélioré tout cela ;-)
Bonjour iLandes
Désolé pour ma réponse tardive ... vacances obligent !!!
Super sympa ta correction
Enormes mercis
A+
Pour ceux que cela intéresse le projet AVRecorder limité au vue mètre ce trouve sur GitHub, les améliorations sont les bienvenues.