本文整理汇总了C++中AudioTrack::setVolume方法的典型用法代码示例。如果您正苦于以下问题:C++ AudioTrack::setVolume方法的具体用法?C++ AudioTrack::setVolume怎么用?C++ AudioTrack::setVolume使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AudioTrack
的用法示例。
在下文中一共展示了AudioTrack::setVolume方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Play
status_t LibmediaPlayback::Play(int duration_secs) {
audio_channel_mask_t audio_mask =
audio_channel_out_mask_from_count(num_channels_);
const audio_stream_type_t kStreamType = AUDIO_STREAM_MUSIC;
size_t frame_count = 0; // Use default value for frame count.
audio_output_flags_t audio_output_flags = AUDIO_OUTPUT_FLAG_NONE;
AudioTrack* track = new AudioTrack(
kStreamType, sample_rate_, audio_format_, audio_mask, frame_count,
audio_output_flags, LibmediaPlayback::AudioCallback,
reinterpret_cast<void*>(this));
status_t status = track->initCheck();
if (status != OK) {
LOG(ERROR) << "Audio track initialization failed.";
return status;
}
float volume = 0.9;
track->setVolume(volume);
status = track->start();
if (status != OK) {
LOG(ERROR) << "Audio track failed to start.";
return status;
}
sleep(duration_secs);
track->stop();
if (in_file_)
sf_close(in_file_);
else
sine_data_buffer_->release();
return status;
}
示例2: _l
/**
* \brief set left/right output volume
* \param audec pointer to audec
* \param lvol refer to left volume value
* \param rvol refer to right volume value
* \return 0 on success otherwise negative error code
*/
extern "C" int android_set_lrvolume(struct aml_audio_dec* audec, float lvol,float rvol)
{
adec_print("android set left and right volume separately");
audio_out_operations_t *out_ops = &audec->aout_ops;
AudioTrack *track = (AudioTrack *)out_ops->private_data;
Mutex::Autolock _l(mLock);
if (!track) {
adec_print("No track instance!\n");
return -1;
}
track->setVolume(lvol, rvol);
return 0;
}
示例3: LOGD
status_t MediaPlayerService::AudioOutput::open(uint32_t sampleRate, int channelCount, int format, int bufferCount)
{
// Check argument "bufferCount" against the mininum buffer count
if (bufferCount < mMinBufferCount) {
LOGD("bufferCount (%d) is too small and increased to %d", bufferCount, mMinBufferCount);
bufferCount = mMinBufferCount;
}
LOGV("open(%u, %d, %d, %d)", sampleRate, channelCount, format, bufferCount);
if (mTrack) close();
int afSampleRate;
int afFrameCount;
int frameCount;
if (AudioSystem::getOutputFrameCount(&afFrameCount, mStreamType) != NO_ERROR) {
return NO_INIT;
}
if (AudioSystem::getOutputSamplingRate(&afSampleRate, mStreamType) != NO_ERROR) {
return NO_INIT;
}
frameCount = (sampleRate*afFrameCount*bufferCount)/afSampleRate;
AudioTrack *t = new AudioTrack(mStreamType, sampleRate, format, channelCount, frameCount);
if ((t == 0) || (t->initCheck() != NO_ERROR)) {
LOGE("Unable to create audio track");
delete t;
return NO_INIT;
}
LOGV("setVolume");
t->setVolume(mLeftVolume, mRightVolume);
mMsecsPerFrame = 1.e3 / (float) sampleRate;
mLatency = t->latency() + kAudioVideoDelayMs;
mTrack = t;
return NO_ERROR;
}
示例4: SNDDMA_Init
qboolean SNDDMA_Init(void)
{
if ( ! enableSound() ) {
return false;
}
gDMAByteIndex = 0;
// Initialize the AudioTrack.
status_t result = gAudioTrack.set(
AudioSystem::DEFAULT, // stream type
SAMPLE_RATE, // sample rate
BITS_PER_SAMPLE == 16 ? AudioSystem::PCM_16_BIT : AudioSystem::PCM_8_BIT, // format (8 or 16)
(CHANNEL_COUNT > 1) ? AudioSystem::CHANNEL_OUT_STEREO : AudioSystem::CHANNEL_OUT_MONO, // channel mask
0, // default buffer size
0, // flags
AndroidQuakeSoundCallback, // callback
0, // user
0); // default notification size
LOGI("AudioTrack status = %d (%s)\n", result, result == NO_ERROR ? "success" : "error");
if ( result == NO_ERROR ) {
LOGI("AudioTrack latency = %u ms\n", gAudioTrack.latency());
LOGI("AudioTrack format = %u bits\n", gAudioTrack.format() == AudioSystem::PCM_16_BIT ? 16 : 8);
LOGI("AudioTrack sample rate = %u Hz\n", gAudioTrack.getSampleRate());
LOGI("AudioTrack frame count = %d\n", int(gAudioTrack.frameCount()));
LOGI("AudioTrack channel count = %d\n", gAudioTrack.channelCount());
// Initialize Quake's idea of a DMA buffer.
shm = &sn;
memset((void*)&sn, 0, sizeof(sn));
shm->splitbuffer = false; // Not used.
shm->samplebits = gAudioTrack.format() == AudioSystem::PCM_16_BIT ? 16 : 8;
shm->speed = gAudioTrack.getSampleRate();
shm->channels = gAudioTrack.channelCount();
shm->samples = TOTAL_BUFFER_SIZE / BYTES_PER_SAMPLE;
shm->samplepos = 0; // Not used.
shm->buffer = (unsigned char*) Hunk_AllocName(TOTAL_BUFFER_SIZE, (char*) "shmbuf");
shm->submission_chunk = 1; // Not used.
shm->soundalive = true;
if ( (shm->samples & 0x1ff) != 0 ) {
LOGE("SNDDDMA_Init: samples must be power of two.");
return false;
}
if ( shm->buffer == 0 ) {
LOGE("SNDDDMA_Init: Could not allocate sound buffer.");
return false;
}
gAudioTrack.setVolume(1.0f, 1.0f);
gAudioTrack.start();
}
return result == NO_ERROR;
}
示例5: play
void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftVolume,
float rightVolume, int priority, int loop, float rate)
{
AudioTrack* oldTrack;
LOGV("play %p: sampleID=%d, channelID=%d, leftVolume=%f, rightVolume=%f, priority=%d, loop=%d, rate=%f",
this, sample->sampleID(), nextChannelID, leftVolume, rightVolume, priority, loop, rate);
// if not idle, this voice is being stolen
if (mState != IDLE) {
LOGV("channel %d stolen - event queued for channel %d", channelID(), nextChannelID);
mNextEvent.set(sample, nextChannelID, leftVolume, rightVolume, priority, loop, rate);
stop();
return;
}
// initialize track
int afFrameCount;
int afSampleRate;
int streamType = mSoundPool->streamType();
if (AudioSystem::getOutputFrameCount(&afFrameCount, streamType) != NO_ERROR) {
afFrameCount = kDefaultFrameCount;
}
if (AudioSystem::getOutputSamplingRate(&afSampleRate, streamType) != NO_ERROR) {
afSampleRate = kDefaultSampleRate;
}
int numChannels = sample->numChannels();
uint32_t sampleRate = uint32_t(float(sample->sampleRate()) * rate + 0.5);
uint32_t bufferFrames = (afFrameCount * sampleRate) / afSampleRate;
uint32_t frameCount = 0;
if (loop) {
frameCount = sample->size()/numChannels/((sample->format() == AudioSystem::PCM_16_BIT) ? sizeof(int16_t) : sizeof(uint8_t));
}
#ifndef USE_SHARED_MEM_BUFFER
// Ensure minimum audio buffer size in case of short looped sample
if(frameCount < kDefaultBufferCount * bufferFrames) {
frameCount = kDefaultBufferCount * bufferFrames;
}
#endif
AudioTrack* newTrack;
// mToggle toggles each time a track is started on a given channel.
// The toggle is concatenated with the SoundChannel address and passed to AudioTrack
// as callback user data. This enables the detection of callbacks received from the old
// audio track while the new one is being started and avoids processing them with
// wrong audio audio buffer size (mAudioBufferSize)
unsigned long toggle = mToggle ^ 1;
void *userData = (void *)((unsigned long)this | toggle);
#ifdef USE_SHARED_MEM_BUFFER
newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
numChannels, sample->getIMemory(), 0, callback, userData);
#else
newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
numChannels, frameCount, 0, callback, userData, bufferFrames);
#endif
if (newTrack->initCheck() != NO_ERROR) {
LOGE("Error creating AudioTrack");
delete newTrack;
return;
}
LOGV("setVolume %p", newTrack);
newTrack->setVolume(leftVolume, rightVolume);
newTrack->setLoop(0, frameCount, loop);
{
Mutex::Autolock lock(&mLock);
// From now on, AudioTrack callbacks recevieved with previous toggle value will be ignored.
mToggle = toggle;
oldTrack = mAudioTrack;
mAudioTrack = newTrack;
mPos = 0;
mSample = sample;
mChannelID = nextChannelID;
mPriority = priority;
mLoop = loop;
mLeftVolume = leftVolume;
mRightVolume = rightVolume;
mNumChannels = numChannels;
mRate = rate;
clearNextEvent();
mState = PLAYING;
mAudioTrack->start();
mAudioBufferSize = newTrack->frameCount()*newTrack->frameSize();
}
LOGV("delete oldTrack %p", oldTrack);
delete oldTrack;
}
示例6: event
bool Song::event(QEvent* _e)
{
if (_e->type() != QEvent::User)
return false; //ignore all events except user events, which are events from Python bridge subsystem
QPybridgeEvent* e = (QPybridgeEvent*) _e;
switch (e->getType())
{
case QPybridgeEvent::SONG_UPDATE:
this->update(e->getP1());
break;
case QPybridgeEvent::SONGLEN_CHANGE:
this->setLen(e->getP1());
break;
case QPybridgeEvent::SONG_POSCHANGE:
this->setPos(e->getP1(), e->getP2());
break;
case QPybridgeEvent::SONG_SETPLAY:
this->setPlay(true);
break;
case QPybridgeEvent::SONG_SETSTOP:
this->setStop(true);
break;
case QPybridgeEvent::SONG_REWIND:
this->rewindStart();
break;
case QPybridgeEvent::SONG_SETMUTE:
{
Track* track = this->findTrack(e->getS1());
if (track == NULL)
return false;
bool muted = e->getP1() == 1;
track->setMute(muted);
this->update(SC_MUTE | SC_TRACK_MODIFIED);
break;
}
case QPybridgeEvent::SONG_SETCTRL:
{
Track* t = this->findTrack(e->getS1());
if (t == NULL)
return false;
if (t->isMidiTrack() == false)
return false;
MidiTrack* track = (MidiTrack*) t;
int chan = track->outChannel();
int num = e->getP1();
int val = e->getP2();
int tick = song->cpos();
MidiPlayEvent ev(tick, track->outPort(), chan, ME_CONTROLLER, num, val, t);
audio->msgPlayMidiEvent(&ev);
song->update(SC_MIDI_CONTROLLER);
break;
}
case QPybridgeEvent::SONG_SETAUDIOVOL:
{
Track* t = this->findTrack(e->getS1());
if (t == NULL)
return false;
if (t->type() == Track::DRUM || t->type() == Track::MIDI)
return false;
AudioTrack* track = (AudioTrack*) t;
track->setVolume(e->getD1());
break;
}
case QPybridgeEvent::SONG_IMPORT_PART:
{
Track* track = this->findTrack(e->getS1());
QString filename = e->getS2();
unsigned int tick = e->getP1();
if (track == NULL)
return false;
oom->importPartToTrack(filename, tick, track);
break;
}
case QPybridgeEvent::SONG_TOGGLE_EFFECT:
{
Track* t = this->findTrack(e->getS1());
if (t == NULL)
return false;
if (t->type() != Track::WAVE)
return false;
int fxid = e->getP1();
int onoff = (e->getP2() == 1);
AudioTrack* track = (AudioTrack*) t;
Pipeline* pipeline = track->efxPipe();
const Pipeline* pipeline = track->efxPipe();
if(pipeline)
{
//.........这里部分代码省略.........