#include "adLog.h"
#include <media/AudioRecord.h>
#include <media/AudioTrack.h>
#include <utils/RefBase.h>
#include <sys/resource.h>
#undef LOG_TAG
#define LOG_TAG "audio_track"
#define FILEWAV "/mnt/sdcard/Place.wav"
#define MAX_BUFFER_SIZE (2*1024)
typedef struct AF_AUDIOTRACK_ATTR_S
{
//sp<AudioTrack> pAudioTrack;
unsigned char* pBuffer;
unsigned int u32WritePos;
unsigned int u32ReadPos;
pthread_mutex_t tMutex;
} AUDIOTRACK_ATTR_S;
namespace android
{
void AudioRecordTrackFun()
{
FILE *wavFile;
int num_read = 0;
// audio_source_t inputSource;
static AUDIOTRACK_ATTR_S stAudioTrackAttr;
static bool g_bSndMuteFlag;
String16 pAck = String16("mr_record");
unsigned char* pBuffer = NULL;
size_t frameCount;
size_t recordframeSize = 0;
pBuffer = (unsigned char*)malloc(MAX_BUFFER_SIZE);
sp <AudioTrack> pTrack;
sp <AudioRecord> pRecord;
memset(&stAudioTrackAttr, 0, sizeof(AUDIOTRACK_ATTR_S));
memset(pBuffer, 0, MAX_BUFFER_SIZE);
AudioTrack::getMinFrameCount(&frameCount, AUDIO_STREAM_MUSIC, 48000);
adLOGI("frameCount %d", frameCount);
AudioRecord::getMinFrameCount(&recordframeSize, 48000, AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_IN_MONO);
adLOGI("recordframeSize %d", recordframeSize);
pRecord = new AudioRecord(AUDIO_SOURCE_DEFAULT,
48000,
AUDIO_FORMAT_PCM_16_BIT,
AUDIO_CHANNEL_IN_MONO,
pAck,
recordframeSize,
NULL,
NULL,
0,
AUDIO_SESSION_ALLOCATE,
AudioRecord::TRANSFER_SYNC,
AUDIO_INPUT_FLAG_NONE,
-1,
-1,
NULL);
pTrack = new AudioTrack( AUDIO_STREAM_MUSIC,
48000,
AUDIO_FORMAT_PCM_16_BIT,
0x01,
frameCount * 2,
AUDIO_OUTPUT_FLAG_NONE,
NULL,
NULL,
0,
AUDIO_SESSION_ALLOCATE,
AudioTrack::TRANSFER_SYNC,
NULL,
-1,
-1,
NULL,
false,
1.0f);
pTrack->start();
pRecord->start();
// wavFile = fopen("/mnt/sdcard/guifei.mp3", "rb");
wavFile = fopen(FILEWAV, "rb");
if (!wavFile)
{
ALOGE("fopen failed %s", FILEWAV);
return;
}
do
{
// num_read = fread(pBuffer, 1, 1024, wavFile);
num_read = pRecord->read(pBuffer, 2048, true);
if (num_read > 0)
{
adLOGI("num_read %d", num_read);
pTrack->write(pBuffer, num_read, 1);
}
}
while (1);
//while (capturing && (num_read > 0));
free(pBuffer);
// fclose(wavFile);
}
};
using namespace android;
int capturing = 1;
void sigint_handler(int sig __unused)
{
capturing = 0;
}
int main(void)
{
AudioRecordTrackFun();
adLOGI("main end");
return 0;
}