当前位置: 首页 > news >正文

C++builder中的人工智能(23):在现代C++ Windows上轻松录制声音

在这篇文章中,我们将探讨如何在现代C++ Windows上轻松录制声音。声音以波形和数字形式存在,其音量随时间变化。在C++ Builder中,使用Windows设备进行录音非常简单。要录制声音,在多设备应用程序中,必须使用FMX.Media.hpp头文件。

  1. 创建一个新的多设备C++ Builder项目,将所有项目和单元文件保存到一个文件夹中。

  2. 定义音频捕获设备,需要FMX.Media库。在Unit1.h头文件中添加以下代码,并定义麦克风设备:

class TForm1 : public TForm1 {
public:TButton *Button1;TButton *Button2;TAudioCaptureDevice *Mic;
};
};
  1. 返回到Unit1.cpp文件中,定义麦克风设备如下:
TAudioCaptureDevice * Mic = TCaptureDeviceManager::Current->DefaultAudioCaptureDevice;

3. 现在可以直接定义文件名:

Mic->FileName = L"D:\\test.wav";

4. 或者你可以直接使用SaveDialog组件来获得文件名。


if(Mic!=NULL)
{SaveDialog1->Filter = Mic->FilterString;Mic->FileName = SaveDialog1->FileName;
}

5. 添加一个按钮,开始录音设备,使用StartCapture()如下:

void TForm1::Button1Click(TObject *Sender) {if (Mic != NULL) {Mic->StartCapture();}

6. 添加另一个按钮来停止录音,停止它如下:

void TForm1::Button2Click(TObject *Sender) {if (Mic != NULL) {Mic->StopCapture();}

7. 这就是全部代码。现在你可以通过按F9运行你的代码。

让我们看看所有代码。Unit.h头文件应该像这样(FMX.Media库是必需的):

 
//---------------------------------------------------------------------------#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <FMX.Controls.hpp>
#include <FMX.Forms.hpp>
#include <FMX.Controls.Presentation.hpp>
#include <FMX.StdCtrls.hpp>
#include <FMX.Types.hpp>
#include <FMX.Media.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed ComponentsTButton *Button1;TButton *Button2;void __fastcall Button1Click(TObject *Sender);void __fastcall Button2Click(TObject *Sender);
private:	// User declarations
public:		// User declarations__fastcall TForm1(TComponent* Owner);TAudioCaptureDevice *Mic;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Unit.cpp文件应该像这样:


#include <fmx.h>
#pragma hdrstop#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{Mic =TCaptureDeviceManager::Current->DefaultAudioCaptureDevice;Mic->FileName = L"D:\\test.wav";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{if (Mic!=NULL){Mic->StartCapture();}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{if (Mic!=NULL){Mic->StopCapture();}
}

这个函数首先打开WAV文件,然后读取WAV头。如果文件是有效的WAV文件,函数将读取头信息并检查文件是否有效。然后读取波形数据,最后关闭音频文件。这个函数还显示了前20个样本的值。

http://www.lryc.cn/news/485517.html

相关文章:

  • 避免误差!Android 中正确计算时间差的方式
  • unity3d————Resources异步加载
  • YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构
  • 如何选择国产化CMS来建设政务网站?
  • C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介
  • paddle表格识别数据制作
  • python selenium库的使用:通过兴趣点获取坐标
  • 如何优化Kafka消费者的性能
  • 机器学习 决策树
  • 效益登记册效益管理计划
  • Go语言的零值可用性:优势与限制
  • 【自用】0-1背包问题与完全背包问题的Java实现
  • HTML5实现俄罗斯方块小游戏
  • Mybatis官方生成器使用示例
  • 演员王子辰—专注革命题材 《前行者》后再出发
  • Spring Boot基础教学:创建第一个Spring Boot项目
  • 基于SpringBoot+Vue实现校园多媒体信息共享平台
  • WebRTC API分析
  • ArkTS学习笔记:ArkTS起步
  • spring-gateway网关聚合swagger实现多个服务接口切换
  • 关于 Oracle Database Express Edition 的功能和安装
  • 领夹麦克风哪个品牌好,手机领夹麦克风哪个牌子好,选购推荐
  • 什么是 Go 语言?
  • AI 大模型重塑软件开发流程:定义、应用、优势与挑战
  • 微服务即时通讯系统的实现(客户端)----(1)
  • 【freertos】FreeRTOS时间管理
  • 台式电脑没有声音怎么办?台式电脑没有声音解决详解
  • 机器学习基础02
  • element plus的表格内容自动滚动
  • 哈佛商业评论 | 未来商业的技术趋势:百度李彦宏谈技术如何变革商业