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

Chapter20 音乐

目录

音乐

琴键

哆来咪

振动与调式

利萨如曲线

和声与音调与和弦


音乐


        在音乐理论中,一个八音度(octave)是一个频率范围相差二倍的区间。在大多数西洋乐器中,一个八音度被分为12个频率比相等的半音程(semitone)。因为12个半音程构成了二倍的八音度频率范围,所以一个半音程的频率倍数为\sqrt[12]{2}。 该数值在本节将会频繁出现,可以令\sigma =\sqrt[12]{2}=1.059463094359295

   sigma = 2^(1/12)

琴键


        钢琴键盘有两个八度音,白键标为 CDEFGAB,加上下一个C键。如果白键和黑键都计算的话,每一个八度音有12个键。每个键的频率比相邻的键高或低半音程。每一个黑键可以理解成上一个白键的升音(sharp,记为#),或下一个白键的降音(flat,b)

function pianoex(a)
% PIANOEX  A simple music synthesizer.
%   pianoex, with no arguments, presents a gui with 25 piano keys,
%   13 toggles to form chords, 3 toggles to choose intonation, and
%   an oscilloscope and staff to display the generated notes and chords.
%
%   pianoex(n) plays the n-th note above middle C.
%   pianoex(-n) plays the n-th note below middle C.
%   pianoex([n1 n2 ... ]) plays the chord specified by a vector.
%
%   pianoex(score) plays the cell array score constructed like
%   the one in vivaldi.m. 
%
%   for n = [0 2 4 5 7 9 11 12]
%      pianoex(n)
%   end
%   plays the C-major scale.
%
%   Requires sound card and, optionally, the Signal Processing Toolbox.if isempty(get(gca,'userdata'))make_keyboardendif nargin > 0T = 5/8;H = get(gca,'userdata');tv = get(H.voice,'value');voice = find([tv{:}]==1);set(H.togs(1),'value',1,'background','blue')for k = 1:size(a,1)if iscell(a)if size(a(k,:),2)==2[y,fs] = synthesize(a{k,1},a{k,2}*T,voice);else[y,fs] = synthesize(a{k,1},T,voice);endv = a{k,1};elseif isscalar(a)H.root = a;ch = get(H.togs,'value');a = a + find([ch{:}]) - 1;end[y,fs] = synthesize(a,T,voice);v = a;endsound(y,fs);for j = 1:25set(H.keys(j),'background',get(H.keys(j),'userdata'))endset(H.keys(v(v<13)+13),'background','blue')j = round(get(H.scope,'xdata')*fs);set(H.scope,'ydata',y(j))set(H.notes,'vis','off')set(H.sharps,'vis','off')delta = [0 0 1 1 2 3 3 4 4 5 5 6]/2;for n = 1:length(v)y = 3.5*floor(v(n)/12)+delta(mod(v(n),12)+1);set(H.notes(n),'ydata',y,'vis','on')if any(mod(v(n),12) == [1 3 6 8 10])set(H.sharps(n),'pos',[.25 y],'vis','on');endenddrawnowendset(gca,'userdata',H);end
end% ------------------------------------function [y,fs] = synthesize(chord,T,voice)
% SYNTHESIZE  Generate musical notes and cords.
% synthesize(note,T,voice)  Generates a note for T seconds with given tuning.
% synthesize([note1, ..., noten],T,voice)  Generates a chord of several notes.
% Notes are integers specifying half tones above and below middle C.
% voice = 1 for piano, 2 for just intonation, 3 for equal temperament.% Examples:
%   synthesize(0) generatees middle C (261.625 Hz) for 1/2 second.
%   synthesize(1) is C#.
%   synthesize(-1) is C-flat.
%   synthesize(12) is high C, one octave above middle C.
%   synthesize([0 4 7]) is the perfect fifth major triad C-E-G. 
%   A scale with one second per note:
%      for k = [0 2 4 5 7 9 11 12]
%         synthesize(k,1)
%      endswitch voicecase 1  % equal temperamentsigma = 2^(1/12);C4 = 440*sigma^(-9);fs = 44100;t = 0:1/fs:T;y = zeros(size(t));for n = chordhz = C4 * sigma^n;y = y + sin(2*pi*hz*t);endy = y/length(chord);case 2  % just intonationsigma = 2^(1/12);C4 = 440*sigma^(-9);fs = 44100;t = 0:1/fs:T;r = [1 16/15 9/8 6/5 5/4 4/3 7/5 3/2 8/5 5/3 7/4 15/8];r = [r/2 r 2*r 4];y = zeros(size(t));for n = chordhz = C4 * r(n+13);y = y + sin(2*pi*hz*t);endy = y/length(chord);case 3  % pianomiddle_c = get(gcf,'userdata');fs = 44100;t = 0:1/fs:T;y = zeros(size(t));for n = chordy = y + resamplex(middle_c,2^(n/12),length(y));endend
end% ------------------------------------function y = resamplex(y,factor,L)
% RESAMPLE 
% Requires Signal Processing Toolbox[p,q] = rat(factor,1.e-4);y = resample(y,q,p)';L = floor(L);if L < length(y)y = y(1:L);elsey(L) = 0;endr = 150:-1:0;y(L-r:L) = y(L-r:L).*r/150;
end% ------------------------------------function make_keyboard
% MAKE_KEYBOARD Create a piano keyboard.clfwhite = [-12:2:-8 -7:2:-1 0:2:4 5:2:11 12];black = setdiff(-11:11,white);dx = 1/16;H.keys = zeros(1,25);for k = [white black]if k == -12% Whitebw = [1 1 1];x = dx/2;y = .08;dy = .40;elseif k == -11% Blackbw = [0 0 0];x = dx;y = .23;dy = .25;endcallback = ['pianoex(' int2str(k) '), set(gcbo,''value'',0)'];H.keys(k+13) = uicontrol('units','normal','position',[x y dx dy], ...'style','toggle','background',bw,'userdata',bw,'callback',callback);x = x + dx;if k == -9 || k == -2 || k == 3x = x + dx;endend% Key Labelsy = .02;dy = .05;s = 'C';grayc = get(gcf,'color');for x = dx/2:dx:1-dxuicontrol('units','normal','position',[x y dx dy],'background',grayc, ...'style','text','string',s,'fontsize',14,'fontweight','bold')s = char(s+1);if s > 'G', s = 'A'; endend% Clefsaxes('position',[.03 .65 .07 .3])C = load('clefs.mat');image(C.clefs_pic)colormap(gray)axis off% Staffaxes('position',[.1 .65 .1 .3],'xticklabel','','yticklabel','', ...'xlim',[0 1],'ylim',[-7 7]);box onfor y = [-5:-1 1:5]line([0 1],[y y],'color','black')endline([.33 .67],[0 0],'color','black')% NotesH.notes = zeros(13,1);H.sharps = zeros(13,1);for n = 1:13H.notes(n) = line(.5,0,'marker','.','markersize',24,'vis','off');H.sharps(n) = text(.375,0,'#','fontsize',12,'color','blue','vis','off');end% Chord togglesH.togs = zeros(1,13);callback = ['if get(gcbo,''value'')==0,' ...'set(gcbo,''background'',[.94 .94 .94]),' ...'else, set(gcbo,''background'',''blue''), end,' ...'H=get(gca,''userdata''); pianoex(H.root)'];for k = 0:12H.togs(k+1) = uicontrol('style','toggle','units','normal', ...'pos',[.05+k*.05 .54 .04 .04],'value',k==0,'background',grayc, ...'callback',callback);uicontrol('style','text','units','normal','string',num2str(k), ...'fontsize',12,'fontweight','bold','pos',[.04+k*.05 .49 .05 .05], ...'background',grayc)endset(H.togs(1),'value',1,'background','blue')% TuningH.voice = zeros(1,3);voicestring = {'equal','just','piano'};callback = ['H=get(gca,''userdata'');' ...'set(H.voice,''background'',[.94 .94 .94],''value'',0),' ...'set(gcbo,''background'',''blue'',''value'',1),' ...'pianoex(H.root)'];% Do not show piano if Signal Processing Toolbox is not available.kmax = 2 + (exist('resample','file')==2);for k = 1:kmaxH.voice(k) = uicontrol('style','toggle','units','normal', ...'pos',[1.00-k*.08 .54 .04 .04],'value',0,'background',grayc, ...'callback',callback);uicontrol('style','text','units','normal','string',voicestring{k}, ...'fontsize',12,'fontweight','bold', ...'pos',[.98-k*.08 .49 .08 .05],'background',grayc)endset(H.voice(1),'value',1,'background','blue');% Scopetmin = .06;tmax = .12;s = tmin:4/44100:tmax;axes('position',[.30 .65 .65 .30],'xlim',[tmin tmax],'ylim',[-1 1])H.scope = line(s,0*s);box onset(zoom,'motion','horizontal','direction','in','enable','on')% Piano sampleS = load('piano_c.mat');middle_c = double(S.piano_c)/2^15;H.root = 0;set(gca,'userdata',H)set(gcf,'userdata',middle_c)shg
end

        在微型键盘上用for循环演奏出两个八音度的25个琴键半音音阶。

for n= -12:12, pianoex(n), end

哆来咪


        对于\sigma来说,C大调音阶为\sigma ^{0} \sigma ^{2} \sigma ^{4} \sigma ^{5} \sigma ^{7} \sigma ^{9} \sigma ^{11} \sigma ^{12}

 在微型键盘上演奏:

for n =[0 2 4 5 7 9 11 12], pianoex(n), end

计算出音符间半音程个数:

diff([0 2 5 7 9 11 12])

振动与调式


        振动的模型可以称为由一些称为调式特征函数的加权和来表示。不同的调式在不同的特征频率或特征值下振动。

        依赖于时间的模态振动为:

v_{k}(x,t)=sinkxsinkt, k=1,2,3...

function vibrating_string
% VIBRATING_STRING   Wave equation in one dimension.
%   Solutions of the one-dimensional wave equation are expressed
%   as a time-varying weighted sums of the first nine modes.
%   The one-dimensional domain is an interval of length pi, so the k-th
%   frequency and mode are lambda(k) = k^2 and u(k) = sin(k*x).m = 11;   % Number of grid points
speed = 1;
bvals = [0; 0; 0; 0];
t = 0;while bvals(4) == 0% Initialize figureshgclfset(gcf,'colormap',hot(64))b = zeros(1,4);for k = 1:4b(k) = uicontrol('style','toggle','value',bvals(k), ...'units','normal','position',[.08+.15*k .03 .14 .05]);endset(b(1),'string','modes/wave')set(b(2),'string','slower')set(b(3),'string','faster')set(b(4),'string','stop')if bvals(2)==1speed = speed/sqrt(2);set(b(2),'value',0);endif bvals(3)==1speed = speed*sqrt(2);set(b(3),'value',0);endbvals = cell2mat(get(b,'value'));modes = bvals(1)==0;x = (0:4*m)/(4*m)*pi;orange = [1 1/3 0];gray = get(gcf,'color');if modes% Modesfor k = 1:9subplot(3,3,k)h(k) = plot(x,zeros(size(x)));axis([0 pi -3/2 3/2])set(h(k),'color',orange,'linewidth',3)set(gca,'color',gray','xtick',[],'ytick',[])enddelta = 0.005*speed;bvs = bvals;while all(bvs == bvals)t = t + delta;for k = 1:9u = sin(k*t)*sin(k*x);set(h(k),'ydata',u)enddrawnowbvs = cell2mat(get(b,'value'));endelse% Wave% The coefficients.a = 1./(1:9);h = plot(x,zeros(size(x)));axis([0 pi -9/4 9/4])set(h,'color',orange,'linewidth',3)set(gca,'color',gray','xtick',[],'ytick',[])delta = 0.005*speed;bvs = bvals;while all(bvs == bvals)t = t + delta;u = zeros(size(x));for k = 1:9u = u + a(k)*sin(k*t)*sin(k*x);endset(h,'ydata',u)drawnowbvs = cell2mat(get(b,'value'));endendbvals = bvs;
end
set(b(1:3),'vis','off')
set(b(4),'string','close','callback','close(gcf)')


利萨如曲线


        利萨如曲线给出了音乐和弦数学描述的一些内在内容。

        二维利萨如曲线是由下面的参数方程绘制的:

x=sin(at+\alpha ), y=sin(bt+\beta )

        三维利萨如曲线由以下参数方程绘制:

x=sin(at+\alpha ), y=sin(bt+\beta ), z=sin(ct+\gamma )

        绘图命令可简化如下:

x=sint, y=sinat, z=sinbt

function lissajous(a,b)
% LISSAJOUS  2D and 3D Lissajous curves.
% x = sin(t), y = sin(a*t) or 
% x = sin(t), y = sin(a*t), z = sin(b*t).
% Usage:
%    lissajous(a,b)
%    lissajous('a','b'), to retain symbolic representation.
%    lissajous, to open gui with default values.
% Enter rational and irrational values of a and b in the edit boxes.
% Enter b = 0 for 2D curves.
%    eg:
%    a = 3/2 , b = 5/4
%    a = 2^(7/12), b = 2^(4/12)
%    a = 5/4 , b = 0
%
% See Wikipedia article: http://en.wikipedia.org/wiki/Lissajous_curve % Default value of the parameters.if nargin == 0a = '3/2';b = '5/4';elseif nargin == 1b = 0;end% Retain both character and numeric representation of the parameters.if ischar(a)sa = a;a = str2num(a);elsesa = rats(a);endif ischar(b)sb = b;b = str2num(b);elsesb = rats(b);end% Initializeloop = true;t = 0;dt = pi/1024;initialize_graphics;% Run the loop until the 'X' toggle is pushed.while loopt = t + dt;x = sin(t);y = sin(a*t);z = sin(b*t);plotdot(x,y,z)endclose% ------------------------------------------------function initialize_graphicsclfshgset(gcf,'color','white')initialize_plotuicontrol('string','a = ','style','edit','units','normalized', ...'position',[.25,.05,.05,.05],'background','white')uicontrol('tag','a','style','edit','units','normalized', ...'position',[.30,.05,.20,.05],'background','white', ...'string',sa,'callback',@abcallback);uicontrol('string','b = ','style','edit','units','normalized', ...'position',[.55,.05,.05,.05],'background','white')uicontrol('tag','b','style','edit','units','normalized', ...'position',[.60,.05,.20,.05],'background','white', ...'string',sb,'callback',@abcallback);uicontrol('string','line','style','toggle','units','normalized', ...'tag','mode','position',[.06,.48,.05,.05],'background','white', ...'foreground','blue','callback',@modecallback);uicontrol('string','X','style','toggle','units','normalized', ...'position',[.95,.95,.04,.04],'background','white', ...'callback',@xcallback);end% ------------------------------------------------function initialize_plotmode = get(findobj('tag','mode'),'value');if isempty(mode) || mode==0plot3(0,0,0,'.','erasemode','none')elseplot3(0,0,0,'.','markersize',24,'color',[0 2/3 0])endaxis([-1 1 -1 1 -1 1])set(gca,'xtick',[],'ytick',[],'ztick',[])axis squarebox onswitch bcase 0view(2)title('sin(t), sin(a*t)')case 1view(3)title('sin(t), sin(a*t), sin(b*t)')endt = 0;end% ------------------------------------------------function plotdot(x,y,z)% Move dot on plot.set(get(gca,'child'),'xdata',x,'ydata',y,'zdata',z)drawnowend% ------------------------------------------------function abcallback(h,~)% Callback for ab controls.switch get(h,'tag')case 'a', a = str2num(get(h,'string'));case 'b', b = str2num(get(h,'string'));endinitialize_plotend% ------------------------------------------------function modecallback(h,~)% Callback for mode control.switch get(h,'value')case 0, set(h,'string','line','foreground','blue')dt = dt/4;  % Slowercase 1, set(h,'string','dot','foreground',[0 2/3 0])dt = 4*dt;  % Fasterendinitialize_plotend% ------------------------------------------------function xcallback(~,~)% Callback for X control.loop = false;endend % Lissajous


和声与音调与和弦


        平均乐律纯律。平均乐律由反复求\sigma的幂次定义,纯律是由一系列分数定义的。

%% Equal temperament and just intonation[sigma.^(0:12)1 16/15 9/8 6/5 5/4 4/3 7/5 3/2 8/5 5/3 7/4 15/8 2]' 

        和弦是两个或两个以上的音符同时发声的演奏方式。在pianoex程序界面上可以选中1到12的双态开关来产生和弦,标注为0的开关总处于选中的状态。

%% C major fifth chord, equal temperament and just temperament[sigma.^[0 4 7]1 5/4 3/2]'

相关文章:

Chapter20 音乐

目录 音乐 琴键 哆来咪 振动与调式 利萨如曲线 和声与音调与和弦 音乐 在音乐理论中&#xff0c;一个八音度&#xff08;octave&#xff09;是一个频率范围相差二倍的区间。在大多数西洋乐器中&#xff0c;一个八音度被分为12个频率比相等的半音程&#xff08;semitone&a…...

详解Nodejs中的模块化

Nodejs是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;它允许开发者使用JavaScript在服务器端运行代码。在Nodejs中&#xff0c;模块化是一种组织和重用代码的重要方式。模块化允许我们将代码拆分成小块&#xff0c;使得代码结构更清晰、易于维护&#xff0c;并促进…...

debug思路 - maven构建报错

问题&#xff1a;maven面板中&#xff0c;进行compile、deploy操作时报错。 debug步骤&#xff1a; 1、鼠标右键选择“修改运行配置”。在运行命令中添加参数-X&#xff0c;用于产生执行调试输出。例如&#xff1a;compile -f -X pom.xml。 2、再次进行compile、deploy操作&…...

DSP学习笔记

间接寻址&#xff08;通过放在辅助寄存器里面&#xff0c;可以对地址包括很多操作&#xff0c;1&#xff0c;-1&#xff0c;/-平移量&#xff0c;辅助寄存器内容的修改是在ARAU0和ARAU1中完成的。分为单操作数和双操作数&#xff0c;有很多模式在ARAU。单操作数间接寻址&#x…...

Java中的Apache Commons Math是什么?

Java中的Apache Commons Math是一个开源的数学库&#xff0c;它提供了许多常用的数学函数和算法&#xff0c;例如线性代数、微积分、统计、插值、拟合等。这个库对于需要处理大量数据的开发者来说非常有用&#xff0c;因为它可以大大简化代码并提高效率。 让我们从新手的角度来…...

规划路线(微信小程序、H5)

//地图getLocationDian(e1, e2) {console.log(e1, e2);let self this;self.xx1 [];self.xx2 [];self.points [];// self.markers[]console.log(self.markers, >marks);// self.$jsonp(url, data).then(re > {// var coors re.result.routes[0].polyline;// for (v…...

【CSS】视频文字特效

效果展示 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"container"&g…...

linux-MySQL的数据目录

总结&#xff1a; window中的my.ini linux 中 /etc/my.cnfwindow中的D:\soft\mysql-5.7.35-winx64\data linux 中 /var/lib/mysql 1.查找与mysql有关的目录 find / -name mysql [rootVM-4-6-centos etc]# find / -name mysql /opt/mysql /etc/selinux/targeted/tmp/modul…...

AI绘图实战(十二):让AI设计LOGO/图标/标识 | Stable Diffusion成为设计师生产力工具

S&#xff1a;AI能取代设计师么&#xff1f; I &#xff1a;至少在设计行业&#xff0c;目前AI扮演的主要角色还是超级工具&#xff0c;要顶替&#xff1f;除非甲方对设计效果无所畏惧~~ 预先学习&#xff1a; 安装及其问题解决参考&#xff1a;《Windows安装Stable Diffusion …...

机器视觉系统设计:基础知识

机器视觉系统的设计 机器视觉系统集成是将各种不同的组件和子系统组合在一起并使它们充当单个统一系统的过程。 视觉系统集成包括光源&#xff0c;镜头&#xff0c;相机&#xff0c;相机接口和图像处理软件等等。您可能想知道如何设计和实现一个完整&#xff0c;成功的机器视…...

C# Blazor 学习笔记(11):路由跳转和信息传值

文章目录 前言路由跳转测试用例路由传参/路由约束想法更新&#xff1a;2023年8月4日 前言 Blazor对路由跳转进行了封装。 ASP.NET Core Blazor 路由和导航 NavigationManager 类 本文的主要内容就是全局的跳转 路由跳转 路由跳转就要用到NavigationManager 类。 其实最常用…...

Centos 7 安装 Python 时 zlib not available 错误解决

Centos 7 安装 Python 时 zlib not available 错误解决 报错信息&#xff0c; zipimport.ZipImportError: cant decompress data; zlib not available解决方法&#xff0c; sudo yum install -y zlib zlib-devel完结&#xff01;...

python sqllite基本操作

以下是一些基本的SQLite3操作&#xff1a; 连接到数据库&#xff1a;使用sqlite3.connect()函数连接到数据库&#xff0c;返回一个Connection对象&#xff0c;我们就是通过这个对象与数据库进行交互。例如&#xff1a; import sqlite3 conn sqlite3.connect(example.db)创建…...

记录--基于css3写出的流光登录(注释超详细!)

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 完整效果 对基本的表单样式进行设置 这里设置了基本的表单样式&#xff0c;外层用了div进行包裹&#xff0c;重点是运用了两个i元素在后期通过css样式勾画出一条线没在聚焦文本框的时候线会过度成一个…...

【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?

目录 前言 wrk 优点 缺点 jmeter 优点 缺点 locust 优点 缺点 总结 资料获取方法 前言 当你想做性能测试的时候&#xff0c;你会选择什么样的测试工具呢&#xff1f;是会选择wrk&#xff1f;jmeter&#xff1f;locust&#xff1f;还是loadrunner呢&#xff1f; 今…...

为什么升级JDK 11后堆外内存使用增长了?

文章首发地址 JDK 11堆外使用增长的原因 JDK 11堆外使用增长的原因可能有以下几个&#xff1a; G1垃圾回收器的默认设置更改&#xff1a; JDK 11中的G1垃圾回收器默认开启了堆外内存分配&#xff0c;以减少Full GC时的STW时间。因此&#xff0c;如果应用程序使用了G1垃圾回收…...

Vue自定义防重复点击指令(v-repeatClick)

&#xff01;&#xff01;&#xff01;Vue防抖节流方法&#xff1a;VUE使用节流和防抖_vue防抖节流_停留的章小鱼的博客-CSDN博客 新建js文件directive.js: // directive.js // 防重复点击(指令实现) //使用&#xff1a; 在需要的按钮中加 v-repeatClick 指令即可 <el-but…...

高频高速板行业现状及市场前景

覆铜板全称为覆铜箔层压板&#xff0c;是由增强材料浸以树脂胶液 , 覆以铜箔 , 经热压而成的一种板状材料。覆铜板是制作印制电路板的核心材料&#xff0c;担负着印制电路板导电、绝缘、支撑三大功能。高频高速电路板有介电常数小且稳定、介质损耗小、传输损耗小等特点。 高频…...

【练手】自定义注解+AOP

在SpringBoot中实现自定义注解&#xff1a;( 声明注解的作用级别以及保留域 ) Target({ElementType.METHOD,ElementType.PARAMETER}) //注解的作用级别 Retention(RetentionPolicy.RUNTIME) //注解的保留域 public interface Log {int value() default 99; }在…...

QComboBox添加样式后,编辑栏背景一直白色问题解决方法。

一、QComboBox样式 /* 未下拉时&#xff0c;QComboBox的样式 */ QComboBox {border: 1px solid gray; /* 边框 */border-radius: 3px; /* 圆角 */padding: 1px 18px 1px 3px; /* 字体填衬 */color: #000;font: normal normal 15px "Microsoft YaHei";backgrou…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...