#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <media/AudioTrack.h>
#include "xpcm_track.h"
using namespace android;
int main(int argc, char ** argv)
{
int frame_count;
size_t buffer_size = 4096;
status_t res = 0;
FILE *fd = NULL;
sp<AudioTrack> mAudioTrack;
uint8_t audioBuff[4096];
(void)argc;
(void)argv;
mAudioTrack = new AudioTrack();
if (mAudioTrack == NULL) {
return -1;
}
AudioTrack::getMinFrameCount(&frame_count, AUDIO_STREAM_MUSIC, 48000);
res = mAudioTrack->set(AUDIO_STREAM_MUSIC, 48000, AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_OUT_STEREO, frame_count,
AUDIO_OUTPUT_FLAG_NONE,
NULL,
NULL,
0,
0,
0,
0);
printf("mAudioTrack->set() frame_count=%d res=%d\n", frame_count, res);
mAudioTrack->start();
mAudioTrack->initCheck();
fd = fopen("/data/test.pcm", "rb");
while (true) {
if (buffer_size != fread(audioBuff, 1, buffer_size, fd)) {
printf("fread() res=%d\n", buffer_size);
break;
}
res = mAudioTrack->write(audioBuff, buffer_size);
if (buffer_size != res) {
printf("mAudioTrack->write() res=%d\n", res);
}
}
mAudioTrack->stop();
fclose(fd);
return 0;
}
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
xpcm_track.cpp
LOCAL_SHARED_LIBRARIES := \
libutils libmedia
# FIXME The duplicate audioflinger is temporary
LOCAL_C_INCLUDES := \
frameworks/av/include/
LOCAL_MODULE:= xpcmtrack
include $(BUILD_EXECUTABLE)
附件是測試的 pcm
48000, AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_OUT_STEREO 這3個參數要根據實際情況調整。