我在初始化Android AudioTrack时遇到问题。我有Android 2.3.3的Nexus One。
这是我的代码:
int _rate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_SYSTEM);
int buffersize = AudioRecord.getMinBufferSize(_rate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioTrack atrack =新AudioTrack(AudioManager.STREAM_VOICE_CALL, _率, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, 缓冲区大小, AudioTrack.MODE_STREAM);
if(atrack.getState()== AudioTrack.STATE_UNINITIALIZED) ...
所以atrack的状态总是AudioTrack.STATE_UNINITIALIZED
应用程序清单是
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="BigLeftEarActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-sdk android:minSdkVersion="10" />
你可以帮帮我吗?可能有什么不对?
谢谢!
答案 0 :(得分:3)
我找到了解决方案:
行后
int buffersize = AudioRecord.getMinBufferSize(_rate,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);
我添加了
buffersize * = 2;
和音轨已初始化。
这不是一个完美的解决方案。也许仅仅向缓冲区添加一个字节就足够了,但它可以工作。
“Feci quod potui,meliora meliora具有Feci quod potui,meliora meliora potentes。”
答案 1 :(得分:3)
我想我发现了你的问题:
您正在将AudioRecord.getMinBufferSize()用于AudioTrack。您应该使用AudioTrack.getMinBUfferSize(),这应该为您提供适当的值。
mAudioRecBufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO , AudioFormat.ENCODING_PCM_16BIT);
mAudioPlayBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO , AudioFormat.ENCODING_PCM_16BIT);