Android AudioTrack无法初始化

时间:2011-04-23 03:49:00

标签: android

我在初始化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" /> 

你可以帮帮我吗?可能有什么不对?

谢谢!

2 个答案:

答案 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);