Как записать и воспроизвести звук в приложении для iPhone? - PullRequest
13 голосов
/ 14 апреля 2011

Я пытался использовать AVAudioSession и AVAudioPlayer для записи и воспроизведения звуков соответственно, но громкость звука очень низкая.

Я пытался установить значение громкости от AVAudioPlayer до 1,0 и более, но это не сильно помогло.

Какие другие варианты записи звука могут быть достаточно громкими для воспроизведения?

Ответы [ 6 ]

25 голосов
/ 14 апреля 2011

Этот код должен быть вам полезен:

#import <AudioToolbox/AudioServices.h>

    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;                
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,          
                                 sizeof (audioRouteOverride),&audioRouteOverride);  

Это увеличит громкость.Функциональность кода заключается в преобразовании обычного звука в звук динамика на вашем iPhone.Вот почему используется kAudioSessionOverrideAudioRoute_Speaker.

23 голосов
/ 21 ноября 2013

Начиная с iOS7 вы можете решить эту проблему напрямую с помощью AVAudioSession

Метод overrideOutputAudioPort делает то же самое, что AudioSessionSetProperty

NSError *setOverrideError;
NSError *setCategoryError;

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&setCategoryError];

if(setCategoryError){
    NSLog(@"%@", [setCategoryError description]);
}

[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&setOverrideError];


if(setOverrideError){
    NSLog(@"%@", [setOverrideError description]);
}
4 голосов
/ 12 марта 2015

Swift версия:

 import AVFoundation
 var overrideError : NSError?
    if AVAudioSession.sharedInstance().overrideOutputAudioPort(.Speaker, error: &error){

    }else{
        print("error in overrideOutputAudioPort " + overrideError!.localizedDescription)
    }

Swift 2:

        do {
        try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker)
        } catch {
        }
1 голос
/ 18 июля 2012

Следующий код исправил эту проблему для меня:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error: nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
UInt32 doChangeDefault = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefault), &doChangeDefault);
0 голосов
/ 18 января 2015

просто установите это [session overrideOutputAudioPort: AVAudioSessionPortOverrideSpeaker error: & setOverrideError];Меня устраивает.

0 голосов
/ 05 сентября 2014

ЧЕЛОВЕК, попробуй это.

AVAudioSession *session = [AVAudioSession sharedInstance];

NSError *setCategoryError = nil;
if (![session setCategory:AVAudioSessionCategoryPlayback
              withOptions:kAudioSessionOverrideAudioRoute_Speaker
                    error:&setCategoryError]) {
        // handle error
}

NSError *error;
NSData * data = [NSData dataWithContentsOfURL:self.playlet.urlSound];

self.audioPlayer = [[AVAudioPlayer alloc] initWithData:data fileTypeHint:@"aac" error:&error];

self.audioPlayer.delegate = self;

if (error)
    NSLog(@"Error: %@",
          [error localizedDescription]);
else
    [_audioPlayer play];
...