我正在尝试从麦克风录制声音并在OS X上实时播放.最终它将通过网络流式传输,但是现在我只是尝试实现本地录制/播放.
我能记录声音和写入文件,我可以做的都AVCaptureSession和AVAudioRecorder.但是,我不确定如何在录制时播放音频.使用AVCaptureAudioDataOutput作品:
self.captureSession = [[AVCaptureSession alloc] init];
AVCaptureDevice *audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
NSError *error = nil;
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevice error:&error];
AVCaptureAudioDataOutput *audioDataOutput = [[AVCaptureAudioDataOutput alloc] init];
self.serialQueue = dispatch_queue_create("audioQueue", NULL);
[audioDataOutput setSampleBufferDelegate:self queue:self.serialQueue];
if (audioInput && [self.captureSession canAddInput:audioInput] && [self.captureSession canAddOutput:audioDataOutput]) {
[self.captureSession addInput:audioInput];
[self.captureSession addOutput:audioDataOutput];
[self.captureSession startRunning];
// Stop after arbitrary time
double delayInSeconds = 4.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.captureSession stopRunning];
});
} …Run Code Online (Sandbox Code Playgroud) 我想将两个.wav录制文件组合在一起.任何人都可以帮我弄清楚如何实现这一点.我尝试组合数据,但标题正在产生问题.我们可以像我们一样组合波形文件进行组合.
这就是我在做联合收割机的方式,
NSMutableData *datas = [NSMutableData alloc];
NSData *data1 = [NSData dataWithContentsOfFile: [recordedTmpFile1 path]];
NSData *data2 = [NSData dataWithContentsOfFile: [recordedTmpFile2 path]];
NSLog(@"file1 size : %d", [data1 length]);
NSLog(@"file2 size : %d", [data2 length]);
[datas appendData:data1];
[datas appendData:data2];
NSLog(@"file3 size : %d", [datas length]);
NSURL *combinedPath = [NSURL alloc];
combinedPath = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:
[NSString stringWithFormat: @"1_20111215.%@",@"wav"]]];
[[NSFileManager defaultManager] createFileAtPath:[combinedPath path] contents:datas attributes:nil];
NSFileManager * fm = [NSFileManager defaultManager];
[fm removeItemAtPath:[recordedTmpFile2 path] error:nil];
Run Code Online (Sandbox Code Playgroud)