暂时记录。

  感觉想写个电子钢琴乐程序了,不过感觉音有点怪怪的。

#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 + 基础乐理产生正弦波声音的更多相关文章

  1. 从头编写 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的相 ...

  2. 【转载】从头编写 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的相 ...

  3. 从头编写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 基础框架: 第 ...

  4. 《Node.js高级编程》之Node 核心API基础

    Node 核心API基础 第三章 加载模块 第四章 应用缓冲区 第五章 事件发射器模式简化事件绑定 第六章 使用定时器制定函数执行计划 第三章 加载模块 本章提要 加载模块 创建模块 使用node_m ...

  5. C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie

    网上找到的可以完整获取Cookie的方法,转载一下希望能帮助更多人. 亲测可用 在Winform中使用WebBrowser控件获取网站的Cookie有时候是不完整的,默认调用Document.Cook ...

  6. 文件操作(CRT、C++、WIN API、MFC)

    一.使用CRT函数文件操作 二.使用标准C++库 std::fstream std::string 1)std::string对象内部存储了一个C的字符串,以'\0'结尾的. 2)std::strin ...

  7. 黑客编程教程(二)Win API编程简介

    第二节 Win API编程简介 下面介绍一下WIN API. 我们需要自己编写一个工具时,必然会用到很多操作windows和控制windows的函数,这些函数就是windows API. API是Ap ...

  8. C# 调用win api获取chrome浏览器中地址

    //FindWindow 查找窗口 //FindWindowEx查找子窗口 //EnumWindows列举屏幕上的所有顶层窗口,如果回调函数成功则返回非零,失败则返回零 //GetWindowText ...

  9. Win API:之GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId

    Win API:之GetCurrentThread.GetCurrentThreadId.GetCurrentProcess.GetCurrentProcessId {返回当前线程的虚拟句柄} Get ...

随机推荐

  1. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(6.5-加-8.2-加-8.3)End-to-end_Data_Protection

    6.5 End-to-end Protection Information 端到端保护信息 包含数据转存的命令可以使用端到端数据保护.在这些命令内部[位于Command Dword 12 的 [29: ...

  2. PIE-SDK For C++矢量数据空间索引的创建

    1.功能简介 空间索引的使用便于数据的查询:所以在创建矢量数据的时候创建空间索引,下面对矢量数据如何创建空间索引进行功能介绍. 2.功能实现说明 2.1 实现思路及原理说明 第一步 创建矢量要素数据集 ...

  3. 检测到 LoaderLock Message: 正试图在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

    解决方法: 调试状态=>异常(Ctrl+Alt+E)=>Managed Debuggin Assistants=>LoaderLock 的选中状态去掉即可.

  4. BZOJ 3280: 小R的烦恼

    Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要 求小R帮助他一起解决一个难题.问题是这样的,程设老师最近要进行一项邪恶的实 ...

  5. jQuery---第一部分复习

    jquery: 简单.粗暴    jq和js的关系   js是什么? js是一门编程语言   jq仅仅是基于js的一个库,jq可理解为就是开发js的一个工具.          概念   1. 为什么 ...

  6. [转] c# 中使用opencv进行视频捕获

    简介 这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的. 这将有助于那些喜欢C#和OpenCV环境的人.这个程序完全基于Visual Stud ...

  7. bookdown学习笔记

    主要参考大佬谢益辉的bookdown学习笔记 https://bookdown.org/yihui/bookdown/pandoc.html 灰常之详细 然后clone了他写好的小demo,准备自己试 ...

  8. day:3.9基础复习

    1.不要在模块之间相互调用,否则会出现麻绳现象,避免循环导入. ==:用来判断值是否相等(分别指向两个空间,但是空间里面的内容相同) is:判断指向是否相等. 例: a=[,,] b=[,,] a== ...

  9. Wannafly Camp 2020 Day 1E 树与路径 - 树上差分,LCA

    #include <bits/stdc++.h> using namespace std; #define int long long const int N = 1000005; vec ...

  10. linux - mysql:启动 mysql

    启动mysql 第一种: /etc/rc.d/init.d/mysqld start /etc/rc.d/init.d/mysqld stop 第二种:使用service 启动.关闭MySQL服务 s ...