Index: webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc |
diff --git a/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc b/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc |
deleted file mode 100644 |
index 141649d60bdafeb5abf19de594457b19e89ea835..0000000000000000000000000000000000000000 |
--- a/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc |
+++ /dev/null |
@@ -1,790 +0,0 @@ |
-/* |
- * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include <stdio.h> |
-#include <stdlib.h> |
-#include <string.h> |
-#ifndef _WIN32 |
-#include <unistd.h> |
-#endif |
- |
-#include <memory> |
-#include <vector> |
- |
-#include "gflags/gflags.h" |
-#include "webrtc/base/format_macros.h" |
-#include "webrtc/modules/audio_processing/include/audio_processing.h" |
-#include "webrtc/test/gtest.h" |
-#include "webrtc/test/testsupport/fileutils.h" |
-#include "webrtc/test/testsupport/trace_to_stderr.h" |
-#include "webrtc/typedefs.h" |
-#include "webrtc/voice_engine/include/voe_audio_processing.h" |
-#include "webrtc/voice_engine/include/voe_base.h" |
-#include "webrtc/voice_engine/include/voe_codec.h" |
-#include "webrtc/voice_engine/include/voe_errors.h" |
-#include "webrtc/voice_engine/include/voe_file.h" |
-#include "webrtc/voice_engine/include/voe_hardware.h" |
-#include "webrtc/voice_engine/include/voe_neteq_stats.h" |
-#include "webrtc/voice_engine/include/voe_network.h" |
-#include "webrtc/voice_engine/include/voe_rtp_rtcp.h" |
-#include "webrtc/voice_engine/include/voe_volume_control.h" |
-#include "webrtc/voice_engine/test/channel_transport/channel_transport.h" |
- |
-DEFINE_bool(use_log_file, false, |
- "Output logs to a file; by default they will be printed to stderr."); |
- |
-using namespace webrtc; |
-using namespace test; |
- |
-#define VALIDATE \ |
- if (res != 0) { \ |
- printf("*** Error at line %i \n", __LINE__); \ |
- printf("*** Error code = %i \n", base1->LastError()); \ |
- } |
- |
-VoiceEngine* m_voe = NULL; |
-VoEBase* base1 = NULL; |
-VoECodec* codec = NULL; |
-VoEVolumeControl* volume = NULL; |
-VoERTP_RTCP* rtp_rtcp = NULL; |
-VoEAudioProcessing* apm = NULL; |
-VoENetwork* netw = NULL; |
-VoEFile* file = NULL; |
-VoEHardware* hardware = NULL; |
-VoENetEqStats* neteqst = NULL; |
- |
-void RunTest(std::string out_path); |
- |
-class MyObserver : public VoiceEngineObserver { |
- public: |
- virtual void CallbackOnError(int channel, int err_code); |
-}; |
- |
-void MyObserver::CallbackOnError(int channel, int err_code) { |
- // Add printf for other error codes here |
- if (err_code == VE_TYPING_NOISE_WARNING) { |
- printf(" TYPING NOISE DETECTED \n"); |
- } else if (err_code == VE_TYPING_NOISE_OFF_WARNING) { |
- printf(" TYPING NOISE OFF DETECTED \n"); |
- } else if (err_code == VE_RECEIVE_PACKET_TIMEOUT) { |
- printf(" RECEIVE PACKET TIMEOUT \n"); |
- } else if (err_code == VE_PACKET_RECEIPT_RESTARTED) { |
- printf(" PACKET RECEIPT RESTARTED \n"); |
- } else if (err_code == VE_RUNTIME_PLAY_WARNING) { |
- printf(" RUNTIME PLAY WARNING \n"); |
- } else if (err_code == VE_RUNTIME_REC_WARNING) { |
- printf(" RUNTIME RECORD WARNING \n"); |
- } else if (err_code == VE_RUNTIME_PLAY_ERROR) { |
- printf(" RUNTIME PLAY ERROR \n"); |
- } else if (err_code == VE_RUNTIME_REC_ERROR) { |
- printf(" RUNTIME RECORD ERROR \n"); |
- } else if (err_code == VE_REC_DEVICE_REMOVED) { |
- printf(" RECORD DEVICE REMOVED \n"); |
- } |
-} |
- |
-void SetStereoIfOpus(bool use_stereo, CodecInst* codec_params) { |
- if (strncmp(codec_params->plname, "opus", 4) == 0) { |
- if (use_stereo) |
- codec_params->channels = 2; |
- else |
- codec_params->channels = 1; |
- } |
-} |
- |
-void PrintCodecs(bool opus_stereo) { |
- CodecInst codec_params; |
- for (int i = 0; i < codec->NumOfCodecs(); ++i) { |
- int res = codec->GetCodec(i, codec_params); |
- VALIDATE; |
- SetStereoIfOpus(opus_stereo, &codec_params); |
- printf("%2d. %3d %s/%d/%" PRIuS " \n", i, codec_params.pltype, |
- codec_params.plname, codec_params.plfreq, codec_params.channels); |
- } |
-} |
- |
-int main(int argc, char** argv) { |
- google::ParseCommandLineFlags(&argc, &argv, true); |
- |
- int res = 0; |
- |
- printf("Test started \n"); |
- |
- m_voe = VoiceEngine::Create(); |
- base1 = VoEBase::GetInterface(m_voe); |
- codec = VoECodec::GetInterface(m_voe); |
- apm = VoEAudioProcessing::GetInterface(m_voe); |
- volume = VoEVolumeControl::GetInterface(m_voe); |
- rtp_rtcp = VoERTP_RTCP::GetInterface(m_voe); |
- netw = VoENetwork::GetInterface(m_voe); |
- file = VoEFile::GetInterface(m_voe); |
- hardware = VoEHardware::GetInterface(m_voe); |
- neteqst = VoENetEqStats::GetInterface(m_voe); |
- |
- MyObserver my_observer; |
- |
- std::unique_ptr<test::TraceToStderr> trace_to_stderr; |
- if (!FLAGS_use_log_file) { |
- trace_to_stderr.reset(new test::TraceToStderr); |
- } else { |
- const std::string trace_filename = test::OutputPath() + "webrtc_trace.txt"; |
- VoiceEngine::SetTraceFilter(kTraceAll); |
- res = VoiceEngine::SetTraceFile(trace_filename.c_str()); |
- VALIDATE; |
- res = VoiceEngine::SetTraceCallback(NULL); |
- VALIDATE; |
- printf("Outputting logs to file: %s\n", trace_filename.c_str()); |
- } |
- |
- printf("Init\n"); |
- res = base1->Init(); |
- if (res != 0) { |
- printf("\nError calling Init: %d\n", base1->LastError()); |
- fflush(NULL); |
- exit(1); |
- } |
- |
- res = base1->RegisterVoiceEngineObserver(my_observer); |
- VALIDATE; |
- |
- printf("Version\n"); |
- char tmp[1024]; |
- res = base1->GetVersion(tmp); |
- VALIDATE; |
- printf("%s\n", tmp); |
- |
- RunTest(test::OutputPath()); |
- |
- printf("Terminate \n"); |
- |
- base1->DeRegisterVoiceEngineObserver(); |
- |
- res = base1->Terminate(); |
- VALIDATE; |
- |
- if (base1) |
- base1->Release(); |
- |
- if (codec) |
- codec->Release(); |
- |
- if (volume) |
- volume->Release(); |
- |
- if (rtp_rtcp) |
- rtp_rtcp->Release(); |
- |
- if (apm) |
- apm->Release(); |
- |
- if (netw) |
- netw->Release(); |
- |
- if (file) |
- file->Release(); |
- |
- if (hardware) |
- hardware->Release(); |
- |
- if (neteqst) |
- neteqst->Release(); |
- |
- VoiceEngine::Delete(m_voe); |
- |
- return 0; |
-} |
- |
-void RunTest(std::string out_path) { |
- int chan, res; |
- CodecInst cinst; |
- bool enable_aec = false; |
- bool enable_agc = false; |
- bool enable_cng = false; |
- bool enable_ns = false; |
- bool typing_detection = false; |
- bool muted = false; |
- bool opus_stereo = false; |
- bool opus_dtx = false; |
- bool experimental_ns_enabled = false; |
- bool debug_recording_started = false; |
- |
- const std::string audio_filename = |
- webrtc::test::ResourcePath("voice_engine/audio_long16", "pcm"); |
- |
- const std::string play_filename = out_path + "recorded_playout.pcm"; |
- const std::string mic_filename = out_path + "recorded_mic.pcm"; |
- |
- chan = base1->CreateChannel(); |
- if (chan < 0) { |
- printf("************ Error code = %i\n", base1->LastError()); |
- fflush(NULL); |
- } |
- |
- VoiceChannelTransport* voice_channel_transport( |
- new VoiceChannelTransport(netw, chan)); |
- |
- char ip[64]; |
- printf("1. 127.0.0.1 \n"); |
- printf("2. Specify IP \n"); |
- int ip_selection; |
- ASSERT_EQ(1, scanf("%i", &ip_selection)); |
- |
- if (ip_selection == 1) { |
- strcpy(ip, "127.0.0.1"); |
- } else { |
- printf("Specify remote IP: "); |
- ASSERT_EQ(1, scanf("%s", ip)); |
- } |
- |
- int rPort; |
- printf("Specify remote port (1=1234): "); |
- ASSERT_EQ(1, scanf("%i", &rPort)); |
- if (1 == rPort) |
- rPort = 1234; |
- printf("Set Send port \n"); |
- |
- printf("Set Send IP \n"); |
- res = voice_channel_transport->SetSendDestination(ip, rPort); |
- VALIDATE; |
- |
- int lPort; |
- printf("Specify local port (1=1234): "); |
- ASSERT_EQ(1, scanf("%i", &lPort)); |
- if (1 == lPort) |
- lPort = 1234; |
- printf("Set Rec Port \n"); |
- |
- res = voice_channel_transport->SetLocalReceiver(lPort); |
- VALIDATE; |
- |
- printf("\n"); |
- PrintCodecs(opus_stereo); |
- printf("Select send codec: "); |
- int codec_selection; |
- ASSERT_EQ(1, scanf("%i", &codec_selection)); |
- codec->GetCodec(codec_selection, cinst); |
- |
- printf("Set primary codec\n"); |
- SetStereoIfOpus(opus_stereo, &cinst); |
- res = codec->SetSendCodec(chan, cinst); |
- VALIDATE; |
- |
- const int kMaxNumChannels = 8; |
- int channel_index = 0; |
- std::vector<int> channels(kMaxNumChannels); |
- std::vector<VoiceChannelTransport*> voice_channel_transports(kMaxNumChannels); |
- |
- for (int i = 0; i < kMaxNumChannels; ++i) { |
- channels[i] = base1->CreateChannel(); |
- int port = rPort + (i + 1) * 2; |
- |
- voice_channel_transports[i] = new VoiceChannelTransport(netw, channels[i]); |
- |
- res = voice_channel_transports[i]->SetSendDestination(ip, port); |
- VALIDATE; |
- res = voice_channel_transports[i]->SetLocalReceiver(port); |
- VALIDATE; |
- res = codec->SetSendCodec(channels[i], cinst); |
- VALIDATE; |
- } |
- |
- // Call loop |
- bool newcall = true; |
- while (newcall) { |
- int rd(-1), pd(-1); |
- res = hardware->GetNumOfRecordingDevices(rd); |
- VALIDATE; |
- res = hardware->GetNumOfPlayoutDevices(pd); |
- VALIDATE; |
- |
- char dn[128] = { 0 }; |
- char guid[128] = { 0 }; |
- printf("\nPlayout devices (%d): \n", pd); |
- for (int j = 0; j < pd; ++j) { |
- res = hardware->GetPlayoutDeviceName(j, dn, guid); |
- VALIDATE; |
- printf(" %d: %s \n", j, dn); |
- } |
- |
- printf("Recording devices (%d): \n", rd); |
- for (int j = 0; j < rd; ++j) { |
- res = hardware->GetRecordingDeviceName(j, dn, guid); |
- VALIDATE; |
- printf(" %d: %s \n", j, dn); |
- } |
- |
- printf("Select playout device: "); |
- ASSERT_EQ(1, scanf("%d", &pd)); |
- res = hardware->SetPlayoutDevice(pd); |
- VALIDATE; |
- printf("Select recording device: "); |
- ASSERT_EQ(1, scanf("%d", &rd)); |
- printf("Setting sound devices \n"); |
- res = hardware->SetRecordingDevice(rd); |
- VALIDATE; |
- |
- res = codec->SetVADStatus(0, enable_cng); |
- VALIDATE; |
- |
- res = apm->SetAgcStatus(enable_agc); |
- VALIDATE; |
- |
- res = apm->SetEcStatus(enable_aec); |
- VALIDATE; |
- |
- res = apm->SetNsStatus(enable_ns); |
- VALIDATE; |
- |
- printf("\n1. Send, listen and playout \n"); |
- printf("2. Send only \n"); |
- printf("3. Listen and playout only \n"); |
- printf("Select transfer mode: "); |
- int call_selection; |
- ASSERT_EQ(1, scanf("%i", &call_selection)); |
- const bool send = !(call_selection == 3); |
- const bool receive = !(call_selection == 2); |
- |
- if (receive) { |
- printf("Start Playout \n"); |
- res = base1->StartPlayout(chan); |
- VALIDATE; |
- } |
- |
- if (send) { |
- printf("Start Send \n"); |
- res = base1->StartSend(chan); |
- VALIDATE; |
- } |
- |
- printf("Getting mic volume \n"); |
- unsigned int vol = 999; |
- res = volume->GetMicVolume(vol); |
- VALIDATE; |
- if ((vol > 255) || (vol < 1)) { |
- printf("\n****ERROR in GetMicVolume"); |
- } |
- |
- int forever = 1; |
- while (forever) { |
- printf("\nSelect codec\n"); |
- PrintCodecs(opus_stereo); |
- printf("\nOther actions\n"); |
- const int num_codecs = codec->NumOfCodecs(); |
- int option_index = num_codecs; |
- printf("%i. Toggle CNG\n", option_index++); |
- printf("%i. Toggle AGC\n", option_index++); |
- printf("%i. Toggle NS\n", option_index++); |
- printf("%i. Toggle experimental NS\n", option_index++); |
- printf("%i. Toggle EC\n", option_index++); |
- printf("%i. Select AEC\n", option_index++); |
- printf("%i. Select AECM\n", option_index++); |
- printf("%i. Get speaker volume\n", option_index++); |
- printf("%i. Set speaker volume\n", option_index++); |
- printf("%i. Get microphone volume\n", option_index++); |
- printf("%i. Set microphone volume\n", option_index++); |
- printf("%i. Play local file (audio_long16.pcm) \n", option_index++); |
- printf("%i. Change playout device \n", option_index++); |
- printf("%i. Change recording device \n", option_index++); |
- printf("%i. Toggle receive-side AGC \n", option_index++); |
- printf("%i. Toggle receive-side NS \n", option_index++); |
- printf("%i. AGC status \n", option_index++); |
- printf("%i. Toggle microphone mute \n", option_index++); |
- printf("%i. Get last error code \n", option_index++); |
- printf("%i. Toggle typing detection \n", |
- option_index++); |
- printf("%i. Record a PCM file \n", option_index++); |
- printf("%i. Play a previously recorded PCM file locally \n", |
- option_index++); |
- printf("%i. Play a previously recorded PCM file as microphone \n", |
- option_index++); |
- printf("%i. Add an additional file-playing channel \n", option_index++); |
- printf("%i. Remove a file-playing channel \n", option_index++); |
- printf("%i. Toggle Opus stereo (Opus must be selected again to apply " |
- "the setting) \n", option_index++); |
- printf("%i. Set Opus maximum playback rate \n", option_index++); |
- printf("%i. Toggle Opus DTX \n", option_index++); |
- printf("%i. Set bit rate (only take effect on codecs that allow the " |
- "change) \n", option_index++); |
- printf("%i. Toggle AECdump recording \n", option_index++); |
- |
- printf("Select action or %i to stop the call: ", option_index); |
- int option_selection; |
- ASSERT_EQ(1, scanf("%i", &option_selection)); |
- |
- option_index = num_codecs; |
- if (option_selection < option_index) { |
- res = codec->GetCodec(option_selection, cinst); |
- VALIDATE; |
- SetStereoIfOpus(opus_stereo, &cinst); |
- printf("Set primary codec\n"); |
- res = codec->SetSendCodec(chan, cinst); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- enable_cng = !enable_cng; |
- res = codec->SetVADStatus(0, enable_cng); |
- VALIDATE; |
- if (enable_cng) |
- printf("\n CNG is now on! \n"); |
- else |
- printf("\n CNG is now off! \n"); |
- } else if (option_selection == option_index++) { |
- enable_agc = !enable_agc; |
- res = apm->SetAgcStatus(enable_agc); |
- VALIDATE; |
- if (enable_agc) |
- printf("\n AGC is now on! \n"); |
- else |
- printf("\n AGC is now off! \n"); |
- } else if (option_selection == option_index++) { |
- enable_ns = !enable_ns; |
- res = apm->SetNsStatus(enable_ns); |
- VALIDATE; |
- if (enable_ns) |
- printf("\n NS is now on! \n"); |
- else |
- printf("\n NS is now off! \n"); |
- } else if (option_selection == option_index++) { |
- experimental_ns_enabled = !experimental_ns_enabled; |
- Config config; |
- config.Set<ExperimentalNs>(new ExperimentalNs(experimental_ns_enabled)); |
- base1->audio_processing()->SetExtraOptions(config); |
- if (experimental_ns_enabled) { |
- printf("\n Experimental NS is now on!\n"); |
- } else { |
- printf("\n Experimental NS is now off!\n"); |
- } |
- } else if (option_selection == option_index++) { |
- enable_aec = !enable_aec; |
- res = apm->SetEcStatus(enable_aec, kEcUnchanged); |
- VALIDATE; |
- if (enable_aec) |
- printf("\n Echo control is now on! \n"); |
- else |
- printf("\n Echo control is now off! \n"); |
- } else if (option_selection == option_index++) { |
- res = apm->SetEcStatus(enable_aec, kEcAec); |
- VALIDATE; |
- printf("\n AEC selected! \n"); |
- if (enable_aec) |
- printf(" (Echo control is on)\n"); |
- else |
- printf(" (Echo control is off)\n"); |
- } else if (option_selection == option_index++) { |
- res = apm->SetEcStatus(enable_aec, kEcAecm); |
- VALIDATE; |
- printf("\n AECM selected! \n"); |
- if (enable_aec) |
- printf(" (Echo control is on)\n"); |
- else |
- printf(" (Echo control is off)\n"); |
- } else if (option_selection == option_index++) { |
- unsigned vol(0); |
- res = volume->GetSpeakerVolume(vol); |
- VALIDATE; |
- printf("\n Speaker Volume is %d \n", vol); |
- } else if (option_selection == option_index++) { |
- printf("Level: "); |
- int level; |
- ASSERT_EQ(1, scanf("%i", &level)); |
- res = volume->SetSpeakerVolume(level); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- unsigned vol(0); |
- res = volume->GetMicVolume(vol); |
- VALIDATE; |
- printf("\n Microphone Volume is %d \n", vol); |
- } else if (option_selection == option_index++) { |
- printf("Level: "); |
- int level; |
- ASSERT_EQ(1, scanf("%i", &level)); |
- res = volume->SetMicVolume(level); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- res = file->StartPlayingFileLocally(0, audio_filename.c_str()); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- // change the playout device with current call |
- int num_pd(-1); |
- res = hardware->GetNumOfPlayoutDevices(num_pd); |
- VALIDATE; |
- |
- char dn[128] = { 0 }; |
- char guid[128] = { 0 }; |
- |
- printf("\nPlayout devices (%d): \n", num_pd); |
- for (int i = 0; i < num_pd; ++i) { |
- res = hardware->GetPlayoutDeviceName(i, dn, guid); |
- VALIDATE; |
- printf(" %d: %s \n", i, dn); |
- } |
- printf("Select playout device: "); |
- ASSERT_EQ(1, scanf("%d", &num_pd)); |
- // Will use plughw for hardware devices |
- res = hardware->SetPlayoutDevice(num_pd); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- // change the recording device with current call |
- int num_rd(-1); |
- |
- res = hardware->GetNumOfRecordingDevices(num_rd); |
- VALIDATE; |
- |
- char dn[128] = { 0 }; |
- char guid[128] = { 0 }; |
- |
- printf("Recording devices (%d): \n", num_rd); |
- for (int i = 0; i < num_rd; ++i) { |
- res = hardware->GetRecordingDeviceName(i, dn, guid); |
- VALIDATE; |
- printf(" %d: %s \n", i, dn); |
- } |
- |
- printf("Select recording device: "); |
- ASSERT_EQ(1, scanf("%d", &num_rd)); |
- printf("Setting sound devices \n"); |
- // Will use plughw for hardware devices |
- res = hardware->SetRecordingDevice(num_rd); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- AgcModes agcmode; |
- bool enable; |
- res = apm->GetAgcStatus(enable, agcmode); |
- VALIDATE |
- printf("\n AGC enable is %d, mode is %d \n", enable, agcmode); |
- } else if (option_selection == option_index++) { |
- // Toggle Mute on Microphone |
- res = volume->GetInputMute(chan, muted); |
- VALIDATE; |
- muted = !muted; |
- res = volume->SetInputMute(chan, muted); |
- VALIDATE; |
- if (muted) |
- printf("\n Microphone is now on mute! \n"); |
- else |
- printf("\n Microphone is no longer on mute! \n"); |
- } else if (option_selection == option_index++) { |
- // Get the last error code and print to screen |
- int err_code = 0; |
- err_code = base1->LastError(); |
- if (err_code != -1) |
- printf("\n The last error code was %i.\n", err_code); |
- } else if (option_selection == option_index++) { |
- typing_detection= !typing_detection; |
- res = apm->SetTypingDetectionStatus(typing_detection); |
- VALIDATE; |
- if (typing_detection) |
- printf("\n Typing detection is now on!\n"); |
- else |
- printf("\n Typing detection is now off!\n"); |
- } else if (option_selection == option_index++) { |
- int stop_record = 1; |
- int file_source = 1; |
- printf("\n Select source of recorded file. "); |
- printf("\n 1. Record from microphone to file "); |
- printf("\n 2. Record from playout to file "); |
- printf("\n Enter your selection: \n"); |
- ASSERT_EQ(1, scanf("%i", &file_source)); |
- if (file_source == 1) { |
- printf("\n Start recording microphone as %s \n", |
- mic_filename.c_str()); |
- res = file->StartRecordingMicrophone(mic_filename.c_str()); |
- VALIDATE; |
- } else { |
- printf("\n Start recording playout as %s \n", play_filename.c_str()); |
- res = file->StartRecordingPlayout(chan, play_filename.c_str()); |
- VALIDATE; |
- } |
- while (stop_record != 0) { |
- printf("\n Type 0 to stop recording file \n"); |
- ASSERT_EQ(1, scanf("%i", &stop_record)); |
- } |
- if (file_source == 1) { |
- res = file->StopRecordingMicrophone(); |
- VALIDATE; |
- } else { |
- res = file->StopRecordingPlayout(chan); |
- VALIDATE; |
- } |
- printf("\n File finished recording \n"); |
- } else if (option_selection == option_index++) { |
- int file_type = 1; |
- int stop_play = 1; |
- printf("\n Select a file to play locally in a loop."); |
- printf("\n 1. Play %s", mic_filename.c_str()); |
- printf("\n 2. Play %s", play_filename.c_str()); |
- printf("\n Enter your selection\n"); |
- ASSERT_EQ(1, scanf("%i", &file_type)); |
- if (file_type == 1) { |
- printf("\n Start playing %s locally in a loop\n", |
- mic_filename.c_str()); |
- res = file->StartPlayingFileLocally(chan, mic_filename.c_str(), true); |
- VALIDATE; |
- } else { |
- printf("\n Start playing %s locally in a loop\n", |
- play_filename.c_str()); |
- res = file->StartPlayingFileLocally(chan, play_filename.c_str(), |
- true); |
- VALIDATE; |
- } |
- while (stop_play != 0) { |
- printf("\n Type 0 to stop playing file\n"); |
- ASSERT_EQ(1, scanf("%i", &stop_play)); |
- } |
- res = file->StopPlayingFileLocally(chan); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- int file_type = 1; |
- int stop_play = 1; |
- printf("\n Select a file to play as microphone in a loop."); |
- printf("\n 1. Play %s", mic_filename.c_str()); |
- printf("\n 2. Play %s", play_filename.c_str()); |
- printf("\n Enter your selection\n"); |
- ASSERT_EQ(1, scanf("%i", &file_type)); |
- if (file_type == 1) { |
- printf("\n Start playing %s as mic in a loop\n", |
- mic_filename.c_str()); |
- res = file->StartPlayingFileAsMicrophone(chan, mic_filename.c_str(), |
- true); |
- VALIDATE; |
- } else { |
- printf("\n Start playing %s as mic in a loop\n", |
- play_filename.c_str()); |
- res = file->StartPlayingFileAsMicrophone(chan, play_filename.c_str(), |
- true); |
- VALIDATE; |
- } |
- while (stop_play != 0) { |
- printf("\n Type 0 to stop playing file\n"); |
- ASSERT_EQ(1, scanf("%i", &stop_play)); |
- } |
- res = file->StopPlayingFileAsMicrophone(chan); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- if (channel_index < kMaxNumChannels) { |
- res = base1->StartPlayout(channels[channel_index]); |
- VALIDATE; |
- res = base1->StartSend(channels[channel_index]); |
- VALIDATE; |
- res = file->StartPlayingFileAsMicrophone(channels[channel_index], |
- audio_filename.c_str(), |
- true, |
- false); |
- VALIDATE; |
- channel_index++; |
- printf("Using %d additional channels\n", channel_index); |
- } else { |
- printf("Max number of channels reached\n"); |
- } |
- } else if (option_selection == option_index++) { |
- if (channel_index > 0) { |
- channel_index--; |
- res = file->StopPlayingFileAsMicrophone(channels[channel_index]); |
- VALIDATE; |
- res = base1->StopSend(channels[channel_index]); |
- VALIDATE; |
- res = base1->StopPlayout(channels[channel_index]); |
- VALIDATE; |
- printf("Using %d additional channels\n", channel_index); |
- } else { |
- printf("All additional channels stopped\n"); |
- } |
- } else if (option_selection == option_index++) { |
- opus_stereo = !opus_stereo; |
- if (opus_stereo) |
- printf("\n Opus stereo enabled (select Opus again to apply the " |
- "setting). \n"); |
- else |
- printf("\n Opus mono enabled (select Opus again to apply the " |
- "setting). \n"); |
- } else if (option_selection == option_index++) { |
- printf("\n Input maxium playback rate in Hz: "); |
- int max_playback_rate; |
- ASSERT_EQ(1, scanf("%i", &max_playback_rate)); |
- res = codec->SetOpusMaxPlaybackRate(chan, max_playback_rate); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- opus_dtx = !opus_dtx; |
- res = codec->SetOpusDtx(chan, opus_dtx); |
- VALIDATE; |
- printf("Opus DTX %s.\n", opus_dtx ? "enabled" : "disabled"); |
- } else if (option_selection == option_index++) { |
- res = codec->GetSendCodec(chan, cinst); |
- VALIDATE; |
- printf("Current bit rate is %i bps, set to: ", cinst.rate); |
- int new_bitrate_bps; |
- ASSERT_EQ(1, scanf("%i", &new_bitrate_bps)); |
- res = codec->SetBitRate(chan, new_bitrate_bps); |
- VALIDATE; |
- } else if (option_selection == option_index++) { |
- const char* kDebugFileName = "audio.aecdump"; |
- if (debug_recording_started) { |
- apm->StopDebugRecording(); |
- printf("Debug recording named %s stopped\n", kDebugFileName); |
- } else { |
- apm->StartDebugRecording(kDebugFileName); |
- printf("Debug recording named %s started\n", kDebugFileName); |
- } |
- debug_recording_started = !debug_recording_started; |
- } else { |
- break; |
- } |
- } |
- |
- if (debug_recording_started) { |
- apm->StopDebugRecording(); |
- } |
- |
- if (send) { |
- printf("Stop Send \n"); |
- res = base1->StopSend(chan); |
- VALIDATE; |
- } |
- |
- if (receive) { |
- printf("Stop Playout \n"); |
- res = base1->StopPlayout(chan); |
- VALIDATE; |
- } |
- |
- while (channel_index > 0) { |
- --channel_index; |
- res = file->StopPlayingFileAsMicrophone(channels[channel_index]); |
- VALIDATE; |
- res = base1->StopSend(channels[channel_index]); |
- VALIDATE; |
- res = base1->StopPlayout(channels[channel_index]); |
- VALIDATE; |
- } |
- |
- printf("\n1. New call \n"); |
- printf("2. Quit \n"); |
- printf("Select action: "); |
- int end_option; |
- ASSERT_EQ(1, scanf("%i", &end_option)); |
- newcall = (end_option == 1); |
- // Call loop |
- } |
- |
- // Transports should be deleted before channel deletion. |
- delete voice_channel_transport; |
- for (int i = 0; i < kMaxNumChannels; ++i) { |
- delete voice_channel_transports[i]; |
- voice_channel_transports[i] = NULL; |
- } |
- |
- printf("Delete channels \n"); |
- res = base1->DeleteChannel(chan); |
- VALIDATE; |
- |
- for (int i = 0; i < kMaxNumChannels; ++i) { |
- res = base1->DeleteChannel(channels[i]); |
- VALIDATE; |
- } |
-} |