Browse Source

V0.9
1、添加了声卡相关的工程

Apple 2 months ago
parent
commit
7f1175e755

+ 4 - 3
CMakeLists.txt

@@ -196,8 +196,9 @@ file(GLOB GLOBAL_SRC
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/xlsx)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/DesignerPattern)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/ViewModel)
-add_subdirectory(${CMAKE_SOURCE_DIR}/demo/OpenGLWidgetLibrary)
+# add_subdirectory(${CMAKE_SOURCE_DIR}/demo/OpenGLWidgetLibrary)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayerGL)
-add_subdirectory(${CMAKE_SOURCE_DIR}/demo/OpenGLWidgetTest)
-add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayerLibrary)
+# add_subdirectory(${CMAKE_SOURCE_DIR}/demo/OpenGLWidgetTest)
+# add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayerLibrary)
+add_subdirectory(${CMAKE_SOURCE_DIR}/demo/RecordAudio)
 

+ 87 - 0
demo/RecordAudio/CMakeLists.txt

@@ -0,0 +1,87 @@
+cmake_minimum_required(VERSION 3.10)
+
+set(this_exe RecordAudio)
+
+
+
+#包含源文件
+file(GLOB LOCAL_SRC
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.qrc
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.rc
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.ui
+
+    ${CMAKE_SOURCE_DIR}/External/module/Logs/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/module/ThreadPool/*.cpp
+    ${VideoPlayer_SOURCE_DIR}/*.cpp
+)
+
+
+# 生成可执行程序
+
+add_executable(${this_exe}
+    # WIN32
+    ${GLOBAL_SRC}
+    ${LOCAL_SRC} 
+)
+
+# set_target_properties(${this_exe} PROPERTIES
+    
+# )
+
+
+#添加头文件
+target_include_directories(${this_exe} PRIVATE
+
+    ${CMAKE_CURRENT_SOURCE_DIR}
+
+    ${CMAKE_SOURCE_DIR}/External/common
+    ${CMAKE_SOURCE_DIR}/External/module
+    ${CMAKE_SOURCE_DIR}/External/module/ThreadPool
+    ${CMAKE_SOURCE_DIR}/External/module/RingQueue
+    
+    ${spdlog_INCLUDE_DIR}
+    # ${FFMPEG_INCLUDE_DIR}
+)
+
+
+target_link_libraries(${this_exe} PRIVATE
+    Qt${QT_VERSION_MAJOR}::Widgets
+    Qt${QT_VERSION_MAJOR}::Core
+    Qt${QT_VERSION_MAJOR}::Network
+)
+
+target_link_libraries(${this_exe} PRIVATE
+    # ${FFMPEG_LIBRARY}
+    ${spdlog_LIBRARY}
+
+    asound
+)
+
+
+# if(CMAKE_CXX_COMPILER_VERSION LESS 9.0)
+#     target_link_libraries(${this_exe} PRIVATE
+#         stdc++fs
+#     )
+# endif()
+
+
+
+# target_link_libraries(${this_exe} PRIVATE
+#     GL
+#     GUL
+# )
+# message(STATUS "CURL_LIBRARY: ${CURL_LIBRARY}")
+
+
+# if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
+#     target_link_libraries(${this_exe} PRIVATE
+#         # debug spdlogd.lib
+#         # optimized spdlog.lib
+#     )
+# elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU)
+#     target_link_libraries(${this_exe} PRIVATE
+#         # debug 
+#         # optimized ${SM_DLL}
+#     )
+# endif()

+ 86 - 0
demo/RecordAudio/RecordAudio.cpp

@@ -0,0 +1,86 @@
+#include "RecordAudio.h"
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <alsa/asoundlib.h>
+
+
+void record(int argc, char *argv[])
+{
+	uint32_t sample_rate = 44100;
+	uint32_t channels = 2;
+	int i;
+	int err;
+	short buf[128];
+	snd_pcm_t *capture_handle;
+	snd_pcm_hw_params_t *hw_params;
+
+	if ((err = snd_pcm_open (&capture_handle, argv[1], SND_PCM_STREAM_CAPTURE, 0)) < 0) {
+		fprintf (stderr, "cannot open audio device %s (%s)\n", 
+			 argv[1],
+			 snd_strerror (err));
+		exit (1);
+	}
+	   
+	if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0) {
+		fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n",
+			 snd_strerror (err));
+		exit (1);
+	}
+			 
+	if ((err = snd_pcm_hw_params_any (capture_handle, hw_params)) < 0) {
+		fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n",
+			 snd_strerror (err));
+		exit (1);
+	}
+
+	if ((err = snd_pcm_hw_params_set_access (capture_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
+		fprintf (stderr, "cannot set access type (%s)\n",
+			 snd_strerror (err));
+		exit (1);
+	}
+
+	if ((err = snd_pcm_hw_params_set_format (capture_handle, hw_params, SND_PCM_FORMAT_S16_LE)) < 0) {
+		fprintf (stderr, "cannot set sample format (%s)\n",
+			 snd_strerror (err));
+		exit (1);
+	}
+
+	if ((err = snd_pcm_hw_params_set_rate_near (capture_handle, hw_params, &sample_rate, 0)) < 0) {
+		fprintf (stderr, "cannot set sample rate (%s)\n",
+			 snd_strerror (err));
+		exit (1);
+	}
+
+	if ((err = snd_pcm_hw_params_set_channels (capture_handle, hw_params, 2)) < 0) {
+		fprintf (stderr, "cannot set channel count (%s)\n",
+			 snd_strerror (err));
+		exit (1);
+	}
+
+	if ((err = snd_pcm_hw_params (capture_handle, hw_params)) < 0) {
+		fprintf (stderr, "cannot set parameters (%s)\n",
+			 snd_strerror (err));
+		exit (1);
+	}
+
+	snd_pcm_hw_params_free (hw_params);
+
+	if ((err = snd_pcm_prepare (capture_handle)) < 0) {
+		fprintf (stderr, "cannot prepare audio interface for use (%s)\n",
+			 snd_strerror (err));
+		exit (1);
+	}
+
+	for (i = 0; i < 10; ++i) {
+		if ((err = snd_pcm_readi (capture_handle, buf, 128)) != 128) {
+			fprintf (stderr, "read from audio interface failed (%s)\n",
+				 snd_strerror (err));
+			exit (1);
+		}
+	}
+
+	snd_pcm_close (capture_handle);
+	exit (0);
+}

+ 7 - 0
demo/RecordAudio/RecordAudio.h

@@ -0,0 +1,7 @@
+#ifndef RECORDAUDIO_H
+#define RECORDAUDIO_H
+
+
+void record(int argc, char *argv[]);
+
+#endif // RECORDAUDIO_H

+ 24 - 0
demo/RecordAudio/main.cpp

@@ -0,0 +1,24 @@
+#include <QApplication>
+#include "Logs/loginit.h"
+#include "spdlog/spdlog.h"
+
+#include "RecordAudio.h"
+
+
+
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+
+    init_log();
+
+    SPDLOG_INFO("********** RecordAudio **********");
+
+    record(argc, argv);
+
+    return a.exec();
+}
+
+
+