我想在iOS和&amp ;;录制语音玩。我也想将录制的文件发送到服务器。我有一个扭曲记录文件也必须在ANDROID设备上播放。所以我尝试使用MP3。但AVAudioRecorder不允许使用MP3 folrmat进行录制。所以我用过AAC。但它不起作用。这是我的代码
-(void)initializeAudioRecorder {
self.btnPlayRecording.enabled = NO;
self.btnStopRecording.enabled = NO;
// Get sound file URL in which recording is saved
NSURL *soundFileURL = [NSURL fileURLWithPath:[self soundFilePath]];
// Set settings for audio recording
NSDictionary *audioRecordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMin],AVEncoderAudioQualityKey,
[NSNumber numberWithInt:16],AVEncoderBitRateKey,
[NSNumber numberWithInt:2], AVNumberOfChannelsKey,
[NSNumber numberWithFloat:44100.0],AVSampleRateKey,
[NSNumber numberWithInt:kAudioFormatMPEG4AAC],AVFormatIDKey, nil];
NSError *error = nil;
self.audioRecorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:audioRecordSettings
error:&error];
if (error)
{
NSLog(@"error: %@", [error localizedDescription]);
}
else {
if (![self.audioRecorder prepareToRecord]) {
NSLog(@"Failed to prepare recording");
}
}
}
#pragma mark - Get Sound File Path
-(NSString*)soundFilePath {
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDirPath = [dirPaths objectAtIndex:0];
NSString *soundFilePath = [docsDirPath stringByAppendingPathComponent:@"testSound.aac"];
return soundFilePath;
}
#pragma mark - IBAction Methods
- (IBAction)btnStartRecordingTapped:(id)sender {
if (!self.audioRecorder.recording) {
self.btnPlayRecording.enabled = NO;
self.btnStopRecording.enabled = YES;
[self.audioRecorder record];
}
}
- (IBAction)btnStopRecordingTapped:(id)sender {
self.btnStopRecording.enabled = NO;
self.btnPlayRecording.enabled = YES;
self.btnStartRecording.enabled = YES;
}
- (IBAction)btnPlayRecordingTapped:(id)sender {
if (!audioRecorder.recording) {
self.btnStopRecording.enabled = YES;
self.btnStartRecording.enabled = NO;
NSError *error = nil;
self.audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:self.audioRecorder.url error:&error];
self.audioPlayer.delegate = self;
if (error) {
NSLog(@"Error occured while playing recorded audio.\nError:- %@",[error localizedDescription]);
}
else {
[self.audioPlayer play];
}
}
}
#pragma mark - AVAudioPlayer Delegate MEthods
/* audioPlayerDidFinishPlaying:successfully: is called when a sound has finished playing. This method is NOT called if the player is stopped due to an interruption. */
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSLog(@"In %s",__PRETTY_FUNCTION__);
self.btnStartRecording.enabled = YES;
self.btnStopRecording.enabled = NO;
}
/* if an error occurs while decoding it will be reported to the delegate. */
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{
NSLog(@"In %s",__PRETTY_FUNCTION__);
NSLog(@"audioPlayerDecodeError:- %@",[error localizedDescription]);
}
#pragma mark - AVAudioRecorder Delegate MEthods
/* audioRecorderDidFinishRecording:successfully: is called when a recording has been finished or stopped. This method is NOT called if the recorder is stopped due to an interruption. */
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
{
NSLog(@"In %s",__PRETTY_FUNCTION__);
}
/* if an error occurs while encoding it will be reported to the delegate. */
- (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error
{
NSLog(@"In %s",__PRETTY_FUNCTION__);
NSLog(@"audioRecorderEncodeError:- %@",[error localizedDescription]);
}
但上面的代码不是录制音频。文件在DOCS目录中创建。但是当我试图播放它时,它不起作用。我听不到任何声音。
我的代码有什么问题? 还有任何用于录制的图书馆和播放将在iOS + Android上播放的格式的音频?感谢
答案 0 :(得分:2)
这对我有用:
确保设备音量足够高:
MPMusicPlayerController * musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
if (musicPlayer.volume < 1.0) {
musicPlayer.volume = 1; // device volume will be changed to maximum value
}
musicPlayer = nil;
使用AVAudioSession:
AVAudioPlayer * meinPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:soundFileURL
error:&error];
meinPlayer.delegate = self;
[meinPlayer prepareToPlay]
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
[session setActive:YES error:nil];
[meinPlayer play];
答案 1 :(得分:0)
尝试在实际播放声音之前调用AVAudioPlayer的prepareToPlay方法。另请检查您的设备音量。
答案 2 :(得分:0)
// check audio permission
AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
print(" check result: \(granted)")
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
try AVAudioSession.sharedInstance().setActive(true)
}catch{
}
})