Skip to content

Commit 512013d

Browse files
committed
Add AudioInput class
1 parent 518fa70 commit 512013d

File tree

6 files changed

+128
-0
lines changed

6 files changed

+128
-0
lines changed

src/audio/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ target_sources(scratchcpp-audio
1919
iaudiooutput.h
2020
audiooutput.cpp
2121
audiooutput.h
22+
iaudioinput.h
23+
audioinput.h
24+
audioinput.cpp
2225
iaudioloudness.h
2326
)
2427

src/audio/audioinput.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
#include "audioinput.h"
4+
5+
#ifdef LIBSCRATCHCPP_AUDIO_SUPPORT
6+
#include "internal/audioloudness.h"
7+
#else
8+
#include "internal/audioloudnessstub.h"
9+
#endif
10+
11+
using namespace libscratchcpp;
12+
13+
std::shared_ptr<IAudioInput> AudioInput::m_instance = std::make_shared<AudioInput>();
14+
15+
AudioInput::AudioInput()
16+
{
17+
}
18+
19+
std::shared_ptr<IAudioInput> AudioInput::instance()
20+
{
21+
return m_instance;
22+
}
23+
24+
std::shared_ptr<IAudioLoudness> AudioInput::audioLoudness() const
25+
{
26+
if (!m_audioLoudness) {
27+
#ifdef LIBSCRATCHCPP_AUDIO_SUPPORT
28+
m_audioLoudness = std::make_shared<AudioLoudness>();
29+
#else
30+
m_audioLoudness = std::make_shared<AudioLoudnessStub>();
31+
#endif
32+
}
33+
34+
return m_audioLoudness;
35+
}

src/audio/audioinput.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
#pragma once
4+
5+
#include <memory>
6+
7+
#include "iaudioinput.h"
8+
9+
namespace libscratchcpp
10+
{
11+
12+
class AudioInput : public IAudioInput
13+
{
14+
public:
15+
AudioInput();
16+
17+
static std::shared_ptr<IAudioInput> instance();
18+
19+
std::shared_ptr<IAudioLoudness> audioLoudness() const override;
20+
21+
private:
22+
static std::shared_ptr<IAudioInput> m_instance;
23+
24+
mutable std::shared_ptr<IAudioLoudness> m_audioLoudness;
25+
};
26+
27+
} // namespace libscratchcpp

src/audio/iaudioinput.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
#pragma once
4+
5+
#include <memory>
6+
7+
namespace libscratchcpp
8+
{
9+
10+
class IAudioLoudness;
11+
12+
class IAudioInput
13+
{
14+
15+
public:
16+
virtual ~IAudioInput() { }
17+
18+
virtual std::shared_ptr<IAudioLoudness> audioLoudness() const = 0;
19+
};
20+
21+
} // namespace libscratchcpp

test/audio/CMakeLists.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,21 @@ gtest_discover_tests(audiooutput_test)
1515
if (LIBSCRATCHCPP_AUDIO_SUPPORT)
1616
target_compile_definitions(audiooutput_test PRIVATE LIBSCRATCHCPP_AUDIO_SUPPORT)
1717
endif()
18+
19+
# audioinput_test
20+
add_executable(
21+
audioinput_test
22+
audioinput_test.cpp
23+
)
24+
25+
target_link_libraries(
26+
audioinput_test
27+
GTest::gtest_main
28+
scratchcpp
29+
)
30+
31+
gtest_discover_tests(audioinput_test)
32+
33+
if (LIBSCRATCHCPP_AUDIO_SUPPORT)
34+
target_compile_definitions(audioinput_test PRIVATE LIBSCRATCHCPP_AUDIO_SUPPORT)
35+
endif()

test/audio/audioinput_test.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include <audio/audioinput.h>
2+
3+
#ifdef LIBSCRATCHCPP_AUDIO_SUPPORT
4+
#include <audio/internal/audioloudness.h>
5+
#else
6+
#include <audio/internal/audioloudnessstub.h>
7+
#endif
8+
9+
#include "../common.h"
10+
11+
using namespace libscratchcpp;
12+
13+
TEST(AudioInputTest, Create)
14+
{
15+
auto factory = AudioInput::instance();
16+
std::shared_ptr<IAudioLoudness> audioLoudness = factory->audioLoudness();
17+
ASSERT_TRUE(audioLoudness);
18+
19+
#ifdef LIBSCRATCHCPP_AUDIO_SUPPORT
20+
ASSERT_TRUE(std::dynamic_pointer_cast<AudioLoudness>(audioLoudness));
21+
#else
22+
ASSERT_TRUE(std::dynamic_pointer_cast<AudioLoudnessStub>(audioLoudness));
23+
#endif
24+
}

0 commit comments

Comments
 (0)