Подтвердить что ты не робот

Как записывать и воспроизводить звук в приложении iPhone?

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

Я попытался добавить значение объема AVAudioPlayer в 1.0 и более, но не помог.

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

4b9b3361

Ответ 1

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

#import <AudioToolbox/AudioServices.h>

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

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

Ответ 2

С 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]);
}

Ответ 3

Быстрая версия:

 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 {
        }

Ответ 4

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

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error: nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
UInt32 doChangeDefault = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefault), &doChangeDefault);

Ответ 5

MAN, попробуйте это.

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];

Ответ 6

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