Android AudioTrack无法初始化
我在初始化android AudioTrack时遇到问题。我有Android 2.3.3的Nexus One。Android AudioTrack无法初始化
这是我的代码:
INT _rate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_SYSTEM);
INT缓冲区大小= AudioRecord.getMinBufferSize(_rate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioTrack ATRACK =新AudioTrack(AudioManager.STREAM_VOICE_CALL, _rate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, 缓冲区大小, AudioTrack.MODE_STREAM);
如果(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" />
你能帮我吗?什么可能是错的?
谢谢!
我找到了解决方案:
线后
INT缓冲区大小= AudioRecord.getMinBufferSize(_rate,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);
我加了
buffersize * = 2;
音轨已初始化。
这不是一个完美的解决方案。也许只需要将一个字节添加到缓冲区就足够了,但它可以工作。
“FECI狴迫退,faciant meliora potentes FECI狴迫退,faciant meliora potentes。”
我想我找到了你的问题:
您正在使用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);
我有我的Nexus One相同的问题,我看到一个日志行一行 “minFrameCount 3072,帧数又1536”。然而,当然,我通过了3072作为缓冲区大小......这是一个Nexus的一个bug? – Ivan 2011-07-15 05:40:43
您可能会发现这是因为“getMinBufferSize返回BYTES中的最小大小,如果您正在编写完全相同数量的SHORTS(每个都是两个字节),那么您将过度填充缓冲区;如果要写入一个字节数组的长度是确切的数字,你应该没有问题。 – protectedmember 2012-12-15 17:52:39