Как записывать и воспроизводить звук в приложении iPhone?
Я попытался использовать AVAudioSession
и AVAudioPlayer
для записи и воспроизведения звуков соответственно, но громкость звука очень низкая.
Я попытался добавить значение объема AVAudioPlayer
в 1.0 и более, но не помог.
Какими могут быть мои другие варианты записи звука, который может быть достаточно громким для воспроизведения?
Ответы
Ответ 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];
Меня устраивает.