录制audio时如何将audio录制设置更改为16Khz和16位?

我有下面的设置。

录制audio时,我想将audio录制设置更改为16Khz和16位。

NSArray *dirPaths; NSString *docsDir; dirPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); docsDir = [dirPaths objectAtIndex:0]; NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"sound.wav"]; NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey, [NSNumber numberWithInt:16], AVEncoderBitRateKey, [NSNumber numberWithInt: 2], AVNumberOfChannelsKey, [NSNumber numberWithFloat:44100.0], AVSampleRateKey, nil]; NSError *error = nil; audioRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error]; if (error) { } else { [audioRecorder prepareToRecord]; } 

如何设置这些设置?

编辑问题

谢谢你的答复,我尝试了这些方法,但它不适用于我,因为我的客户端正在发送录制的语音(logging的声音,我正在以字节格式发送)到ASR引擎(自动语音识别)。 我不回复相同的回应(我得到的答复audio说“引号”)我发送。 客户说你不是以16KHz和16位的采样率logging声音,这就是为什么你得到这个响应。 但是我问他发送给他服务器的字节数,他给了那个.wav文件,它正在播放完美。 但是,如果他发送给ASR引擎的是同一个引擎,那么ASR引擎不会接受我发送的录音(他说ASR不会接受,因为您不是以16KHz和16位采样率录制audio)。 客户给出以下回应。 (但是,我尝试了你提出的所有方法)

 Filename: sv_SE_356985580762248932.wav Folder: E:\developApp\TestappName\Mortionsn_dev\2nd-iteration\test_wfiles File Type: 44100Hz, 16-bit, Stereo Uncompressed Size: 1.63 MB (1,713,696 bytes) File Format: Windows PCM Windows PCM Size on Disk: 1.63 MB (1,717,892 bytes) Last Written (local): 3/11/2013 00:21:00.000 Length: 0:09.714 428,424 samples 

第二次编辑问题通过使用下面的答案

后来通过提出build议,我更改了我的设置代码:

 NSMutableDictionary *recordSettings = [NSMutableDictionary dictionary]; [recordSettings setValue: [NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; [recordSettings setValue: [NSNumber numberWithFloat:16000.0] forKey:AVSampleRateKey];//8000.0 [recordSettings setValue: [NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; [recordSettings setValue: [NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; [recordSettings setValue: [NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; [recordSettings setValue: [NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; [recordSettings setValue: [NSNumber numberWithInt: AVAudioQualityMax] forKey:AVEncoderAudioQualityKey]; 

你现有的设置是44.1kHz和16位所以(假设上述已经工作),唯一需要改变的是:

 [NSNumber numberWithFloat:44100.0] 

至:

 [NSNumber numberWithFloat:16000.0] 

试试这个,一般audio设置是,

 AVFormatIDKey, AVSampleRateKey, AVNumberOfChannelsKey. 

而对于录音机

 AVEncoderAudioQualityKey; AVEncoderBitRateKey; AVEncoderBitRatePerChannelKey; AVEncoderBitDepthHintKey; 

确保你已经包括一般和logging器设置。

并将您的AVSampleRateKey更改为16000.0

 NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey [NSNumber numberWithInt: 2], AVNumberOfChannelsKey, [NSNumber numberWithFloat:16000.0], AVSampleRateKey, [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey, [NSNumber numberWithInt:16], AVEncoderBitRateKey, nil];