Sfoglia il codice sorgente

initial implemantation of miniaudio.h

Douglas Andreani 2 anni fa
parent
commit
b05b0406cb
8 ha cambiato i file con 98 aggiunte e 4 eliminazioni
  1. 6 0
      .vscode/settings.json
  2. 0 1
      CMakeLists.txt
  3. 10 2
      main.cpp
  4. 1 0
      src/AudioInterface.h
  5. 2 1
      src/CMakeLists.txt
  6. 1 0
      src/LogAudio.cpp
  7. 38 0
      src/MiniAudio.cpp
  8. 40 0
      src/MiniAudio.h

+ 6 - 0
.vscode/settings.json

@@ -0,0 +1,6 @@
+{
+    "files.associations": {
+        "numbers": "cpp",
+        "vector": "cpp"
+    }
+}

+ 0 - 1
CMakeLists.txt

@@ -4,7 +4,6 @@ project(audio-player VERSION 0.1.0 LANGUAGES CXX)
 add_subdirectory(spdlog)
 add_subdirectory(src)
 
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/spdlog/include)
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
 

+ 10 - 2
main.cpp

@@ -1,11 +1,19 @@
 #include <spdlog/spdlog.h>
+#include <memory>
+
 
 #include "LogAudio.h"
+#include "MiniAudio.h"
 
-int main () {
 
 
-    Audio::AudioInterface *m = new Audio::LogAudio();
+int main () {
+
+#ifndef DEBUG
+    std::unique_ptr<Audio::AudioInterface> m = std::make_unique<Audio::MiniAudio>(Audio::MiniAudio());
+#else
+    std::unique_ptr<Audio::AudioInterface> m = std::make_unique<Audio::LogAudio>(Audio::LogAudio());
+#endif
     m->play();
     
     if (m->is_playing()) {

+ 1 - 0
src/AudioInterface.h

@@ -1,3 +1,4 @@
+#pragma once
 
 namespace Audio
 {

+ 2 - 1
src/CMakeLists.txt

@@ -1,6 +1,7 @@
 cmake_minimum_required(VERSION 3.20)
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../spdlog/include)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include)
 
-add_library(audio-player-lib LogAudio.cpp)
+add_library(audio-player-lib LogAudio.cpp MiniAudio.cpp)
 
 target_link_libraries(audio-player-lib spdlog)

+ 1 - 0
src/LogAudio.cpp

@@ -12,6 +12,7 @@ namespace Audio
 
     void LogAudio::pause()
     {
+        m_is_playing = false;
         spdlog::info("Paused player");
     }
  

+ 38 - 0
src/MiniAudio.cpp

@@ -0,0 +1,38 @@
+#include "MiniAudio.h"
+
+namespace Audio {
+
+    MiniAudio::MiniAudio() 
+    {
+
+        m_config = ma_device_config_init(ma_device_type_playback);
+        m_config.playback.format = ma_format_f32;
+        generate_samples();
+    }
+    
+    void MiniAudio::play() 
+    {
+
+    }
+    
+    void MiniAudio::pause()
+    {
+
+    }
+    
+    bool MiniAudio::is_playing() 
+    {
+        return false;
+    }
+
+    void MiniAudio::generate_samples() 
+    {
+        float tick = 1 / m_sample_rate;
+
+        for (float i = 0; i < 2 * PI_F; i += tick) 
+        {
+            float value = m_amplitude * sinf(2 * PI_F * m_frequency * i) / m_sample_rate;
+            m_sample.push_back(value);
+        }
+    }
+}

+ 40 - 0
src/MiniAudio.h

@@ -0,0 +1,40 @@
+#pragma once
+
+
+#include <vector>
+
+extern "C" {
+    #define MINIAUDIO_IMPLEMENTATION
+    #include <miniaudio.h>
+}
+
+#include "AudioInterface.h"
+
+namespace Audio
+{
+
+    const float  PI_F=3.14159265358979f;
+
+    class MiniAudio : public AudioInterface
+    {
+
+    private:
+        std::vector<float> m_sample;
+        bool m_is_playing = false;
+        void generate_samples();
+        float const m_frequency     = 440.0f;
+        float const m_sample_rate   = 48000.00f;
+        float const m_amplitude     = 0.8f;
+
+        ma_device_config m_config;
+        ma_device *m_device;
+
+
+    public:
+
+        MiniAudio();
+        void play() override;
+        void pause() override;
+        bool is_playing() override;
+    };
+}