如何:在android中使用AudioManager startBluetoothSco()函数

时间:2012-08-08 09:06:39

标签: android bluetooth audio-recording

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

限制是:

•流类型必须为STREAM_VOICE_CALL

•格式必须是单声道

•采样必须为16kHz或8kHz

STREAM_VOICE_CALL可以是stetup:

AM.setMode(AudioManager.MODE_IN_CALL);

AM.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);

单声道和采样可以设置为:

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

任何人都可以想到或知道狡猾的方式吗?

2 个答案:

答案 0 :(得分:1)

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

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

  • 流类型必须为STREAM_VOICE_CALL
  • 格式必须为mono
  • 采样必须为16kHz或8kHz

以下限制适用于输入流:

  • 格式必须为mono
  • 采样必须为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模式下 NOT 时的以下内容:

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

答案 1 :(得分: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);