当前位置: 首页 > 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;必选(建议选择中间范围) 离点: 距离上点最近的点 (刚好…...

AVPlayer 卡顿、缓冲、加载失败问题根治与监控方案

在 iOS 音视频开发中&#xff0c;AVPlayer 作为系统原生播放器&#xff0c;凭借其稳定性、兼容性和低功耗优势&#xff0c;成为大多数 App 的首选。但在实际落地过程中&#xff0c;卡顿、缓冲异常、加载失败三大问题&#xff0c;却常常成为开发者的“拦路虎”——弱网环境下频繁…...

AI编码助手安全规则实战:为Cursor定制安全防线,防范硬编码与注入风险

1. 项目概述&#xff1a;当AI编码助手遇上安全红线最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Deadly244/cursor-security-rules”。光看名字&#xff0c;你可能会觉得这又是一个关于网络安全或代码审计的工具。但点进去仔细一看&#xff0c;发现它的定位非常精准且…...

开源硬件性能遥测工具openclaw_telemetry:从数据采集到可视化实战

1. 项目概述&#xff1a;从开源遥测数据中洞察硬件性能在硬件开发和性能调优的领域&#xff0c;数据是驱动决策的基石。我们常常需要实时监控CPU、GPU、内存、温度、功耗等一系列关键指标&#xff0c;以评估系统稳定性、定位性能瓶颈或验证优化效果。然而&#xff0c;构建一套稳…...

CefFlashBrowser完整使用手册:在2025年拯救你的Flash游戏与存档

CefFlashBrowser完整使用手册&#xff1a;在2025年拯救你的Flash游戏与存档 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 还记得那些曾经让你沉迷的Flash小游戏吗&#xff1f;&#x1f…...

40希尔排序 - 以递减间距进行插入排序

希尔排序 - 以递减间距进行插入排序 040希尔排序&#xff1a;用长距离跳跃打破速度壁垒&#x1f4f0; 5W1H 发明者故事 Who&#xff08;何人&#xff09;- 发明者是谁&#xff1f; 发明者&#xff1a;唐纳德希尔&#xff08;Donald L. Shell&#xff09; 背景&#xff1a;希尔…...

Linux应用层直接操作硬件寄存器:原理、实现与安全实践

1. 项目概述&#xff1a;为什么要在应用层操作寄存器&#xff1f; 在嵌入式Linux开发或者驱动调试的日常工作中&#xff0c;我们常常会遇到一个看似“越界”的需求&#xff1a;在用户空间的应用层程序里&#xff0c;直接去读写某个硬件寄存器的值。这听起来有点“离经叛道”&am…...

对话式AI应用开发实战:基于Bolna框架的语音助手构建与优化指南

1. 项目概述&#xff1a;Bolna&#xff0c;一个面向对话式AI应用的开源编排框架如果你正在构建一个需要处理语音或文本对话的AI应用&#xff0c;比如一个智能客服、一个语音助手&#xff0c;或者一个能通过电话自动处理预约的机器人&#xff0c;你可能会立刻想到几个核心挑战&a…...

迪文屏DGUS数据自动上传死活没数据?手把手教你排查串口2无响应的三大坑(附8283协议全功能例程)

迪文屏DGUS串口无响应终极排查指南&#xff1a;从硬件焊点到协议配置的深度解析 当你的迪文屏按照手册配置了自动上传功能&#xff0c;却发现串口助手始终一片空白时&#xff0c;那种挫败感每个嵌入式开发者都深有体会。本文将从三个最容易被忽视的致命细节出发&#xff0c;带你…...

吵翻了!龙虾之父晒天价账单,一个月烧了 130 万美元,消耗 6030 亿 Token

前段时间&#xff0c;昆仑万维董事长方汉的一次访谈引发热议&#xff0c;他自曝“一个月才用 20 多亿&#xff0c;有点惭愧。” 他有位 CTO 朋友每月烧 600 亿 token&#xff0c;3 个月完成百名程序员七八年写的 800 万行代码。不过呢&#xff0c;今天小程程刷到一个更绝的案例…...

深度解析Kosmosaos:定制Linux系统镜像的构建、部署与自动化实践

1. 项目概述&#xff1a;一个面向未来的操作系统镜像最近在开源社区里&#xff0c;一个名为chasefort/kosmosaos的项目镜像引起了我的注意。乍一看这个名字&#xff0c;可能会觉得有些陌生&#xff0c;甚至有点“缝合”的感觉——它似乎融合了“Kosmos”和“AOS”的概念。但当你…...