[HELP] Capturing audio data and save to raw PCM file in AudioFlinger

After some research, I find out this is possible to capture the audio data in libaudioflinger of Android.

I think the audio data is being written to HAL in here:

Code:
ssize_t framesWritten = mNormalSink->write((char *)mSinkBuffer + offset, count);

Full code: android.googlesource.com/platform/frameworks/av/+/lollipop-release/services/audioflinger/Threads.cpp#2118
I'm sorry, XDA don't let me to post the link. So I need to remove the https.

So, I would like to save the

Code:
mSinkBuffer + offset

to a file (which I expected it will be raw PCM audio file). I using those stream to write it to file:

Code:
std::ofstream audioData ("/data/audiodata.raw", std::fstream::app); audioData.write((char *)mSinkBuffer + offset, count); audioData.close();

The file is successfully written and it has data in it. But, when I play the PCM file (audiodata.raw) with aplay or ffplay, the only sound I got is noise.

Code:
aplay -t raw -c 2 -f S16_LE -r 48000 audiodata.raw

I was worry about the config of aplay. So I print some log of the libaudioflinger:

Code:
10-07 10:14:54.575 1300 1366 I AudioFlinger: I/O handle: 13 10-07 10:14:54.575 1300 1366 I AudioFlinger: Standby: no 10-07 10:14:54.575 1300 1366 I AudioFlinger: Sample rate: 48000 Hz 10-07 10:14:54.575 1300 1366 I AudioFlinger: HAL frame count: 512 10-07 10:14:54.575 1300 1366 I AudioFlinger: HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT) 10-07 10:14:54.575 1300 1366 I AudioFlinger: HAL buffer size: 2048 bytes 10-07 10:14:54.575 1300 1366 I AudioFlinger: Channel count: 2 10-07 10:14:54.575 1300 1366 I AudioFlinger: Channel mask: 0x00000003 (front-left, front-right) 10-07 10:14:54.575 1300 1366 I AudioFlinger: Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT) 10-07 10:14:54.576 1300 1366 I AudioFlinger: Processing frame size: 8 bytes 10-07 10:14:54.576 1300 1366 I AudioFlinger: Pending config events: 10-07 10:14:54.576 1300 1366 I AudioFlinger: none 10-07 10:14:54.576 1300 1366 I AudioFlinger: Output device: 0x2 (AUDIO_DEVICE_OUT_SPEAKER) 10-07 10:14:54.576 1300 1366 I AudioFlinger: Input device: 0 (AUDIO_DEVICE_NONE) 10-07 10:14:54.576 1300 1366 I AudioFlinger: Audio source: 0 (default)

I don't know what I did wrong. I have no idea why I only get the noise when play the file.

Any suggestion is much appreciated. Thank you in advanced!

Show Accepted Answer

Guest Quick Reply (No URL, BBcode or HTML)

Removed
Started by braun.rhoda
Last post by antone.cole
3 hours ago
Last post by nlang
1 hour ago
Last post by alyson11
1 hour ago
Last post by kirlin.kobe
4 hours ago
Last post by uwaters
56 minutes ago
Last post by ynolan
2 hours ago
Last post by hill.isai
1 hour ago
Last post by anderson12
4 hours ago
Last post by freeman18
3 hours ago
Last post by wunsch.archibald
3 hours ago
Last post by fadel.laverne
4 hours ago
Last post by ambrose18
4 hours ago
Last post by nathanael.heaney
50 minutes ago