如何生成不同频率的连续音调?

2023-11-28

我想生成并播放具有随时间变化的特定频率和幅度的连续声音。我不想声音之间有延迟。我如何使用 Delphi 或 C++ Builder 来做到这一点?


这个非常简单的示例应该可以帮助您入门。

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, MMSystem;

type
  TWaveformSample = integer; // signed 32-bit; -2147483648..2147483647
  TWaveformSamples = packed array of TWaveformSample; // one channel

var
  Samples: TWaveformSamples;
  fmt: TWaveFormatEx;

procedure InitAudioSys;
begin
  with fmt do
  begin
    wFormatTag := WAVE_FORMAT_PCM;
    nChannels := 1;
    nSamplesPerSec := 44100;
    wBitsPerSample := 32;
    nAvgBytesPerSec := nChannels * nSamplesPerSec * wBitsPerSample div 8;
    nBlockAlign := nChannels * wBitsPerSample div 8;
    cbSize := 0;
  end;
end;
                                          // Hz                     // msec
procedure CreatePureSineTone(const AFreq: integer; const ADuration: integer;
  const AVolume: double { in [0, 1] });
var
  i: Integer;
  omega,
  dt, t: double;
  vol: double;
begin
  omega := 2*Pi*AFreq;
  dt := 1/fmt.nSamplesPerSec;
  t := 0;
  vol := MaxInt * AVolume;
  SetLength(Samples, Round((ADuration / 1000) * fmt.nSamplesPerSec));
  for i := 0 to high(Samples) do
  begin
    Samples[i] := round(vol*sin(omega*t));
    t := t + dt;
  end;
end;

procedure PlaySound;
var
  wo: integer;
  hdr: TWaveHdr;
begin

  if Length(samples) = 0 then
  begin
    Writeln('Error: No audio has been created yet.');
    Exit;
  end;

  if waveOutOpen(@wo, WAVE_MAPPER, @fmt, 0, 0, CALLBACK_NULL) = MMSYSERR_NOERROR then
    try

      ZeroMemory(@hdr, sizeof(hdr));
      with hdr do
      begin
        lpData := @samples[0];
        dwBufferLength := fmt.nChannels * Length(Samples) * sizeof(TWaveformSample);
        dwFlags := 0;
      end;

      waveOutPrepareHeader(wo, @hdr, sizeof(hdr));
      waveOutWrite(wo, @hdr, sizeof(hdr));
      sleep(500);

      while waveOutUnprepareHeader(wo, @hdr, sizeof(hdr)) = WAVERR_STILLPLAYING do
        sleep(100);

    finally
      waveOutClose(wo);
    end;


end;


begin

  try
    InitAudioSys;
    CreatePureSineTone(400, 1000, 0.7);
    PlaySound;
  except
    on E: Exception do
    begin
      Writeln(E.Classname, ': ', E.Message);
      Readln;
    end;
  end;

end.

特别注意您获得的简洁界面:

    InitAudioSys;
    CreatePureSineTone(400, 1000, 0.7);
    PlaySound;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何生成不同频率的连续音调? 的相关文章

  • 使用react-native测量音频的响度

    我正在创建一个应用程序 Android 来使用本机反应录制手机中的语音 一项要求是实时测量声音的响度并基于它制作动画 我尝试使用react native audio库 但问题是响度监控仅在IOS中支持 我检查了世博会音频库 但找不到方法 有
  • 使用 xuggle 将 mp3 转换为 wav 出现异常

    我正在尝试将 mp3 转换为 wav 代码在这里 String mp3 F work pic2talk38512 mp3 String wav F work pic2talk38512 wav TranscodeAudioAndVideo
  • 将字符串作为 PChar 从 CSharp 传递到 Delphi DLL

    我正在尝试将字符串从 C 传递到 Delphi 构建的 DLL Delphi DLL 需要 PChar 这是Delphi导出 procedure DLL Message Location PChar AIntValue integer st
  • 通过“修改日期”确定文件夹中的哪个文件是最新的?

    我需要扫描特定文件夹中的最新文件 基本上检查修改日期以查看哪个是最新的 但请记住这些文件具有随机名称 这是我到目前为止得到的 procedure TForm1 Button1Click Sender TObject begin ftp Ho
  • 可以使用 Winkey+L 进行低级键盘挂钩/SendInput 吗? (工作站锁定在 Vista 及更高版本中被拦截)

    I work on a project called UAWKS http code google com p uawks Unofficial Apple Wireless Keyboard Support that helps Wind
  • 如何将背景音乐添加到我的 spritekit 文件中

    有人可以给我一个快速简单的步骤 以便在我的应用程序加载后添加背景 m4a 音乐 它是一个精灵套件Xcode文件 音乐是m4a格式 谢谢 尝试用这个 import AVFoundation AVAudioPlayer backgroundMu
  • 新编译的应用程序需要 UAC/elevation?

    我有一个系统 我将其设置为普通的 UAC 并在我的 delphi 环境中编译名为 ka exe 的项目 并为其创建一个 installshield 项目 设置完毕 一切顺利 但每当我开始我的程序时 它都需要提升 而我不知道为什么 为了确保
  • C# 的 user32 和内核方法列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一个很好的清单来说明我们可以从中进口什么user32 dll and kernel dll并在 C 中使用 我是 Windows A
  • 发送/捕获 SIGTERM 的 Win32 API 模拟

    在 POSIX OS 下 有信号 API 允许向进程发送信号以将其关闭 使用kill 您可以使用sigaction捕获它并执行您需要的操作 然而 Win32不是POSIX系统 所以 如何处理可能出现的关闭事件 例如来自 任务管理器 中的 结
  • Soap Delphi 客户端因 1MB 调用超时而结束

    我们正在开发 SOAP Web 服务 Apache PHP 所有小规模调用都运行良好 但对于 1Mb 的 Soap 调用 HTTPS 调用大小为 1MB 我们的 Delphi Soap 客户端在除一台 PC 之外的所有 PC 上都因超时而停
  • 跟踪 HTML5 音频元素的播放次数?

    跟踪 HTML5 音频元素播放次数的最佳方法是什么 我们也可以使用 Google Analytics 如果这是最好的方法 HTML5 音频元素有基本的回调 https developer mozilla org En Using audio
  • 如何检查文件是否有备用数据流?

    Delphi 有没有办法检查文件是否有任何备用数据流 看一下 Win32 APIFindFirstStreamW https msdn microsoft com en us library windows desktop aa364424
  • Firebird 或 NexusDB

    我知道有很多与 Delphi 数据库相关的问题 但我只考虑这两个数据库 我需要查询大约 100 000 条记录 根据您的经验 哪个更快 作为嵌入式 as C S Thanks 我还没用过 Nexus tbh 但我经常使用 Firebird
  • Vista 中的文本转语音

    我通过在 2000 NT XP 中使用 Delphi 创建 OLE 对象来做到这一点 如下所示 Voice CreateOLEObject SAPI SpVoice Voice speak 但这在 Vista 中不起作用 我怎样才能让我的程
  • Delphi XE5 FireDAC 错误:无法加载供应商库 [libmysql.dll 或 libmysqld.dll]

    我在 Windows 7 64 位上使用 Delphi XE5 只是尝试 FireDAC 组件 我正在使用一个 TFDConnection 组件连接到本地 MySQL 数据库 v5 6 15 我已经将 libmysql dll 32位 v5
  • 检测笔记本电脑盖子的关闭和打开

    是否可以检测笔记本电脑的盖子何时打开或关闭 从我读到的内容来看 这是不可能的 但 SO 之前已经帮助我完成了不可能的任务 我发现唯一可能朝着正确方向的事情是关于报告电源按钮所需的 IOCTL 的 MSDN 博客文章 https learn
  • 多个原始输入窗口接收器

    我有一个仅消息窗口 ATL CWindowImpl 它使用 RIDEV INPUTSINK 标志将自身注册为原始输入 这意味着无论该窗口是否是前台窗口 它都会获取所有输入 当该窗口只有一个实例时 这非常有效 但是 当我创建超过 1 个窗口实
  • 避免 UAC 但使用 Windows 服务启动提升的进程

    我有一个非交互式服务作为 Windows 计算机上的特权系统用户运行 我需要它来启动给定的可执行文件作为提升的进程 我已设法使用 WTSGetActiveConsoleSessionId 以 SYSTEM 身份启动一个子进程 找到一个系统进
  • 如何在 Android 上的 PhoneGap 中设置音频播放速率?

    有谁能够让音频播放速率在 Android 上工作吗 媒体播放器似乎覆盖 忽略音频标签的播放速率属性 None
  • 有关 CredEnumerate 的帮助

    作为后续this https stackoverflow com questions 199518 how to programatically add mapped network passwords winxp我希望有人可以帮助解决这个

随机推荐

  • EXISTS 子查询中什么更容易阅读? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 It s a questi
  • 角度材质数据表加载缓慢

    我的角度材料应用程序遇到了一些麻烦 我正在使用带有分页器的数据表 数据不必排序 加载数据时 我显示了一个垫子旋转器 div div
  • Mac OS 10.7 (Lion) 上类似 Valgrind 的工具

    我需要一个工具来帮助我以类似于 valgrind 的方式查找 C 程序中的内存泄漏 它应该弄清楚程序何时覆盖不应该覆盖的内存 例如 通过错误计算数组索引 我了解到有泄漏实用程序以及图形仪器应用程序 不过我认为它只能找到用 new 或 mal
  • 如何检出 git stash 中未跟踪的文件?

    假设我使用以下之一隐藏了一些更改 git stash u git stash include untracked 我可以通过以下方式从存储中检出单个文件 git checkout stash 0 filename 如果 git 知道 文件名
  • 在文件上打开资源管理器

    在Python中 如何跳转到Windows资源管理器中的文件 我找到了跳转到文件夹的解决方案 import subprocess subprocess Popen explorer C path of folder 但我没有文件的解决方案
  • 将现有 Docker 镜像部署到 Heroku

    我无法将现有的 docker 镜像部署到 Heroku Image docker run it name xp home enonic xp home docker run d p 8080 8080 volumes from xp hom
  • 如何传播 WPF 数据绑定期间发生的错误和异常?

    我经常发现我不小心破坏了应用程序中的数据绑定 通过重命名属性而不是在 XAML 中重命名它 或者通过属性因某种原因引发异常 默认情况下 数据绑定错误会被记录以调试输出 并且捕获和抑制引发的异常 有没有一种简单的方法可以在记录调试输出后引发异
  • 将 NA 替换为 r 中每个组同一列的另一行中的值

    我需要将每组的给定列的每行的 NA 替换为不同行的非 NA 值 假设样本数据如下 id name 1 a 1 NA 2 b 3 NA 3 c 3 NA 期望的输出 id name 1 a 1 a 2 b 3 c 3 c 3 c 有没有办法在
  • SignalR、有限的唯一连接(打开的选项卡)IIS 8、Windows 8

    当打开多个选项卡并为每个选项卡分配唯一的 id 时 不可能使用 SignalR 请参阅 当 SignalR 一次建立 8 10 个连接时 实时聊天不起作用 但 我在此 stackoverflow 问题中描述了一种解决方法 这个想法是按顺序覆
  • TFS 2010 中的禁止模式签入策略

    我一直在尝试使用 TFS 2010 Power Tools 的禁止模式部分 但我只是不明白某些东西 当我尝试使用它时 我根本无法进行任何更改 我使用的是最近发布的版本 我相信是2010年4月23日 所以它不是旧版本 首先 是的 我知道它是基
  • 如何从 optarg 获取值

    您好 我正在编写一个简单的客户端 服务器程序 在这个程序中我必须使用getopt 获取端口号和 IP 地址 如下所示 服务器 i 127 0 0 1 p 10001 我不知道如何从 optarg 获取值 以便稍后在程序中使用 您使用 whi
  • 读取对象属性时忽略 NullReferenceException

    有没有办法让C 忽略NullReferenceException 或与此相关的任何特定例外 一组语句 当尝试从可能包含许多空对象的反序列化对象中读取属性时 这非常有用 使用辅助方法来检查 null 可能是一种方法 但我正在语句块级别寻找类似
  • 在 Ruby 中从 Capybara 运行时,webkit_server 会定期挂起

    我遇到一个问题 访问 URL 时 运行无头连接到本地 Xvfb 屏幕的带有 Capybara 和 capybara webkit 的 webkit server 实例挂起 这似乎是在重复访问不同的 URL 并执行查找程序几分钟后发生的 我使
  • 使用 startActivityForResult() 启动的活动未返回调用活动

    我有 3 项活动 A B and C 简而言之 活动 A 启动活动 B 然后 A 也启动活动 C 并期望从 C 得到结果 但从未得到它 以下是应用程序的工作流程 Activity A 在应用程序启动时启动 并在 onCreate 中启动 A
  • Ionic 4:创建模拟存储

    我正在尝试在新的 Angular 7 Ionic 4 应用程序中使用 Testbed 但无法运行任何测试 因为我的组件依赖于 Ionic 本机插件 storage 应用程序 组件 规格 ts import CUSTOM ELEMENTS S
  • Internet Explorer 产生错误的行号

    我有一个包含大量 javascript 代码的 jsp 每当页面上出现 JavaScript 错误 显示在 IE 浏览器的状态栏中 时 报告的包含错误的行号与实际包含错误的行号不匹配 我正在右键单击 gt 查看源代码来查找报告的行号 但该行
  • 反序列化二进制类文件内容时出现 ClassNotFoundException

    我对Java了解不多 我正在尝试读取一个包含 int 和名为 Automobile 的类的各种实例的文件 但是 当我反序列化它时 程序抛出 ClassNotFoundException 我似乎无法理解为什么 这是代码 try FileInp
  • 在 SQL Server 中使用 LAG() 和 LEAD() 函数时是否可以忽略 NULL 值?

    如您所知 LAG 和 LEAD 分析函数无需使用自连接即可访问同一结果集中上一行和下一行的数据 但是是否可以在访问 NOT NULL 值之前忽略 NULL 值 可以使用窗口函数 读一下这篇文章article作者 Itzik Ben Gan
  • OpencV中的背景和前景

    我正在使用 OpenCV243 开发一个项目 我需要在流期间获取前景 我的问题是我使用 cv absdiff 来获取它并没有真正的帮助 这是我的代码和结果 include
  • 如何生成不同频率的连续音调?

    我想生成并播放具有随时间变化的特定频率和幅度的连续声音 我不想声音之间有延迟 我如何使用 Delphi 或 C Builder 来做到这一点 这个非常简单的示例应该可以帮助您入门 program Project1 APPTYPE CONSO