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

Posted

技术标签:

【中文标题】录制音频时如何将音频录制设置更改为 16Khz 和 16 位?【英文标题】:How to change audio recording settings to 16Khz and 16 bit when we record audio? 【发布时间】:2013-03-11 10:36:45 【问题描述】:

我有如下所示的设置。

我想在录制音频时将音频录制设置更改为 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];

如何设置这些设置?

编辑问题

感谢您的回复,我尝试了这些方法,但它对我不起作用,因为我的客户正在将录制的语音(我以字节格式发送的录制的语音)发送到 ASR 引擎(自动语音识别)。我没有收到我发送的相同回复(我收到的回复音频显示“引号”)。客户说您没有以 16KHz 和 16 位采样率录制声音,这就是您得到响应的原因。但是我问他我发送到他的服务器的字节,他给了那个 .wav 文件,它正在完美地播放。但是如果他发送给 ASR 引擎的同一个,ASR 引擎不接受我发送的录制的声音(他说 ASR 不会接受,因为你没有以 16KHz 和 16 位采样率录制音频)。客户给出以下响应。 (但是,我尝试了你建议的所有方法)

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

使用以下答案第二次编辑问题

后来通过提出建议,我将设置代码更改为:

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];

【问题讨论】:

我不确定我是否遵循了这个,因为你编辑了它。下面的两个答案都应该为您提供以 16kHz 录制的音频文件。客户在哪里以及如何进入这个领域,他们为什么想要 16kHz? 是的,正如您所说,两个答案都是正确的。我的后端客户说,我想要 16Khz,因为他正在将字节(我们发送的内容)发送到 ASR(自动语音识别)引擎。我的客户说,ASR 引擎只接受 16KHz 录制的语音。这就是为什么我在录制音频时更改了设置@Robert 我不知道错误在哪里...是我们的结果吗? @罗伯特 我不确定,但据我所知,您向他发送 16kHz 文件,所以我错误是在另一端。 ok.....这是我的客户要求,即“向消息队列提交语音消息。语音文件的格式为 pcm 编解码器、16Bit 和 16Khz 或 16Bit 和 8Khz”。我是否对使用上述代码的设置感到满意....查看我的问题一次..我编辑了问题...我使用的是 PCM 技术吗?我是否满足他的要求? @罗伯特 【参考方案1】:

试试这个, 常规音频设置是,

AVFormatIDKey,
AVSampleRateKey,
AVNumberOfChannelsKey.

对于录音机

AVEncoderAudioQualityKey;
AVEncoderBitRateKey;
AVEncoderBitRatePerChannelKey;
AVEncoderBitDepthHintKey;

确保您已包含常规和记录器设置。

并将您的 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];

【讨论】:

嗨,感谢您的回复...您能再次查看我编辑的问题吗@Vedchi 嗨,你能再看看我的问题吗...我不知道错误在哪里...是我们的结果吗? @Vedhic【参考方案2】:

您现有的设置是 44.1kHz 和 16 位,因此(假设上述设置已经有效)您需要更改的唯一行是:

[NSNumber numberWithFloat:44100.0] 

收件人:

[NSNumber numberWithFloat:16000.0]

【讨论】:

以上是关于录制音频时如何将音频录制设置更改为 16Khz 和 16 位?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 8 kHz 音频采样率提高到 16 kHz STM32

在 HTC One 上以 16khz 单声道 PCM (WAV) 录制时出现断断续续的音频

下采样 wav 音频文件

录制音频数据并将其发送到 c++ 函数

将音频缓冲区从 44100 重新采样到 16000

Android 模拟器似乎以 96khz 录制音频