AudioTrack.h revision c2f1f07084818942352c6bbfb36af9b6b330eb4e
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * you may not use this file except in compliance with the License. 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * You may obtain a copy of the License at 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See the License for the specific language governing permissions and 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * limitations under the License. 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef ANDROID_AUDIOTRACK_H 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_AUDIOTRACK_H 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h> 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IAudioFlinger.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IAudioTrack.h> 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/AudioSystem.h> 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/RefBase.h> 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Errors.h> 297562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IInterface.h> 307562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IMemory.h> 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/threads.h> 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass audio_track_cblk_t; 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass AudioTrack 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project enum channel_index { 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MONO = 0, 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LEFT = 0, 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project RIGHT = 1 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Events used by AudioTrack callback function (audio_track_cblk_t). 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project enum event_type { 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EVENT_MORE_DATA = 0, // Request to write more data to PCM buffer. 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EVENT_UNDERRUN = 1, // PCM buffer underrun occured. 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EVENT_LOOP_END = 2, // Sample loop end was reached; playback restarted from loop start if loop count was not 0. 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EVENT_MARKER = 3, // Playback head is at the specified marker position (See setMarkerPosition()). 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EVENT_NEW_POS = 4, // Playback head is at a new position (See setPositionUpdatePeriod()). 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EVENT_BUFFER_END = 5 // Playback head is at the end of the buffer. 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Create Buffer on the stack and pass it to obtainBuffer() 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * and releaseBuffer(). 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project class Buffer 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public: 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project enum { 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MUTE = 0x00000001 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags; 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount; 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format; 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t frameCount; 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t size; 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project union { 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* raw; 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project short* i16; 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int8_t* i8; 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* As a convenience, if a callback is supplied, a handler thread 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * is automatically created with the appropriate priority. This thread 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * invokes the callback when a new buffer becomes availlable or an underrun condition occurs. 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Parameters: 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * event: type of event notified (see enum AudioTrack::event_type). 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * user: Pointer to context for use by the callback receiver. 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * info: Pointer to optional parameter according to event type: 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - EVENT_MORE_DATA: pointer to AudioTrack::Buffer struct. The callback must not write 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * more bytes than indicated by 'size' field and update 'size' if less bytes are 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * written. 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - EVENT_UNDERRUN: unused. 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - EVENT_LOOP_END: pointer to an int indicating the number of loops remaining. 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - EVENT_MARKER: pointer to an uin32_t containing the marker position in frames. 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - EVENT_NEW_POS: pointer to an uin32_t containing the new position in frames. 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - EVENT_BUFFER_END: unused. 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project typedef void (*callback_t)(int event, void* user, void *info); 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Constructs an uninitialized AudioTrack. No connection with 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * AudioFlinger takes place. 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AudioTrack(); 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Creates an audio track and registers it with AudioFlinger. 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Once created, the track needs to be started before it can be used. 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unspecified values are set to the audio hardware's current 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * values. 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Parameters: 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * streamType: Select the type of audio stream this track is attached to 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * (e.g. AudioSystem::MUSIC). 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * sampleRate: Track sampling rate in Hz. 120c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * format: Audio format (e.g AudioSystem::PCM_16_BIT for signed 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 16 bits per sample). 122c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * channels: Channel mask: see AudioSystem::audio_channels. 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * frameCount: Total size of track PCM buffer in frames. This defines the 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * latency of the track. 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * flags: Reserved for future use. 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * cbf: Callback function. If not null, this function is called periodically 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * to request new PCM data. 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * notificationFrames: The callback function is called each time notificationFrames PCM 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * frames have been comsumed from track input buffer. 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * user Context for use by the callback receiver. 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AudioTrack( int streamType, 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = 0, 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = 0, 136c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent int channels = 0, 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount = 0, 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = 0, 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project callback_t cbf = 0, 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* user = 0, 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int notificationFrames = 0); 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Creates an audio track and registers it with AudioFlinger. With this constructor, 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * The PCM data to be rendered by AudioTrack is passed in a shared memory buffer 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * identified by the argument sharedBuffer. This prototype is for static buffer playback. 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * PCM data must be present into memory before the AudioTrack is started. 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * The Write() and Flush() methods are not supported in this case. 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * It is recommented to pass a callback function to be notified of playback end by an 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * EVENT_UNDERRUN event. 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AudioTrack( int streamType, 15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = 0, 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = 0, 155c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent int channels = 0, 15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const sp<IMemory>& sharedBuffer = 0, 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = 0, 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project callback_t cbf = 0, 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* user = 0, 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int notificationFrames = 0); 16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Terminates the AudioTrack and unregisters it from AudioFlinger. 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Also destroys all resources assotiated with the AudioTrack. 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~AudioTrack(); 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Initialize an uninitialized AudioTrack. 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Returned status (from utils/Errors.h) can be: 17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - NO_ERROR: successful intialization 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - INVALID_OPERATION: AudioTrack is already intitialized 172c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * - BAD_VALUE: invalid parameter (channels, format, sampleRate...) 17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - NO_INIT: audio server or audio hardware not initialized 17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * */ 17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t set(int streamType =-1, 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = 0, 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = 0, 178c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent int channels = 0, 17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount = 0, 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = 0, 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project callback_t cbf = 0, 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* user = 0, 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int notificationFrames = 0, 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const sp<IMemory>& sharedBuffer = 0, 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool threadCanCallJava = false); 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Result of constructing the AudioTrack. This must be checked 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * before using any AudioTrack API (except for set()), using 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * an uninitialized AudioTrack produces undefined results. 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See set() method above for possible return codes. 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t initCheck() const; 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Returns this track's latency in milliseconds. 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * This includes the latency due to AudioTrack buffer size, AudioMixer (if any) 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * and audio hardware driver. 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t latency() const; 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* getters, see constructor */ 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType() const; 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format() const; 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount() const; 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t frameCount() const; 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameSize() const; 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory>& sharedBuffer(); 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* After it's created the track is not active. Call start() to 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * make it active. If set, the callback will start being called. 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void start(); 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Stop a track. If set, the callback will cease being called and 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * obtainBuffer returns STOPPED. Note that obtainBuffer() still works 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * and will fill up buffers until the pool is exhausted. 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void stop(); 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool stopped() const; 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* flush a stopped track. All pending buffers are discarded. 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * This function has no effect if the track is not stoped. 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void flush(); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Pause a track. If set, the callback will cease being called and 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * obtainBuffer returns STOPPED. Note that obtainBuffer() still works 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * and will fill up buffers until the pool is exhausted. 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void pause(); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* mute or unmutes this track. 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * While mutted, the callback, if set, is still called. 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void mute(bool); 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool muted() const; 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* set volume for this track, mostly used for games' sound effects 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void setVolume(float left, float right); 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void getVolume(float* left, float* right); 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* set sample rate for this track, mostly used for games' sound effects 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 248573266210fb2b2e7d86fbd46d0dfe16763611d91Eric Laurent status_t setSampleRate(int sampleRate); 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t getSampleRate(); 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Enables looping and sets the start and end points of looping. 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Parameters: 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * loopStart: loop start expressed as the number of PCM frames played since AudioTrack start. 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * loopEnd: loop end expressed as the number of PCM frames played since AudioTrack start. 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * loopCount: number of loops to execute. Calling setLoop() with loopCount == 0 cancels any pending or 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * active loop. loopCount = -1 means infinite looping. 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * For proper operation the following condition must be respected: 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * (loopEnd-loopStart) <= framecount() 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setLoop(uint32_t loopStart, uint32_t loopEnd, int loopCount); 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getLoop(uint32_t *loopStart, uint32_t *loopEnd, int *loopCount); 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Sets marker position. When playback reaches the number of frames specified, a callback with event 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * type EVENT_MARKER is called. Calling setMarkerPosition with marker == 0 cancels marker notification 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * callback. 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * If the AudioTrack has been opened with no callback function associated, the operation will fail. 27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Parameters: 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * marker: marker position expressed in frames. 27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Returned status (from utils/Errors.h) can be: 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - NO_ERROR: successful operation 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - INVALID_OPERATION: the AudioTrack has no callback installed. 27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setMarkerPosition(uint32_t marker); 28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getMarkerPosition(uint32_t *marker); 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Sets position update period. Every time the number of frames specified has been played, 28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * a callback with event type EVENT_NEW_POS is called. 28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Calling setPositionUpdatePeriod with updatePeriod == 0 cancels new position notification 28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * callback. 28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * If the AudioTrack has been opened with no callback function associated, the operation will fail. 28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Parameters: 29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * updatePeriod: position update notification period expressed in frames. 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Returned status (from utils/Errors.h) can be: 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - NO_ERROR: successful operation 29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - INVALID_OPERATION: the AudioTrack has no callback installed. 29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setPositionUpdatePeriod(uint32_t updatePeriod); 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getPositionUpdatePeriod(uint32_t *updatePeriod); 30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Sets playback head position within AudioTrack buffer. The new position is specified 30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * in number of frames. 30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * This method must be called with the AudioTrack in paused or stopped state. 30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Note that the actual position set is <position> modulo the AudioTrack buffer size in frames. 30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Therefore using this method makes sense only when playing a "static" audio buffer 30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * as opposed to streaming. 30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * The getPosition() method on the other hand returns the total number of frames played since 30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * playback start. 31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Parameters: 31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * position: New playback head position within AudioTrack buffer. 31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Returned status (from utils/Errors.h) can be: 31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - NO_ERROR: successful operation 31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - INVALID_OPERATION: the AudioTrack is not stopped. 31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - BAD_VALUE: The specified position is beyond the number of frames present in AudioTrack buffer 31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setPosition(uint32_t position); 32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getPosition(uint32_t *position); 32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* Forces AudioTrack buffer full condition. When playing a static buffer, this method avoids 32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * rewriting the buffer before restarting playback after a stop. 32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * This method must be called with the AudioTrack in paused or stopped state. 32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Returned status (from utils/Errors.h) can be: 32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - NO_ERROR: successful operation 32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * - INVALID_OPERATION: the AudioTrack is not stopped. 33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reload(); 33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 333c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent /* returns a handle on the audio output used by this AudioTrack. 334c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * 335c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * Parameters: 336c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * none. 337c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * 338c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * Returned value: 339c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent * handle on audio hardware output 340c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent */ 341c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent audio_io_handle_t getOutput(); 342c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* obtains a buffer of "frameCount" frames. The buffer must be 34489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * filled entirely. If the track is stopped, obtainBuffer() returns 34589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * STOPPED instead of NO_ERROR as long as there are buffers availlable, 34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * at which point NO_MORE_BUFFERS is returned. 34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Buffers will be returned until the pool (buffercount()) 34889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * is exhausted, at which point obtainBuffer() will either block 34989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * or return WOULD_BLOCK depending on the value of the "blocking" 35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * parameter. 35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 35289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project enum { 35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project NO_MORE_BUFFERS = 0x80000001, 35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STOPPED = 1 35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t obtainBuffer(Buffer* audioBuffer, int32_t waitCount); 35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void releaseBuffer(Buffer* audioBuffer); 36089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* As a convenience we provide a write() interface to the audio buffer. 36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * This is implemented on top of lockBuffer/unlockBuffer. For best 36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * performance 36589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 36689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 36789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ssize_t write(const void* buffer, size_t size); 36889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* 37089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Dumps the state of an audio track. 37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 37289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t dump(int fd, const Vector<String16>& args) const; 37389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 37489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate: 37589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* copying audio tracks is not allowed */ 37689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AudioTrack(const AudioTrack& other); 37789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AudioTrack& operator = (const AudioTrack& other); 37889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 37989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* a small internal class to handle the callback */ 38089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project class AudioTrackThread : public Thread 38189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 38289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public: 38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AudioTrackThread(AudioTrack& receiver, bool bCanCallJava = false); 38489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project private: 38589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project friend class AudioTrack; 38689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool threadLoop(); 38789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t readyToRun(); 38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void onFirstRef(); 38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AudioTrack& mReceiver; 39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mLock; 39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 39389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool processAudioBuffer(const sp<AudioTrackThread>& thread); 39489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioTrack> mAudioTrack; 39689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> mCblkMemory; 39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<AudioTrackThread> mAudioTrackThread; 39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 39989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project float mVolume[2]; 40089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mFrameCount; 40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 40289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project audio_track_cblk_t* mCblk; 40389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint8_t mStreamType; 40489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint8_t mFormat; 40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint8_t mChannelCount; 40689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint8_t mMuted; 407c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t mChannels; 40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t mStatus; 40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mLatency; 41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project volatile int32_t mActive; 41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 41389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project callback_t mCbf; 41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* mUserData; 41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mNotificationFrames; 41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> mSharedBuffer; 41789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mLoopCount; 41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mRemainingFrames; 41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mMarkerPosition; 4202c22aeb65e801f663a754d043062f85e49f77739Jean-Michel Trivi bool mMarkerReached; 42189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mNewPosition; 42289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mUpdatePeriod; 423c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t mFlags; 42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 42889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_AUDIOTRACK_H 430