2013-03-11 104 views
2

我有如下所示的設置。如何在錄製音頻時將音頻錄製設置更改爲16Khz和16位?

我想錄制音頻時將音頻錄製設置更改爲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 

編輯的問題第2次使用下面回答

後來

通過給建議,我改變了我的設置代碼:

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

我不知道我遵循這個,因爲你編輯它。下面的兩個答案都會給你一個以16kHz記錄的音頻文件。客戶在哪裏以及如何進入這個以及爲什麼他們需要16kHz? – Robert 2013-03-13 12:10:27

+0

是的,正如你所說的兩個答案都是正確的。我的後端客戶端說,我想在16Khz,因爲他發送該字節(我們正在發送)到ASR(自動語音識別)引擎。我的客戶說,ASR引擎只接受16KHz錄製的語音。這就是爲什麼當我錄製音頻時我改變了我的設置@Robert – Babul 2013-03-27 10:48:19

+0

我不知道錯誤在哪裏......它在我們的最後? @Robert – Babul 2013-03-27 10:53:29

回答

2

您現有的設置是44.1和16位左右(假設上面已經工作)你需要改變的唯一路線是:

[NSNumber numberWithFloat:44100.0] 

要:

[NSNumber numberWithFloat:16000.0] 
3

試試這個, 常規音頻設置,

AVFormatIDKey, 
AVSampleRateKey, 
AVNumberOfChannelsKey. 

而對於音頻錄音機

AVEncoderAudioQualityKey; 
AVEncoderBitRateKey; 
AVEncoderBitRatePerChannelKey; 
AVEncoderBitDepthHintKey; 

確保你已經包括通用和記錄儀的設置。

,改變你的AVSampleRateKey16000.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]; 
+0

嗨,感謝您給予答覆...請你再次看到我編輯的問題@Vedchi – Babul 2013-03-13 05:17:06

+0

嗨,你可以看看我的再次提出質疑...我不知道錯誤在哪裏......它在我們的最後?@Vedhic – Babul 2013-03-27 10:54:11