diff --git a/examples/BUILD.gn b/examples/BUILD.gn index c37bcce941..c6940e8d9b 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -84,6 +84,7 @@ if (is_android) { "androidapp/src/org/appspot/apprtc/PeerConnectionClient.java", "androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java", "androidapp/src/org/appspot/apprtc/RtcEventLog.java", + "androidapp/src/org/appspot/apprtc/RecordedAudioToFileController.java", "androidapp/src/org/appspot/apprtc/SettingsActivity.java", "androidapp/src/org/appspot/apprtc/SettingsFragment.java", "androidapp/src/org/appspot/apprtc/TCPChannelClient.java", diff --git a/examples/androidapp/res/values/strings.xml b/examples/androidapp/res/values/strings.xml index 4aec2c1850..ea525ebee9 100644 --- a/examples/androidapp/res/values/strings.xml +++ b/examples/androidapp/res/values/strings.xml @@ -125,6 +125,11 @@ Enable diagnostic audio recordings. false + enable_key + Save input audio to file. + Save input audio to file. + false + opensles_preference Use OpenSL ES for audio playback. Use OpenSL ES for audio playback. diff --git a/examples/androidapp/res/xml/preferences.xml b/examples/androidapp/res/xml/preferences.xml index e8b9547b6f..6372a6eada 100644 --- a/examples/androidapp/res/xml/preferences.xml +++ b/examples/androidapp/res/xml/preferences.xml @@ -123,6 +123,12 @@ android:dialogTitle="@string/pref_aecdump_dlg" android:defaultValue="@string/pref_aecdump_default" /> + + { + if (rawAudioFileOutputStream != null) { + try { + // Set a limit on max file size. 58348800 bytes corresponds to + // approximately 10 minutes of recording in mono at 48kHz. + if (fileSizeInBytes < MAX_FILE_SIZE_IN_BYTES) { + // Writes samples.getData().length bytes to output stream. + rawAudioFileOutputStream.write(samples.getData()); + fileSizeInBytes += samples.getData().length; + } + } catch (IOException e) { + Log.e(TAG, "Failed to write audio to file: " + e.getMessage()); + } + } + }); + } +} diff --git a/examples/androidapp/src/org/appspot/apprtc/SettingsActivity.java b/examples/androidapp/src/org/appspot/apprtc/SettingsActivity.java index 152bb7d968..eea596114d 100644 --- a/examples/androidapp/src/org/appspot/apprtc/SettingsActivity.java +++ b/examples/androidapp/src/org/appspot/apprtc/SettingsActivity.java @@ -42,6 +42,7 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan private String keyPrefAudioCodec; private String keyprefNoAudioProcessing; private String keyprefAecDump; + private String keyprefEnableSaveInputAudioToFile; private String keyprefOpenSLES; private String keyprefDisableBuiltInAEC; private String keyprefDisableBuiltInAGC; @@ -84,6 +85,8 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan keyPrefAudioCodec = getString(R.string.pref_audiocodec_key); keyprefNoAudioProcessing = getString(R.string.pref_noaudioprocessing_key); keyprefAecDump = getString(R.string.pref_aecdump_key); + keyprefEnableSaveInputAudioToFile = + getString(R.string.pref_enable_save_input_audio_to_file_key); keyprefOpenSLES = getString(R.string.pref_opensles_key); keyprefDisableBuiltInAEC = getString(R.string.pref_disable_built_in_aec_key); keyprefDisableBuiltInAGC = getString(R.string.pref_disable_built_in_agc_key); @@ -140,6 +143,7 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan updateSummary(sharedPreferences, keyPrefAudioCodec); updateSummaryB(sharedPreferences, keyprefNoAudioProcessing); updateSummaryB(sharedPreferences, keyprefAecDump); + updateSummaryB(sharedPreferences, keyprefEnableSaveInputAudioToFile); updateSummaryB(sharedPreferences, keyprefOpenSLES); updateSummaryB(sharedPreferences, keyprefDisableBuiltInAEC); updateSummaryB(sharedPreferences, keyprefDisableBuiltInAGC); @@ -235,6 +239,7 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan || key.equals(keyprefFlexfec) || key.equals(keyprefNoAudioProcessing) || key.equals(keyprefAecDump) + || key.equals(keyprefEnableSaveInputAudioToFile) || key.equals(keyprefOpenSLES) || key.equals(keyprefDisableBuiltInAEC) || key.equals(keyprefDisableBuiltInAGC) diff --git a/examples/androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java b/examples/androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java index c9c74b7990..b1a3907d83 100644 --- a/examples/androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java +++ b/examples/androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java @@ -344,9 +344,10 @@ public class PeerConnectionClientTest implements PeerConnectionEvents { "OPUS", /* audioCodec */ false, /* noAudioProcessing */ false, /* aecDump */ + false, /* saveInputAudioToFile */ false /* useOpenSLES */, false /* disableBuiltInAEC */, false /* disableBuiltInAGC */, false /* disableBuiltInNS */, false /* enableLevelControl */, false /* disableWebRtcAGC */, - false /* enableRtcEventLog */); + false /* enableRtcEventLog */, null /*dataChannelParameters */); } private VideoCapturer createCameraCapturer(boolean captureToTexture) { @@ -380,9 +381,10 @@ public class PeerConnectionClientTest implements PeerConnectionEvents { "OPUS", /* audioCodec */ false, /* noAudioProcessing */ false, /* aecDump */ + false, /* saveInputAudioToFile */ false /* useOpenSLES */, false /* disableBuiltInAEC */, false /* disableBuiltInAGC */, false /* disableBuiltInNS */, false /* enableLevelControl */, false /* disableWebRtcAGC */, - false /* enableRtcEventLog */); + false /* enableRtcEventLog */, null /*dataChannelParameters */); } @Before