如何在iPhone应用程序中录制和播放声音?

时间:2011-04-14 11:07:57

标签: iphone ios4 avaudioplayer avaudiorecorder

我尝试使用AVAudioSessionAVAudioPlayer分别录制和播放声音,但音量非常低。

我尝试将AVAudioPlayer的音量值设置为1.0或更高,但没有多大帮助。

录制可以播放的声音的其他选项可能是什么?

6 个答案:

答案 0 :(得分:25)

此代码对您有用:

#import <AudioToolbox/AudioServices.h>

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

会增加音量。代码的功能是将普通声音转换为iPhone上的扬声器声音。这就是使用kAudioSessionOverrideAudioRoute_Speaker的原因。

答案 1 :(得分:23)

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

答案 2 :(得分:4)

Swift版本:

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

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

斯威夫特2:

        do {
        try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker)
        } catch {
        }

答案 3 :(得分:1)

以下代码为我解决了这个问题:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

设置此项 [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&amp; setOverrideError]; 这个对我有用。