2009-05-27 60 views
3

這些是我傳入的值,它是我工作的值的唯一組合。Audio Recording iPhone - AudioStreamBasicDescription的值

dataFormat.mSampleRate = 44100;  
dataFormat.mFormatID = kAudioFormatLinearPCM; 
dataFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsBigEndian; 
dataFormat.mBytesPerPacket = 4; 
dataFormat.mFramesPerPacket = 1; 
dataFormat.mBytesPerFrame = 4; 
dataFormat.mChannelsPerFrame = 2; 
dataFormat.mBitsPerChannel = 16; 

status = AudioQueueNewInput( &dataFormat, AudioInputCallback, self, NULL, NULL, 0, 
        &queue); 

status = AudioFileCreateWithURL(fileUrl, kAudioFileCAFType, &dataformat, kAudioFileFlags_EraseFile, &audioFile 

錄製工作,但在錄製過程中和回放過程中噪音很大。它可以與這段代碼有什麼關係?

回答

1

什麼是您的輸入設備?提供的耳塞上的麥克風或手機的內置麥克風或什麼?或者你正在錄製模擬器?

除了噪音,其他一切聽起來是否正確:速度,音高等?

它可能不會引起任何問題,但是您指定了雙通道輸入,而您的輸入設備可能是單聲道輸入。

最後一個想法:這是第一代iPhone嗎?我認爲這個模型有一個奇怪的問題,那就是8千赫輸入上升到44.1。

+0

好的,比爾剛剛在coreaudio-api名單上表示,傳聞中的第一代iPhone升頻產品是虛假的。我的錯。 – invalidname 2009-07-06 20:20:24

2

我可以看到兩個可能的錯誤。首先,由於@invalidname指出,以立體聲錄製可能不適用於iPhone等單聲道設備。好吧,它可能會起作用,但如果是這樣的話,您只需要返回雙單聲道立體聲流,那麼爲什麼要麻煩呢?你也可以配置你的數據流在單聲道工作,並節省CPU的開銷。

第二個問題可能是聲音失真的根源。你流描述格式的標誌應該是:

kAudioFormatFlagIsSignedInteger | 
kAudioFormatFlagsNativeEndian | 
kAudioFormatFlagIsPacked 

另外,不要忘記將mReserved標誌設置爲0,雖然可能被忽略這個標誌的價值,它不會傷害到明確將其設置爲0只是爲了確保。

編輯:在iPhone上調試音頻的另一個更爲一般的技巧 - 如果您正在獲取失真,剪輯或其他奇怪效果,請從手機中獲取數據有效載荷,然後在波形編輯器中查看錄製內容。能夠縮小並查看單個樣本會爲您提供很多關於錯誤的線索。要做到這一點,你需要打開「Organizer」窗口,點擊你的手機,然後展開你的應用程序旁邊的小箭頭(在你通常會卸載它的地方)。現在你會看到一個向下的箭頭,如果你點擊它,Xcode會將你的應用中的數據有效載荷複製到硬盤上的某個地方。如果您將錄製內容轉儲到磁盤,則會在此處找到解壓縮的文件。