当前位置:操作系统 > 安卓/Android >>

Android Audio代码分析3 - 创建AudioTrack对象

 

今天来看看类AudioTrack的构造函数。

出发点是Java中的AudioTrack类。

从前面的使用实例中可知,应用程序中要实现播放,首先要创建一个AudioTrack对象,然后调用其函数来实现播放。

 

*****************************************源码*************************************************

    public AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat,

            int bufferSizeInBytes, int mode, int sessionId)

    throws IllegalArgumentException {

        mState = STATE_UNINITIALIZED;

       

        // remember which looper is associated with the AudioTrack instanciation

        if ((mInitializationLooper = Looper.myLooper()) == null) {

            mInitializationLooper = Looper.getMainLooper();

        }

 

        audioParamCheck(streamType, sampleRateInHz, channelConfig, audioFormat, mode);

 

        audioBuffSizeCheck(bufferSizeInBytes);

 

        if (sessionId < 0) {

            throw (new IllegalArgumentException("Invalid audio session ID: "+sessionId));

        }

 

        int[] session = new int[1];

        session[0] = sessionId;

        // native initialization

        int initResult = native_setup(new WeakReference<AudioTrack>(this),

                mStreamType, mSampleRate, mChannels, mAudioFormat,

                mNativeBufferSizeInBytes, mDataLoadMode, session);

        if (initResult != SUCCESS) {

            loge("Error code "+initResult+" when initializing AudioTrack.");

            return; // with mState == STATE_UNINITIALIZED

        }

 

        mSessionId = session[0];

 

        if (mDataLoadMode == MODE_STATIC) {

            mState = STATE_NO_STATIC_DATA;

        } else {

            mState = STATE_INITIALIZED;

        }

    } www.zzzyk.com

***********************************************************************************************

源码路径:

frameworks\base\media\java\android\media\AudioTrack.java

 

###########################################说明##############################################################

还是先看看自带注释:

    /**

     * Class constructor with audio session. Use this constructor when the AudioTrack must be

     * attached to a particular audio session. The primary use of the audio session ID is to

     * associate audio effects to a particular instance of AudioTrack: if an audio session ID

     * is provided when creating an AudioEffect, this effect will be applied only to audio tracks

     * and media players in the same session and not to the output mix.

     * When an AudioTrack is created without specifying a session, it will create its own session

     * which can be retreived by calling the {@link #getAudioSessionId()} method.

     * If a session ID is provided, this AudioTrack will share effects attached to this session

     * with all other media players or audio tracks in the same session.

     * @param streamType the type of the audio stream. See

     *   {@link AudioManager#STREAM_VOICE_CALL}, {@link AudioManager#STREAM_SYSTEM},

     *   {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC} and

     *   {@link AudioManager#STREAM_ALARM}

     * @param sampleRateInHz the sample rate expressed in Hertz. Examples of rates are (but

     *   not limited to) 44100, 22050 and 11025.

     * @param channelConfig describes the configuration of the audio channels.

     *   See {@link AudioFormat#CHANNEL_OUT_MONO} and

     *   {@link AudioFormat#CHANNEL_OUT_STEREO}

     * @param audioFormat the format in which the audio data is represented.

     *   See {@link AudioFormat#ENCODING_PCM_16BIT} and

     *   {@link AudioFormat#ENCODING_PCM_8BIT}

     * @param bufferSizeInBytes the total size (in bytes) of the buffer where audio data is read

     *   from for playback. If using the AudioTrack in streaming mode, you can write data into

     *   this buffer in smaller chunks than this size. If using the AudioTrack in static mode,

     *   this is the maximum size of the sound that will be played for this instance.

     *   See {@link #getMinBufferSize(int, int, int)} to determine the minimum required buffer size

     *   for the successful creation of an AudioTrack instance in streaming mode. Using values

     *   smaller than getMinBufferSize() will result in an initialization failure.

     * @param mode streaming or static buffer. See {@link #MODE_STATIC} and {@link #MODE_STREAM}

     * @param sessionId Id of audio session the AudioTrack must be attached to

     * @throws java.lang.IllegalArgumentException

     */

   开始先介绍了session。创建AudioTrack的时候需要指定一个audio session。

   如果这个session已经被其他的播放器或者audio track使用,新创建的AudioTrack就会和它们共享AudioEffect。

   如果是第一次使用该session,AudioEffect就会将session与新创建的AudioTrack对象关联起来,

   以后其他的播放器或audio track再使用该session时,就会与该AudioTrack共享AudioEffect。

 

   如果没有指定一个session,就会为该AudioTrack创建一个自己的session,该session可以被别人通过getAudioSessionId得到。

   别人得到了该session,并且使用该session创建播放器或者audio track,就会会你共享Audi

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,