2

如果我想设置 AudioManager.startBluetoothSco() 函数的限制,我在哪里做?从这里:http: //developer.android.com/reference/android/media/AudioManager.html#startBluetoothSco()

限制是:

• 流类型必须是 STREAM_VOICE_CALL

•格式必须是单声道

• 采样必须为 16kHz 或 8kHz

STREAM_VOICE_CALL 可以安装在:

AM.setMode(AudioManager.MODE_IN_CALL);

或者

AM.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);

Mono 和采样可以设置在:

audioRecord = new AudioRecord(
android.media.MediaRecorder.AudioSource.MIC, 8000,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersizebytes); 

谁能想到或知道不同的方式?

4

2 回答 2

1

您提供给 Android SDK 文档的链接如下:

“...如果建立了 SCO 连接,则以下限制适用于音频输出流,以便它们可以路由到 SCO 耳机:

  • 流类型必须是 STREAM_VOICE_CALL
  • 格式必须是单声道
  • 采样必须是 16kHz 或 8kHz

以下限制适用于输入流:

  • 格式必须是单声道
  • 采样必须为 8kHz”

您对“AudioRecord”的使用是输入流,不需要关注 STREAM_VOICE_CALL:

对于“AudioTrack”,您需要在 SCO 模式下执行以下操作:

AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, //
8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, //
minBufferSizeInBytes, //
AudioTrack.MODE_STREAM);

不在SCO 模式下的情况如下:

AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, //
8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, //
minBufferSizeInBytes, //
AudioTrack.MODE_STREAM);
于 2012-10-03T00:56:30.267 回答
0

要解决这个问题,你必须像这样使用:一个用于输入,另一个用于输出

                    audioRecord = new AudioRecord(
                                    android.media.MediaRecorder.AudioSource.MIC ,                                                                                SAMPPERSEC,
            channelConfiguration, audioEncoding, buffersizebytes);

        Atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
            SAMPPERSEC,
            AudioFormat.CHANNEL_OUT_MONO,
            audioEncoding,
            buffersizebytes,
            AudioTrack.MODE_STREAM);
于 2013-04-14T19:30:54.633 回答