2012-07-27 26 views
0

我真的需要幫助解決此問題。我正在開發一個帶有音頻單元的iOS應用程序,錄製的音頻需要使用alaw格式的8位/ 8000赫茲採樣率。我怎麼會聽到演講者發出扭曲的聲音。我的iOS應用程序使用8000赫茲採樣率的音頻單元返回扭曲的聲音

我碰到這個樣品在線:

http://www.stefanpopp.de/2011/capture-iphone-microphone/comment-page-1/

試圖調試我的應用程序,我用我的AudioFormat在他的申請,我收到了同樣的聲音失真。我猜我要麼有不正確的設置,要麼我需要做其他的事情來使這個工作。鑑於鏈接中的應用程序和下面的audioFormat任何人都可以告訴我,如果我做錯了什麼或錯過了什麼?我對這個東西不太瞭解,謝謝。

音頻格式:

AudioStreamBasicDescription audioFormat; 
    audioFormat.mSampleRate   = 8000; 
    audioFormat.mFormatID   = kAudioFormatALaw; 
    audioFormat.mFormatFlags  = kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger; 
    audioFormat.mFramesPerPacket = 1; 
    audioFormat.mChannelsPerFrame = 1; 
    audioFormat.mBitsPerChannel  = 8; 
    audioFormat.mBytesPerPacket  = 1; 
    audioFormat.mBytesPerFrame  = 1; 
+0

你會得到什麼樣的失真? – hotpaw2 2012-07-27 17:01:07

+1

從您使用此AudioStreamBasicDescription的問題中不清楚。在一個典型的AUGraph設置中,你可以有幾個不同的AudioStreamBasicDescriptions(例如)過濾,繪製和記錄到磁盤。另外,你從哪裏得到這些值?這是你的規格嗎?另外,你應該製作一個機器人語音應用程序。 – hooleyhoop 2012-07-27 19:20:26

+0

-hotpaw2失真是我可以聽到我的聲音,但背景中有靜電。其他人將其描述爲聽起來像輸入和輸出使用不同的採樣率。 @hooleyhoop我只使用一個描述,我把它放在鏈接中。我的規格是8000赫茲使用法律,其餘的設置是從鏈接或通過玩不同的價值觀來看到最好的結果。我剛剛閱讀了一個在線資源,聲稱我必須使用44k線性PCM並轉換爲我想要的。這是必要的嗎? – 2012-07-28 14:57:01

回答

0

最終得到了它的正常播放。我在這裏張貼,以幫助其他任何面臨類似問題的人。

我面臨的主要問題是模擬器和實際設備之間存在巨大差異。在設備上運行應用程序的聲音質量更好,但它每秒鐘或2次跳過,我發現一個似乎解決此問題的設置以及更改緩衝區大小/持續時間的設置。 (持續時間設置將不會在模擬器上工作,我的一些問題進行了需要它以一定的速率運行,用別的東西來同步,這是導致失真的音色)

status = AudioSessionInitialize(NULL, kCFRunLoopDefaultMode, NULL, audioUnit); 
UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; 
status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory); 
[self hasError:status:__FILE__:__LINE__]; 

Float32 preferredBufferSize = 0.005805; // in seconds 
status = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize); 
[self hasError:status:__FILE__:__LINE__]; 

status = AudioSessionSetActive(true); 

第一音頻會話屬性是什麼停止跳過,使其發揮更順利。第二個調整緩衝區的持續時間,這是以秒爲單位的回調觸發的頻率,並會給你一個不同的緩衝區大小。它的最大努力意味着它會盡可能接近你提供的價值,但它似乎有一個可用尺寸的列表並選擇最接近的。

看到帖子我鏈接到我的問題一個很好的教程/示例程序開始使用這個東西。

+0

我也面臨同樣的問題,但看起來不像你的問題。你可以看一下http://stackoverflow.com/questions/21964477/ios7-robotic-garbled-in-speaker-mode-on-iphone5s – Titus 2014-04-03 01:37:37