0
我想从我的iPhone模拟器录制音频,然后将其保存到目录中,然后播放。由于我听不到我录制的音频,我甚至不确定它是否在录音。这里是我的代码:在iPhone编程中录制和播放音频
-(IBAction) playRecording:sender
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dir = [paths objectAtIndex:0];
NSFileManager *filemanager = [NSFileManager defaultManager];
NSArray *files = [filemanager contentsOfDirectoryAtPath:dir error:nil];
NSString *file = [files objectAtIndex:0];
NSString *path = [dir stringByAppendingPathComponent:file];
NSURL *url = [NSURL URLWithString:path]; // url is nil
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
player.volume = 0.3;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[player play];
}
-(IBAction) record:sender
{
if(recorder.recording)
{
[recorder stop];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:nil];
[recordButton setTitle:@"Record" forState:UIControlStateNormal];
}
else
{
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *dir = [paths objectAtIndex:0];
NSString *filename = [[NSString alloc] initWithString:@"myfile.caf"];
NSString *path = [dir stringByAppendingPathComponent:filename];
NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
[settings setValue:[NSNumber numberWithInt:kAudioFormatAppleLossless] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[settings setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
[settings setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
[recorder release];
recorder = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:path]
settings:settings error:nil];
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
[recorder record];
[recordButton setTitle:@"Stop" forState:UIControlStateNormal];
}
}
更新1:
在playRecording url变量总是评价为为零。