win api + 基础乐理产生正弦波声音
暂时记录。
感觉想写个电子钢琴乐程序了,不过感觉音有点怪怪的。
#include <iostream>
#include <windows.h>
#include <Mmreg.h>
#include <mmeapi.h>
#include <Windows.h>
#include <math.h> #pragma comment(lib, "Winmm.lib") #define RATE 44100
#define PIPE 2
#define BUFF (RATE * 500)
#define PI 3.14159 void GenAudio(PBYTE pB, int freq)
{
double w = (2 * PI) / freq;
for (int i = 0; i < BUFF; i++)
{
pB[i] = 127 + 127 * std::sin(w * i);
}
} int main()
{
WAVEHDR wavehdr;
WAVEFORMATEX waveformat;
HWAVEOUT hWavO;
PBYTE aData = new BYTE[BUFF];
ZeroMemory(aData, BUFF); waveformat.wFormatTag = WAVE_FORMAT_PCM;
waveformat.nSamplesPerSec = RATE;
waveformat.nChannels = PIPE;
waveformat.wBitsPerSample = 16;
waveformat.nBlockAlign = PIPE * waveformat.wBitsPerSample / 8;
waveformat.nAvgBytesPerSec = waveformat.nSamplesPerSec * waveformat.nBlockAlign;
waveformat.cbSize = 0; wavehdr.lpData = (LPSTR)aData;
wavehdr.dwBufferLength = BUFF;
wavehdr.dwLoops = 1;
wavehdr.dwFlags = 0; if (waveOutOpen(&hWavO, WAVE_MAPPER, &waveformat, NULL, 0, CALLBACK_NULL) != MMSYSERR_NOERROR)
std::cout << "出错"; waveOutPrepareHeader(hWavO, &wavehdr, sizeof(wavehdr)); int scale[] = { 261, 293, 329, 349, 391, 440, 493, 523 }; for (;;)
{
for (int i = 0; i < 8; i++)
{
GenAudio(aData, scale[i]);
for (int j = 0; j < RATE; j++)
waveOutWrite(hWavO, &wavehdr, sizeof(wavehdr));
}
} waveOutClose(hWavO);
waveOutUnprepareHeader(hWavO, &wavehdr, sizeof(wavehdr)); delete[] aData; return 0;
}
win api + 基础乐理产生正弦波声音的更多相关文章
- 从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...
- 【转载】从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...
- 从头编写asp.net core 2.0 web api 基础框架 (5) + 使用Identity Server 4建立Authorization Server (7) 可运行前后台源码
前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...
- 《Node.js高级编程》之Node 核心API基础
Node 核心API基础 第三章 加载模块 第四章 应用缓冲区 第五章 事件发射器模式简化事件绑定 第六章 使用定时器制定函数执行计划 第三章 加载模块 本章提要 加载模块 创建模块 使用node_m ...
- C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie
网上找到的可以完整获取Cookie的方法,转载一下希望能帮助更多人. 亲测可用 在Winform中使用WebBrowser控件获取网站的Cookie有时候是不完整的,默认调用Document.Cook ...
- 文件操作(CRT、C++、WIN API、MFC)
一.使用CRT函数文件操作 二.使用标准C++库 std::fstream std::string 1)std::string对象内部存储了一个C的字符串,以'\0'结尾的. 2)std::strin ...
- 黑客编程教程(二)Win API编程简介
第二节 Win API编程简介 下面介绍一下WIN API. 我们需要自己编写一个工具时,必然会用到很多操作windows和控制windows的函数,这些函数就是windows API. API是Ap ...
- C# 调用win api获取chrome浏览器中地址
//FindWindow 查找窗口 //FindWindowEx查找子窗口 //EnumWindows列举屏幕上的所有顶层窗口,如果回调函数成功则返回非零,失败则返回零 //GetWindowText ...
- Win API:之GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId
Win API:之GetCurrentThread.GetCurrentThreadId.GetCurrentProcess.GetCurrentProcessId {返回当前线程的虚拟句柄} Get ...
随机推荐
- vs2008 asp.net “无法连接到ASP.NET Development server”
这是因为该网站启动ASP.NET Development server时使用的端口被占用而导致的. 解决方法: 1.在“解决方案资源管理器”中选中网站项目名称,然后切换到“属性”窗口 2.在“属性”窗 ...
- elasticsearch index 过程
(1)index request 到某一个Node(选择node的方式是采用round-robin)方法,此node 称为coordinate node,继续当前index request应该执行在哪 ...
- pip问题:Traceback (most recent call last): File "/usr/bin/pip", line 9, in
源作者blog https://blog.csdn.net/vmxhc1314/article/details/81869676 编辑提示的文件,进行更改即可. 解决方法: 将 /usr/bin/pi ...
- java exec python program
I find three methods, the first is using jython, the module of jython can transform the type of data ...
- AcWing 1058. 股票买卖 V
//初始状态(入口)转移到手中无货的第>=2天 //最终状态(出口)可能从手中无货的第一天转移过来,或者从手中无货的第>=2天 //f[i,0]表示走到第i天,且位于手中有货的状态 //f ...
- Java枚举类型的使用,数值的二进制表示
一.Java枚举类型的使用 首先请看这段代码: package java上课; public class EnumTest { public static void main(String[] arg ...
- Appium+Python+Pycharm如何创建并运行自动化测试脚本【真机运行】
一.将测试机连接电脑,手机上会有一些提示,总之都允许就可以了,开始USB调试模式,之后打开cmd,输入adb devices,查看手机是否成功连接,如下图所示: 上图中可以看到,有一台设备已经成功连接 ...
- Eclipse项目工程导入到IDEA继续开发-超详细
现在Java开发的主流工具是IDEA,不是说Eclipse,各有各的特色.不过我现在深深的爱上了idea这个工具. 但是之前很多项目都是用eclipse开发的,现在就转入到idea中进行继续开发. 1 ...
- python中的replace无法替换字符串
replace替换字符串的时候,需要重新赋值给变量,因为在python中字符串是不可变对象,因此在使用的时候我们必须重新赋值,就这么简单. z1=z1.replace('ddd','') 返回 ...
- 虚拟磁盘VHD文件压缩方法
问题描述 因工作需要在Mac上跑了一个VirtualBox虚拟win7,使用对win系统友好的vhd格式作为虚拟硬盘.经过一段时间使用发现vhd占用空间远大于虚拟磁盘使用量,想办法减减肥才行. 步骤整 ...