gpt4 book ai didi

ios - 以 AAC 格式录制和播放音频 iOS 5 +

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:25 25 4
gpt4 key购买 nike

我想在 iOS 中录制语音并播放。我也想将录制的文件发送到服务器。我有一个想法,即录制的文件也必须在 ANDROID 设备上播放。所以我尝试使用 MP3 。但是 AVAudioRecorder 不允许使用 MP3 格式进行录音。所以我使用了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 上播放的格式的音频的库吗?谢谢

最佳答案

这对我有用:

  1. 确保设备音量足够大:

    MPMusicPlayerController * musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
    if (musicPlayer.volume < 1.0) {
    musicPlayer.volume = 1; // device volume will be changed to maximum value
    }
    musicPlayer = nil;
  2. 使用 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];

关于ios - 以 AAC 格式录制和播放音频 iOS 5 +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12001791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com