/* * Copyright (c) 2014 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 "webrtc/modules/audio_coding/neteq/audio_classifier.h" #include #include #include #include #include #include "testing/gtest/include/gtest/gtest.h" #include "webrtc/test/testsupport/fileutils.h" namespace webrtc { static const size_t kFrameSize = 960; TEST(AudioClassifierTest, AllZeroInput) { int16_t in_mono[kFrameSize] = {0}; // Test all-zero vectors and let the classifier converge from its default // to the expected value. AudioClassifier zero_classifier; for (int i = 0; i < 100; ++i) { zero_classifier.Analysis(in_mono, kFrameSize, 1); } EXPECT_TRUE(zero_classifier.is_music()); } void RunAnalysisTest(const std::string& audio_filename, const std::string& data_filename, size_t channels) { AudioClassifier classifier; scoped_ptr in(new int16_t[channels * kFrameSize]); bool is_music_ref; FILE* audio_file = fopen(audio_filename.c_str(), "rb"); ASSERT_TRUE(audio_file != NULL) << "Failed to open file " << audio_filename << std::endl; FILE* data_file = fopen(data_filename.c_str(), "rb"); ASSERT_TRUE(audio_file != NULL) << "Failed to open file " << audio_filename << std::endl; while (fread(in.get(), sizeof(int16_t), channels * kFrameSize, audio_file) == channels * kFrameSize) { bool is_music = classifier.Analysis(in.get(), channels * kFrameSize, channels); EXPECT_EQ(is_music, classifier.is_music()); ASSERT_EQ(1u, fread(&is_music_ref, sizeof(is_music_ref), 1, data_file)); EXPECT_EQ(is_music_ref, is_music); } fclose(audio_file); fclose(data_file); } TEST(AudioClassifierTest, DoAnalysisMono) { RunAnalysisTest(test::ResourcePath("short_mixed_mono_48", "pcm"), test::ResourcePath("short_mixed_mono_48", "dat"), 1); } TEST(AudioClassifierTest, DoAnalysisStereo) { RunAnalysisTest(test::ResourcePath("short_mixed_stereo_48", "pcm"), test::ResourcePath("short_mixed_stereo_48", "dat"), 2); } } // namespace webrtc