我試着用AVAudioSession
和AVAudioPlayer
分別錄製和播放聲音,但音量很低。如何在iPhone應用程序中錄製和播放聲音?
我試圖把AVAudioPlayer
的體積值增加到1.0以上,但沒有多大幫助。
我可以用其他方法錄製可以大聲回放的聲音嗎?
我試着用AVAudioSession
和AVAudioPlayer
分別錄製和播放聲音,但音量很低。如何在iPhone應用程序中錄製和播放聲音?
我試圖把AVAudioPlayer
的體積值增加到1.0以上,但沒有多大幫助。
我可以用其他方法錄製可以大聲回放的聲音嗎?
此代碼應該是對您有用:
#import <AudioToolbox/AudioServices.h>
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,
sizeof (audioRouteOverride),&audioRouteOverride);
這將增大音量。代碼的功能是將iPhone上的普通聲音轉換爲揚聲器聲音。這就是使用kAudioSessionOverrideAudioRoute_Speaker的原因。
感謝您的輸入。我會檢查出來,並儘快回覆給你:) – 2011-04-14 13:01:49
非常感謝,這確實有用:)自從現在開始,我一直在尋找解決方案。 – 2011-04-14 13:26:12
不要忘記導入聲明。對於更有經驗的程序員來說也許是顯而易見的...... #import
下面的代碼修復了這個問題對我來說:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error: nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
UInt32 doChangeDefault = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefault), &doChangeDefault);
由於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]);
}
這行保存了我的生活,謝謝 [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&setOverrideError]; – 2017-08-16 08:40:20
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];
只是設置此 [會話overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker錯誤:& setOverrideError]; 它適合我。
斯威夫特版本:
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 {
}
隨着Swift 2,這現在是一個嘗試捕捉的情況下,不需要覆蓋錯誤可選 – blwinters 2015-11-02 02:00:00
thnx,我編輯答案 – 2015-11-02 07:15:11
您使用的是內置麥克風,或者說是在標準耳塞線話筒?聲音與麥克風的距離有多近?如果您記錄-peakPowerForChannel,您會看到什麼樣的值? – NSResponder 2011-04-14 11:14:24
@NSResponder:我正在使用內置麥克風。你也可以解釋如何登錄-peakPowerForChannel? – 2011-04-14 11:16:11