AcmIn/AcmOut 语音采集
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ACMOut, ACMConvertor, ACMIn;
type
TForm1 = class(TForm)
CheckBox1: TCheckBox;
Button1: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
n, T: integer;
ACMI: TACMIn;
ACMO: TACMOut;
ACMC: TACMConvertor;
procedure BufferFull(Sender: TObject; Data: Pointer; Size: Integer);
procedure ShowSize(var Msg: TMessage); message WM_USER;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ACMO := TACMOut.Create(nil);
ACMC := TACMConvertor.Create;
ACMO.NumBuffers := 0;
ACMO.Open(ACMC.FormatIn);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ACMC.Active := False;
ACMC.Free;
ACMO.Close;
ACMO.Free;
ACMI.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ACMI := TACMIn.Create;
ACMI.OnBufferFull := BufferFull;
if ComboBox2.Text = 'Stereo' then ACMC.FormatIn.Format.nChannels := 2
else ACMC.FormatIn.Format.nChannels := 1;
ACMC.FormatIn.Format.nSamplesPerSec := StrToInt(ComboBox1.Text);
ACMC.FormatIn.Format.wBitsPerSample := 16;
ACMC.FormatIn.Format.nBlockAlign := (ACMC.FormatIn.Format.wBitsPerSample div 8) * ACMC.FormatIn.Format.nChannels;
ACMC.FormatIn.Format.nAvgBytesPerSec := ACMC.FormatIn.Format.nSamplesPerSec * ACMC.FormatIn.Format.nBlockAlign;
ACMC.InputBufferSize := ACMC.FormatIn.Format.nAvgBytesPerSec;
ACMI.BufferSize := ACMC.InputBufferSize;
ACMC.Active := True;
ACMI.Open(ACMC.FormatIn);
t := getTickCount;
end;
{声音充满缓冲区在此得到声音数据DATA……}
procedure Tform1.BufferFull(Sender: TObject; Data: Pointer; Size: Integer);
var
NewSize: Integer;
begin
Move(Data^, ACMC.BufferIn^, Size);
NewSize := ACMC.Convert;
Application.ProcessMessages;
inc(n, newsize);
if getTickCount - t >= 1000 then //每秒数据流量
begin
SendMessage(Handle, WM_USER, n, 0);
t := getTickCount;
n := 0;
end;
//自己的方式传输声音数据 ~.WriteBuffer(ACMC.BufferOut^, NewSize);
//网络传输数据......//
//接受数据(ACMC.BufferOut^, NewSize)
{声音输出}
if not checkbox1.Checked then ACMO.Play(ACMC.Bufferout^, NewSize);
end;
procedure TForm1.ShowSize(var Msg: TMessage);
begin
Caption := Format('AUDIO %0.1fK/s', [Msg.WParam / 1024]);
end;
end.
///////////////////////
{ WaveFmt.Format.wFormatTag := 49;
WaveFmt.Format.nChannels := 1;
WaveFmt.Format.nSamplesPerSec := 22050;
WaveFmt.Format.nAvgBytesPerSec := 4478;
WaveFmt.Format.nBlockAlign := 65;
WaveFmt.Format.wBitsPerSample := 0;
WaveFmt.Format.cbSize := 2;
Wavefmt.Rawdata[18] := 64;
Wavefmt.Rawdata[19] := 1;
}
分享到:
相关推荐
# ACM/NOI/CSP比赛指南:如何利用网络资源提高自己的算法竞赛能力 # ACM/NOI/CSP比赛指南:如何利用网络资源提高自己的算法竞赛能力 ACM/NOI/CSP是三项面向全国高校和中学生的算法竞赛,旨在培养学生的算法设计和...
【ACM/NOI/CSP】NOI嘉年华 solution and code of NOI比赛经验分享&代码程序资源 ACM/NOI/CSP比赛经验分享&代码程序资源 说明:solution and code of NOI 文件列表: NOI嘉年华\NOI嘉年华.docx (61480, -04-26) NOI...
ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest, ICPC)、全国青少年信息学奥林匹克竞赛(National Olympiad in Informatics, NOI)和计算机软件能力认证(Certified Software ...
"ACM/ICPC的教学与实践" ACM/ICPC是国际大学生程序设计竞赛的缩写,全球公认的规模最大、水平最高的国际大学生程序设计竞赛。该项竞赛旨在使大学生运用计算机来充分展示自己分析问题和解决问题的能力。ACM/ICPC被...
ACM/NOI/CSP比赛介绍、经验分享和相关网站资源
xiaojianhua1110/ACM xiaojianhua1110/ACM xiaojianhua1110/ACM xiaojianhua1110/ACM xiaojianhua1110/ACM xiaojianhua1110/ACM xiaojianhua1110/ACM xiaojianhua1110/ACM xiaojianhua1110/ACM xiaojianhua1110/ACM ...
### ACM/NOI/CSP比赛经验分享 参加ACM(Association for Computing Machinery)/NOI(National Olympiad in Informatics)/CSP(Computer Science Proficiency)等编程竞赛是许多计算机科学爱好者和专业人士的一种...
【ACM/NOI/CSP】少儿编程在线平台Scratch3.0、python、C++在线编程,!课程管理、布置作业、作品管理、考试管理、赛事管理等等定制化;助理NOI、CSP-J赛事只需打开浏览器,无需安装任何开发环境 说明:少儿编程在线平台...
内容概要:本文介绍了ACM/NOI/CSP编程竞赛的基本知识、准备策略和比赛经验,并通过一道经典的背包问题动态规划题目详细解析了代码实现过程。文章首先强调了基础知识的积累,包括数据结构、算法和数学基础的重要性,...
在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛者们需要解决各种复杂的编程问题,其中涉及到的领域广泛,包括但不限于数据结构、算法、网络协议等。本压缩包“PreContest...
ACM/NOI/CSP比赛经验分享:历年算法总结(不包含代码,仅有算法名称)
《ACM/ICPC题集》是吉林大学计算机科学学院在2005年精心制作的一份宝贵资源,专门针对ACM(国际大学生程序设计竞赛)/ICPC(国际大学生程序设计竞赛)进行训练和学习。这个压缩包包含了一本名为“ACM.pdf”的文档,...
### ACM/ICPC竞赛训练(北京大学暑期夏令营内容一览) #### 一、概述 ACM/ICPC(国际大学生程序设计竞赛)是一项面向全球大学生的计算机编程与算法设计比赛,旨在通过解决复杂的计算问题来培养学生的创新能力和...
《ACM/ICPC在线评测系统解题报告详解》 ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)和ICPC(国际程序设计竞赛)是全球范围内极具影响力的计算机编程竞赛,旨在培养大学生的算法...
**ACM/ICPC大赛全称是ACM国际大学生程序设计竞赛(International Collegiate Programming Contest),是一项享誉全球的计算机科学竞赛。自1970年创办以来,它已经成为衡量大学计算机科学教育水平的重要标志之一,...
ACM/NOI/CSP比赛经验分享&代码程序资源:深度优先搜索 全国青少年信息学奥林匹克联赛(National Olympiad in Informatics in Provinces,简称NOIP)自1995年至2020年已举办25次。每年由中国计算机学会统一组织。 ...
《ACM/ICPC 文章集合》 这篇文章集合聚焦于ACM(国际大学生程序设计竞赛)和ICPC(国际大学生程序设计竞赛),这两项赛事是全球范围内最具影响力的大学生编程比赛,旨在培养和展示参赛者的算法设计、问题解决以及...
### ACM国际大学生程序设计竞赛(ACM-ICPC) #### 简介 ACM-ICPC是由美国计算机协会(ACM)主办的一项国际性的年度竞赛。这项竞赛旨在考验大学生们的创新精神、团队协作能力以及在高压环境下解决复杂编程问题的能力...
The 36th ACM/ICPC Asia Regional Shanghai Site —— Online Contest Problem Set