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

C语言 写一个简易音乐播放器

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>#define SAMPLE_RATE 44100 // 采样率
#define AMPLITUDE 32767 // 振幅
#define NO_SAMPLES 44100 // 样本数// 声明一个结构体用于表示音符
typedef struct {double frequency; // 频率double duration; // 持续时间
} note;// 声明一个函数用于计算给定音符的采样值
int calculate_sample(note n, double time) {int sample = AMPLITUDE * sin(2 * M_PI * n.frequency * time);return sample;
}// 声明一个函数用于播放单个音符
void play_single_note(note n) {int samples_per_note = SAMPLE_RATE * n.duration; // 计算每个音符的样本数double time_per_sample = 1.0 / SAMPLE_RATE; // 计算每个样本的时间间隔// 循环遍历每一个样本并计算采样值,然后将其写入标准输出for (int i = 0; i < samples_per_note; i++) {double time = i * time_per_sample;int sample = calculate_sample(n, time);putchar(sample & 0xFF);putchar((sample >> 8) & 0xFF);}
}// 声明一个函数用于播放和弦
void play_chord(note* notes, int num_notes) {int samples_per_chord = SAMPLE_RATE * notes[0].duration; // 计算每个和弦的样本数double time_per_sample = 1.0 / SAMPLE_RATE; // 计算每个样本的时间间隔// 循环遍历每一个样本并计算采样值,然后将其写入标准输出for (int i = 0; i < samples_per_chord; i++) {double time = i * time_per_sample;int sample = 0;// 对于和弦中的每个音符,计算其采样值并将其添加到当前样本上for (int j = 0; j < num_notes; j++) {int note_sample = calculate_sample(notes[j], time);sample += note_sample;}// 将样本缩放到正确的振幅范围内并将其写入标准输出sample /= num_notes;sample = fmin(sample, AMPLITUDE);sample = fmax(sample, -AMPLITUDE);putchar(sample & 0xFF);putchar((sample >> 8) & 0xFF);}
}int main() {// 声明一些简单的音符note c = {261.63, 1};note d = {293.66, 1};note e = {329.63, 1};note f = {349.23, 1};note g = {392.00, 1};note a = {440.00, 1};note b = {493.88, 1};// 播放一些简单的旋律和和弦play_single_note(c);play_single_note(d);play_single_note(e);play_single_note(f);play_single_note(g);play_single_note(a);play_single_note(b);note c_chord[] = {c, e, g};play_chord(c_chord, 3);note f_chord[] = {f, a, c};play_chord(f_chord, 3);// 完成return 0;
}

该代码使用正弦函数来计算采样值,并使用标准输出来播放音乐。它支持单独播放单个音符和播放和弦。通常,音符和和弦中的每个音符都表示为持续时间和频率的组合。

相关文章:

C语言 写一个简易音乐播放器

#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <math.h>#define SAMPLE_RATE 44100 // 采样率 #define AMPLITUDE 32767 // 振幅 #define NO_SAMPLES 44100 // 样本数// 声明一个结构体用于表示音符 typedef struct {double …...

面试题:有一个 List 对象集合,如何优雅地返回给前端?

文章目录 1.业务背景每个对象里面都带上了重复的一个sessionId数据&#xff0c;我想提出来该怎么办&#xff1f; 2.实体类3.自定义Mapper和xml文件4.Service层5.Controller层 1.业务背景 业务场景中&#xff0c;一个会话中存在多个场景&#xff0c;即一个session_id对应多个sc…...

DAY43 完全背包理论基础 + 518.零钱兑换II

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…...

unity 从UI上拖出3D物体,(2D转3D)

效果展示&#xff1a; 2D转3D视频 UI结构 UI组件挂载 UI结构 这个脚本挂载到 3D物体身上 using DG.Tweening; using System.Collections; using System.Collections.Generic; using UnityEngine;public class DragGame : MonoBehaviour {[HideInInspector]public bool isDrag…...

win10pycharm和anaconda安装和环境配置教程

windows10 64位操作系统下系统运行环境安装配置说明 下载和安装Anaconda&#xff0c;链接https://www.anaconda.com/download 下载完后&#xff0c;双击exe文件 将anaconda自动弹出的窗口全部关掉即可&#xff0c;然后配置高级系统变量 根据自己的路径&#xff0c;配置…...

[C++ 中]:6.类和对象下(static成员 + explicit +友元函数 + 内部类 + 编译器优化)

(static成员 explicit 友元函数 内部类 编译器优化&#xff09; 一.static 成员&#xff1a;1.概念引入&#xff1a;1-1&#xff1a;定义全局变量记录个数&#xff1f; 2.如果有多个类需要分开去记录类对象的个数&#xff1f;2-1&#xff1a;可不可以声明成员变量解决&#…...

ONES Design UI 组件库环境搭建

这个 ONES Design UI 组件库 是基于 Ant Design 的 React UI 组件库&#xff0c;主要用于企业级研发管理工具的研发。 首先用 React 的脚手架搭建一个项目&#xff1a; npx create-react-app my-app cd my-app目前 ONES Design UI 组件库 托管在 ONES 私有的 npm 仓库上, 因此…...

支付宝AI布局: 新产品助力小程序智能化,未来持续投入加速创新

支付宝是全球领先的独立第三方支付平台&#xff0c;致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验&#xff0c;及转账收款/水电煤缴费/信用卡还款/AA收款等生活服务应用。 支付宝不仅是一个支付工具&#xff0c;也是一个数字生活平台&#xff0c;通过…...

taro全局配置页面路由和tabBar页面跳转

有能力可以看官方文档&#xff1a;Taro 文档 页面路由配置&#xff0c;配置在app.config.ts里面的pages里&#xff1a; window用于设置小程序的状态栏、导航条、标题、窗口背景色&#xff0c;其配置项如下&#xff1a; tabBar配置&#xff1a;如果小程序是一个多 tab 应用&…...

【k8s】pod进阶

一、资源限制 1、资源限制的概念 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;调度器就使用该信息来决定将 Pod 调度到哪个节点上…...

【设计模式】第18节:行为型模式之“迭代器模式”

一、简介 迭代器模式&#xff08;Iterator Design Pattern&#xff09;&#xff0c;也叫作游标模式&#xff08;Cursor Design Pattern&#xff09;。 在通过迭代器来遍历集合元素的同时&#xff0c;增加或者删除集合中的元素&#xff0c;有可能会导致某个元素被重复遍历或遍…...

【数据结构】单链表OJ题

前言: 本节博客将讲解单链表的反转&#xff0c;合并有序链表&#xff0c;寻找中间节点及约瑟夫问题 文章目录 一、反转链表二、合并有序链表三、链表的中间结点四、环形链表的约瑟夫问题 一、反转链表 要反转链表&#xff0c;我们需要遍历链表并改变每个节点的 next 指针&#…...

智能工厂架构

引:https://www.bilibili.com/video/BV1Vs4y167Kx/?spm_id_from=333.788&vd_source=297c866c71fa77b161812ad631ea2c25 智能工厂框架 智能工厂五层系统框架 MES 数据共享 <...

阿里云多款ECS产品全面升级 性能最多提升40%

“阿里云始终围绕‘稳定、安全、性能、成本、弹性’的目标不断创新&#xff0c;为客户创造业务价值。”10月31日&#xff0c;杭州云栖大会上&#xff0c;阿里云弹性计算计算产品线负责人张献涛表示&#xff0c;通过持续的产品和技术创新&#xff0c;阿里云发布了HPC优化实例等多…...

责任链模式(Chain of Responsibility)

责任链模式是对象的行为模式。使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接受者直接的耦合关系。 public abstract class Handler {protected Handler successor;public abstract void handlerRequest(String condition);protected Handler getSuccessor()…...

文件管理技巧:根据大小智能分类并移动至目标文件夹

在文件管理过程中&#xff0c;我们经常需要整理大量的文件。根据文件的大小&#xff0c;将其智能分类并移动至目标文件夹&#xff0c;可以帮助我们更高效地管理文件&#xff0c;提高工作效率。通过使用云炫文件管理器可以根据文件大小进行智能分类和移动至目标文件夹&#xff0…...

具有自主产权的SaaS门店收银系统全套源码输出

PHPMysql前后端分离&#xff0c; 小程序线上商城&#xff1b; 进销存管理库存盘点&#xff0c; 多仓库库存调拨&#xff0c; 会员系统。 消费者扫码查价系统。...

论文阅读:One Embedder, Any Task: Instruction-Finetuned Text Embeddings

1. 优势 现存的emmbedding应用在新的task或者domain上时表现会有明显下降&#xff0c;甚至在相同task的不同domian上的效果也不行。这篇文章的重点就是提升embedding在不同任务和领域上的效果&#xff0c;特点是不需要用特定领域的数据进行finetune而是使用instuction finetun…...

[BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn

居然把第3周忘了写笔记了. 后边难度上来了,还是很有意思的 Crypto Rabins RSA rsa一般要求e与phi互质,但rabin一般用2,都是板子题也没什么好解释的 from Crypto.Util.number import * from secret import flag p getPrime(64) q getPrime(64) assert p % 4 3 assert q %…...

软件测试---边界值分析(功能测试)

能对限定边界规则设计测试点---边界值分析 选取正好等于、刚好大于、刚好小于边界的值作为测试数据 上点: 边界上的点 (正好等于)&#xff1b;必选(不考虑区开闭) 内点: 范围内的点 (区间范围内的数据)&#xff1b;必选(建议选择中间范围) 离点: 距离上点最近的点 (刚好…...

告别格式烦恼:哈工大深圳LaTeX论文模板的6大核心优势

告别格式烦恼&#xff1a;哈工大深圳LaTeX论文模板的6大核心优势 【免费下载链接】hitszthesis A dissertation template for Harbin Institute of Technology, ShenZhen (HITSZ), including bachelor, master and doctor dissertations. 项目地址: https://gitcode.com/gh_m…...

SCI期刊AI率要求越来越严:一二区5%以下该怎么降

SCI一二区期刊AI率卡到5%以下&#xff0c;我的论文差点废了——后来这么救回来的 2026年开年&#xff0c;身边三个同学的SCI投稿被拒&#xff0c;理由都一样&#xff1a;AI-generated content detected。不是内容不行&#xff0c;是AI率没过关。 我的判断很直接&#xff1a;S…...

基于关键链方法的遗传算法求解项目调度问题

一、问题背景与核心思想 项目调度问题&#xff08;Project Scheduling Problem, PSP&#xff09;是在满足活动逻辑关系&#xff08;紧前约束&#xff09;和资源约束&#xff08;如人力、设备&#xff09;的前提下&#xff0c;确定各活动开始/结束时间&#xff0c;以最小化项目工…...

Minecraft世界修复全攻略:从数据损坏到完整恢复的专业解决方案

Minecraft世界修复全攻略&#xff1a;从数据损坏到完整恢复的专业解决方案 【免费下载链接】Minecraft-Region-Fixer Python script to fix some of the problems of the Minecraft save files (region files, *.mca). 项目地址: https://gitcode.com/gh_mirrors/mi/Minecraf…...

ARMv8、AArch64 与 arm64:命名与体系结构要点

ARMv8、AArch64 与 arm64&#xff1a;命名与体系结构要点 ARMv8 指 ARM 架构的一个主版本代际&#xff1b;AArch64 是该代际下的 64 位执行状态与 A64 指令集&#xff1b;arm64 与 aarch64 是操作系统与工具链中对 AArch64 的常用三元组/目录名&#xff0c;二进制约定一致。下…...

利用快马ai快速生成c语言语法学习原型,直观掌握编程基础

今天想和大家分享一个特别实用的C语言学习小技巧。作为一个编程新手&#xff0c;我最近发现用InsCode(快马)平台可以快速搭建C语言学习原型&#xff0c;把抽象的概念变成看得见、能运行的代码&#xff0c;学习效果特别好。 为什么要用原型学习法 刚开始学C语言时&#xff0c;最…...

别再滥用Tick了!UE5里Cast To的正确打开方式与性能实测

UE5性能优化实战&#xff1a;Tick事件中Cast To的高效替代方案 在虚幻引擎5的项目开发中&#xff0c;性能优化往往隐藏在那些看似无害的日常操作里。Tick事件中的Cast To操作就像房间里的大象——人人都知道它存在&#xff0c;却常常低估它的影响。当项目规模扩大、逻辑复杂度提…...

深入TC397与TLF35584的SPI通信:从寄存器操作到汽车ECU低功耗状态管理实战

深入TC397与TLF35584的SPI通信&#xff1a;从寄存器操作到汽车ECU低功耗状态管理实战 在汽车电子领域&#xff0c;电源管理芯片的选择与配置直接关系到整车电子控制单元&#xff08;ECU&#xff09;的可靠性与能耗表现。英飞凌的TLF35584作为一款高集成度电源管理IC&#xff0c…...

选吉他不踩坑:合板、单板、全单材质深度解析,新手看懂这篇就够

对于新手来说&#xff0c;挑选吉他时最容易被“合板”“单板”“全单”这些专业术语绕晕。其实&#xff0c;这三者的核心区别在于木材的构成方式&#xff0c;而木材直接决定了吉他的音色、手感以及使用寿命。今天我们就抛开品牌干扰&#xff0c;纯科普这三种材质的底层逻辑&…...

scanf_s使用避坑指南:如何正确应对C6064警告(含C6054连带问题处理)

scanf_s安全使用全指南&#xff1a;彻底解决C6064与C6054警告 在Windows平台进行C/C开发时&#xff0c;使用scanf_s函数处理用户输入是常见场景。但许多开发者都会遇到两个令人困惑的警告——C6064和C6054。这些警告看似简单&#xff0c;实则暗藏玄机。本文将带你深入理解这两个…...